be more robust
[wolnelektury.git] / apps / modeltranslation / management / commands / translation2po.py
index c38d82c..e9ec302 100644 (file)
@@ -41,12 +41,20 @@ def make_po(language=''):
     return po
 
 
+def get_languages(langs):
+    if not langs: return settings.LANGUAGES
+    langs = langs.split(',')
+    lm = dict(settings.LANGUAGES)
+    return map(lambda l: (l, lm.get(l, l)), langs)
+
+
 class Command(BaseCommand):
     option_list = BaseCommand.option_list + (
         make_option('-d', '--directory', help='Specify which directory should hold generated PO files', dest='directory'),
         make_option('-l', '--load', help='load locales back to source', action='store_true', dest='load', default=False),
         make_option('-L', '--language', help='locales to load', dest='lang', default=None),
         make_option('-n', '--poname', help='name of the po file [no extension]', dest='poname', default=None),
+        make_option('-k', '--keep-running', help='keep running even when missing an input file', dest='keep_running', default=False, action='store_true'),
         )
     help = 'Export models from app to po files'
     args = 'app'
@@ -75,17 +83,15 @@ class Command(BaseCommand):
                     objects[md.__name__] = {}
                     modmod['model'] = md
 
-<<<<<<< Updated upstream
-            for lng in zip(*settings.LANGUAGES)[0]:
-                pofile = os.path.join(options['directory'], lng, appname + '.po')
-=======
             languages = get_languages(options['lang'])
 
             for lng in zip(*languages)[0]:
                 pofile = os.path.join(options['directory'], lng, options['poname'] + '.po')
-                if not os.path.exists(pofile): raise OSError('%s po file: %s not found' % (appname, pofile))
-                print pofile
->>>>>>> Stashed changes
+                if not os.path.exists(pofile): 
+                    if options['keep_running']:
+                        continue
+                    else:
+                        raise OSError('%s po file: %s not found' % (appname, pofile))
                 po = polib.pofile(pofile)
                 for entry in po:
                     loc, pk = entry.occurrences[0]
@@ -114,9 +120,13 @@ class Command(BaseCommand):
                                 po = make_po(cur_lang)
                                 pofiles[cur_lang] = po
 
+                            k = getattr(obj, '%s_%s' % (fld, settings.LANGUAGE_CODE))
+                            if k is None: k = ''
+                            v = getattr(obj, locfld)
+                            if v is None: v = ''
                             entry = polib.POEntry(
-                                msgid=getattr(obj, '%s_%s' % (fld, settings.LANGUAGE_CODE)),
-                                msgstr=getattr(obj, locfld),
+                                msgid=k,
+                                msgstr=v,
                                 occurrences=[('%s/%s/%s' % (appname, md.__name__, locfld), obj.id)])
                             po.append(entry)
 
@@ -124,4 +134,5 @@ class Command(BaseCommand):
             for lng, po in pofiles.items():
                 try: os.makedirs(os.path.join(directory, lng))
                 except OSError: pass
+                print lng, options
                 po.save(os.path.join(directory, lng, '%s.po' % options['poname']))