add_dictionary.py
2.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# -*- coding: utf-8 -*-
import sys, io
from django.core.management.base import BaseCommand
from django.db.transaction import atomic
from accounts.util import bot_history
from dictionary.models import Lexeme, Vocabulary
class Command(BaseCommand):
help = "Adds dictionary 'dictionary' to all lexemes from 'filename' (id's in first column, tab delimiter')."
missing_args_message = 'Arguments \'filename\' and \'dictionary\' required.'
def add_arguments(self, parser):
# Positional argument
parser.add_argument('filename', help='Filename with lexeme id\'s')
parser.add_argument('dictionary', help='Name of dictionary')
def handle(self, *args, **options):
add_dict(options.get('filename'), options.get('dictionary'))
@atomic
def add_dict(filename, dictionary):
bot_history() # ustawia historię dla użytkownika 'Kuźniobot', a jeśli takiego nie ma, to bez historii
in_file = io.open(filename, "r", encoding='utf-8')
try:
dict_obj = Vocabulary.objects.get(id=dictionary)
except:
print >>sys.stderr, u'Nie ma słownika: {}'.format(dictionary).encode("utf-8")
return
for line in in_file:
elements = line.split()
if len(elements):
lex_id = elements[0]
try:
lex_obj = Lexeme.objects.get(id=lex_id)
except:
print >>sys.stderr, u'Nie ma leksemu opisanego w linii: \'{}\''.format(line.strip()).encode("utf-8")
continue
if len(elements) > 1: # sprawdź poprawność postaci hasłowej, jeśli została podana w pliku źródłowym
if lex_obj.entry <> elements[1].strip():
print >>sys.stderr, u'Leksem o identyfikatorze: {} ma w bazie postać: \'{}\', a w pliku podanym jako argument: \'{}\''.format(elements[0], lex_obj.entry, elements[1]).encode("utf-8")
continue
created = dict_obj.add_lexeme(lex_obj)
if not created:
print >>sys.stderr, u'Leksem opisany w linii: \'{}\' należał już do słownika: {}'.format(line.strip(), dictionary).encode("utf-8")
in_file.close()