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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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()