예제 #1
0
파일: addpo.py 프로젝트: kicad-cn/pogether
    def handle(self, *args, **opt):
        if opt['verbosity'] == 0:
            logging.basicConfig(level=logging.CRITICAL)
        elif opt['verbosity'] == 1:
            logging.basicConfig(level=logging.ERROR)
        elif opt['verbosity'] == 2:
            logging.basicConfig(level=logging.INFO)
        elif opt['verbosity'] == 3:
            logging.basicConfig(level=logging.DEBUG)
        if opt['poName'] == None:
            BaseName = os.path.splitext(os.path.basename(opt['file']))[0]
        else:
            BaseName = opt['poName']
        PoFile = polib.pofile(opt['file'])
        docObj = None
        if Document.objects.filter(Name__exact=BaseName).count(
        ) > 0:  # Check whether this doc has been inserted or not
            docObj = Document.objects.get(Name__exact=BaseName)
            if not opt['isUpdate']:
                logging.warning("PO文件已存在,跳过添加")
                sys.exit(0)

        FileObj = File(open(opt['file'], 'r'), name=BaseName)
        if docObj == None:  # Construct a new doc obj
            docObj = Document()

        docObj.Name = BaseName
        docObj.PoFile = FileObj
        docObj.save()  # Update or Insert

        if opt['isUpdate']:
            queryset = POEntry.objects.filter(Doc__Name__exact=docObj.Name)
            logging.info("删除原有条目(total:%d)" % (len(queryset)))
            queryset.delete()

        total = len(PoFile)
        idx = 0
        with transaction.atomic():
            for entry in PoFile:
                idx += 1
                logging.debug("添加翻译条目(%d/%d)" % (idx, total))
                POEntry(Raw=pickle.dumps(entry),
                        Doc=docObj,
                        Translated=entry.translated(),
                        Msgid=entry.msgid,
                        Msgstr=entry.msgstr).save()