web/hdalab/management/commands/export_wpcategory_csv.py
changeset 119 e3ebe3545f72
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/hdalab/management/commands/export_wpcategory_csv.py	Thu Feb 16 21:48:40 2012 +0100
@@ -0,0 +1,89 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Feb 2, 2012
+
+@author: ymh
+'''
+from django.core.management.base import BaseCommand, CommandError
+from optparse import make_option
+from hdalab.management.utils import UnicodeWriter
+from hdabo.wp_utils import normalize_tag
+from hdalab.models.categories import WpCategory
+from django.utils.http import urlquote
+from hdabo.utils import show_progress
+
+class Command(BaseCommand):
+    '''
+    Command to export tags
+    '''
+    args = '<path_to_csv_file>'
+    options = '[-e|--encoding csv file encoding]|[-f|--force force file overwrite]'
+    help = """export csv files for hdabo
+Options:
+    -e, --encoding : files encoding. default to latin-1
+    -f, --force : force file overwrite
+    """
+    
+    option_list = BaseCommand.option_list + (
+        make_option("-e","--encoding",
+            action='store',
+            type='string',
+            dest='encoding',
+            default="utf-8",
+            help='file encoding, default utf-8'),
+        make_option("-f","--force",
+            action='store_true',
+            dest='force',
+            default=False,
+            help='force file overwrite'),
+        )
+        
+    def handle(self, *args, **options):
+        
+        if len(args) == 0 or not args[0]:
+            raise CommandError("Gives at last one csv file to export")
+
+        self.encoding = options.get("encoding", "utf-8")
+        self.force = options.get("force", False)
+        self.path = args[0].strip()
+        self.interactive = options.get("interactive",True)
+
+        file = None        
+        try:
+            try:
+                file = open(self.path,'r')
+                if (not self.force) and self.interactive:
+                    print self.path
+                    resp = raw_input("export file already exists. override ? type yes to continue : ")
+                    if resp is not None and (resp.lower() == "yes" or resp.lower() == "y"):
+                        self.force = True
+                        # clear file
+                    else:
+                        return "error"
+                elif not self.interactive and not self.force:
+                    print "Export file %s already exists. Exit." % (self.path)
+                    return "error"
+    
+                file.close()
+                file = open(self.path,'w')
+            except IOError:
+                file = open(self.path,'w')
+        
+            csv = UnicodeWriter(file, doublequote=False, escapechar="\\", encoding=self.encoding)
+            writer = None
+            
+            qs = WpCategory.objects.filter(tagwpcategory__hidden=False).distinct()
+            
+            total = qs.count()
+            
+            for i,wpcat in enumerate(qs):
+                writer = show_progress(i+1, total, wpcat.label, 50, writer)
+                nb_ds = 0
+                for tag in wpcat.tagwpcategory_set.all():
+                    nb_ds += tag.tag.datasheet_set.count()
+                    
+                csv.writerow([wpcat.label, u"http://fr.wikipedia.org/wiki/Catégorie:%s" % urlquote(normalize_tag(wpcat.label)), nb_ds]) 
+
+        finally:
+            if file is not None:
+                file.close()
\ No newline at end of file