Mercurial > projects > dil
annotate trunk/src/translator/project.py @ 481:04adc4e3fdda
Translator: some fixes and additions.
Projects can be saved now. Documents can be switched using Ctrl+Tab and
Ctrl+Shift+Tab. Some items in ProjectTree can be edited now.
Added my last will to the file AUTHORS.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Wed, 14 Nov 2007 22:07:50 +0100 |
parents | 3b5421d40f9b |
children | 1401e38d1e2e |
rev | line source |
---|---|
438
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
1 # -*- coding: utf-8 -*- |
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
2 # Author: Aziz Köksal |
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
3 # License: GPL2 |
442
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
4 import os |
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
5 from errors import LoadingError |
438
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
6 import langfile |
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
7 import datetime |
439
cdbb2bf6dd07
Translator: applied some fixes and made some additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
438
diff
changeset
|
8 import yaml |
438
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
9 |
460
77c17bbe9d20
Translator: added new modules; applied fixes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
442
diff
changeset
|
10 def newProjectData(projectName): |
77c17bbe9d20
Translator: added new modules; applied fixes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
442
diff
changeset
|
11 return { |
77c17bbe9d20
Translator: added new modules; applied fixes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
442
diff
changeset
|
12 "Name":projectName, |
77c17bbe9d20
Translator: added new modules; applied fixes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
442
diff
changeset
|
13 "LangFiles":[], |
77c17bbe9d20
Translator: added new modules; applied fixes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
442
diff
changeset
|
14 "SourceLangFile":'', |
77c17bbe9d20
Translator: added new modules; applied fixes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
442
diff
changeset
|
15 "MsgIDs":[], |
77c17bbe9d20
Translator: added new modules; applied fixes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
442
diff
changeset
|
16 "CreationDate":str(datetime.datetime.utcnow()), |
77c17bbe9d20
Translator: added new modules; applied fixes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
442
diff
changeset
|
17 "BuildScript":'' |
77c17bbe9d20
Translator: added new modules; applied fixes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
442
diff
changeset
|
18 } |
77c17bbe9d20
Translator: added new modules; applied fixes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
442
diff
changeset
|
19 |
438
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
20 class Project: |
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
21 # Members: |
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
22 # name |
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
23 # source |
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
24 # langFilePaths |
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
25 # langFile |
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
26 # msgids |
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
27 # creationDate |
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
28 def __init__(self, projectPath): |
442
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
29 self.projectPath = projectPath |
438
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
30 # Load project file and check data integrity. |
477
3b5421d40f9b
Translator: major changes and additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
472
diff
changeset
|
31 try: |
3b5421d40f9b
Translator: major changes and additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
472
diff
changeset
|
32 self.doc = yaml.load(open(projectPath, "r")) |
3b5421d40f9b
Translator: major changes and additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
472
diff
changeset
|
33 except yaml.YAMLError, e: |
3b5421d40f9b
Translator: major changes and additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
472
diff
changeset
|
34 raise LoadingError(str(e)) |
3b5421d40f9b
Translator: major changes and additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
472
diff
changeset
|
35 self.verify() |
3b5421d40f9b
Translator: major changes and additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
472
diff
changeset
|
36 |
3b5421d40f9b
Translator: major changes and additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
472
diff
changeset
|
37 def verify(self): |
3b5421d40f9b
Translator: major changes and additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
472
diff
changeset
|
38 doc = self.doc |
438
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
39 self.checkType(doc, dict) |
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
40 try: |
481
04adc4e3fdda
Translator: some fixes and additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
477
diff
changeset
|
41 self.name = unicode(doc["Name"]) |
472
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
42 self.srcLangFilePath = str(doc["SourceLangFile"]) |
442
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
43 self.langFilePaths = list(doc["LangFiles"]) |
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
44 self.msgIDs = list(doc["MsgIDs"]) |
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
45 self.creationDate = str(doc["CreationDate"]) |
460
77c17bbe9d20
Translator: added new modules; applied fixes.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
442
diff
changeset
|
46 self.buildScript = str(doc["BuildScript"]) |
438
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
47 except KeyError, e: |
442
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
48 raise LoadingError("Missing member '%s' in '%s'" % (e.message, projectPath)) |
438
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
49 |
439
cdbb2bf6dd07
Translator: applied some fixes and made some additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
438
diff
changeset
|
50 for path in self.langFilePaths: |
438
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
51 self.checkType(path, str) |
442
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
52 |
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
53 msgIDs = [] |
438
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
54 for msg in self.msgIDs: |
442
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
55 self.checkType(msg, dict) |
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
56 try: |
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
57 msg["ID"] = int(msg["ID"]) |
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
58 msg["Name"] = unicode(msg["Name"]) |
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
59 msg["Order"] = int(msg["Order"]) |
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
60 except KeyError, e: |
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
61 raise LoadingError("Project: a message is missing the '%s' key." % str(e)) |
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
62 msgIDs += [msg] |
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
63 self.msgIDs = msgIDs |
438
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
64 |
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
65 # Load language files. |
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
66 self.langFiles = [] |
471
b6fa41e6f0b4
Translator: implemented some functionality of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
460
diff
changeset
|
67 IDList = [msg["ID"] for msgID in self.msgIDs] |
438
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
68 for filePath in self.langFilePaths: |
472
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
69 langFile = self.loadLangFile(filePath) |
471
b6fa41e6f0b4
Translator: implemented some functionality of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
460
diff
changeset
|
70 langFile.createMissingMessages(IDList) |
b6fa41e6f0b4
Translator: implemented some functionality of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
460
diff
changeset
|
71 self.langFiles += [langFile] |
472
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
72 self.srcLangFile = self.loadLangFile(self.srcLangFilePath) |
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
73 self.srcLangFile.createMissingMessages(IDList) |
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
74 self.srcLangFile.isSource = True |
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
75 self.langFiles += [self.srcLangFile] |
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
76 |
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
77 for langFile in self.langFiles: |
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
78 langFile.setSource(self.srcLangFile) |
438
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
79 |
439
cdbb2bf6dd07
Translator: applied some fixes and made some additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
438
diff
changeset
|
80 def checkType(self, var, type_): |
438
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
81 if not isinstance(var, type_): |
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
82 raise LoadingException("%s is not of type %s" % (str(var), str(type_))) |
2c177053cd15
Translator: added modules langfile and project.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
83 |
472
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
84 def loadLangFile(self, filePath): |
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
85 if not os.path.exists(filePath): |
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
86 # Look in project directory. |
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
87 projectDir = os.path.dirname(self.projectPath) |
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
88 filePath2 = os.path.join(projectDir, filePath) |
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
89 if not os.path.exists(filePath2): |
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
90 raise LoadingError("Project: Language file '%s' doesn't exist"%filePath) |
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
91 filePath = filePath2 |
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
92 return langfile.LangFile(filePath) |
30925590f392
Translator: implemented more functionalities of MsgForm.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
471
diff
changeset
|
93 |
481
04adc4e3fdda
Translator: some fixes and additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
477
diff
changeset
|
94 def setName(self, name): |
04adc4e3fdda
Translator: some fixes and additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
477
diff
changeset
|
95 self.name = name |
04adc4e3fdda
Translator: some fixes and additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
477
diff
changeset
|
96 |
442
5968e273449b
Translator: added new modules; made fixes and many additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
439
diff
changeset
|
97 def save(self): |
481
04adc4e3fdda
Translator: some fixes and additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
477
diff
changeset
|
98 self.doc["Name"] = self.name |
04adc4e3fdda
Translator: some fixes and additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
477
diff
changeset
|
99 file_ = open(self.projectPath, "w") |
04adc4e3fdda
Translator: some fixes and additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
477
diff
changeset
|
100 yaml.dump(self.doc, stream=file_, allow_unicode=True) |
04adc4e3fdda
Translator: some fixes and additions.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
477
diff
changeset
|
101 file_.close() |