Benjamin Renard commited on 2014-07-19 21:55:13
Showing 1 changed files, with 82 additions and 21 deletions.
... | ... |
@@ -61,29 +61,35 @@ class Group(object): |
61 | 61 |
self.deletedContributors={} |
62 | 62 |
self.contributions={} |
63 | 63 |
self.deletedContributions={} |
64 |
+ self.categories={} |
|
65 |
+ self.deletedCategories={} |
|
64 | 66 |
|
65 | 67 |
def load(self,data): |
66 |
- try: |
|
67 |
- self.uuid=data['uuid'] |
|
68 |
- self.name=data['name'] |
|
69 |
- for email in data['contributors']: |
|
68 |
+ self.uuid=data.get('uuid',None) |
|
69 |
+ self.name=data.get('name',None) |
|
70 |
+ for email in data.get('contributors'): |
|
70 | 71 |
self.contributors[email]=Contributor() |
71 | 72 |
self.contributors[email].load(data['contributors'][email]) |
72 | 73 |
if 'deletedContributors' in data: |
73 |
- for email in data['deletedContributors']: |
|
74 |
+ for email in data.get('deletedContributors',{}): |
|
74 | 75 |
self.deletedContributors[email]=Contributor() |
75 | 76 |
self.deletedContributors[email].load(data['deletedContributors'][email]) |
76 |
- for uuid in data['contributions']: |
|
77 |
+ for uuid in data.get('contributions',{}): |
|
77 | 78 |
self.contributions[uuid]=Contribution() |
78 | 79 |
self.contributions[uuid].load(data['contributions'][uuid]) |
79 | 80 |
if 'deletedContributions' in data: |
80 |
- for uuid in data['deletedContributions']: |
|
81 |
+ for uuid in data.get('deletedContributions',{}): |
|
81 | 82 |
self.deletedContributions[uuid]=Contribution() |
82 | 83 |
self.deletedContributions[uuid].load(data['deletedContributions'][uuid]) |
84 |
+ if 'categories' in data: |
|
85 |
+ for uuid in data.get('categories',{}): |
|
86 |
+ self.categories[uuid]=Category() |
|
87 |
+ self.categories[uuid].load(data['categories'][uuid]) |
|
88 |
+ if 'deletedCategories' in data: |
|
89 |
+ for uuid in data.get('deletedCategories',{}): |
|
90 |
+ self.deletedCategories[uuid]=Category() |
|
91 |
+ self.deletedCategories[uuid].load(data['deletedCategories'][uuid]) |
|
83 | 92 |
return True |
84 |
- except Exception,e: |
|
85 |
- logging.error('Error loading JSON data : %s',e) |
|
86 |
- return False |
|
87 | 93 |
|
88 | 94 |
def export(self): |
89 | 95 |
contributors={} |
... | ... |
@@ -102,13 +108,23 @@ class Group(object): |
102 | 108 |
for uuid in self.deletedContributions: |
103 | 109 |
deletedContributions[uuid]=self.deletedContributions[uuid].export() |
104 | 110 |
|
111 |
+ categories={} |
|
112 |
+ for uuid in self.categories: |
|
113 |
+ categories[uuid]=self.categories[uuid].export() |
|
114 |
+ |
|
115 |
+ deletedCategories={} |
|
116 |
+ for uuid in self.deletedCategories: |
|
117 |
+ deletedCategories[uuid]=self.deletedCategories[uuid].export() |
|
118 |
+ |
|
105 | 119 |
return { |
106 | 120 |
'uuid': self.uuid, |
107 | 121 |
'name': self.name, |
108 | 122 |
'contributors': contributors, |
109 | 123 |
'deletedContributors': deletedContributors, |
110 | 124 |
'contributions': contributions, |
111 |
- 'deletedContributions': deletedContributions |
|
125 |
+ 'deletedContributions': deletedContributions, |
|
126 |
+ 'categories': categories, |
|
127 |
+ 'deletedCategories': deletedCategories |
|
112 | 128 |
} |
113 | 129 |
|
114 | 130 |
def restoreContributor(self, email): |
... | ... |
@@ -219,6 +235,23 @@ class Group(object): |
219 | 235 |
ret.contributions[uuid]=group.contributions[uuid] |
220 | 236 |
del ret.deletedContributions[uuid] |
221 | 237 |
|
238 |
+ ## Categories |
|
239 |
+ for uuid in self.categories: |
|
240 |
+ if uuid in group.categories: |
|
241 |
+ ret.categories[uuid]=self.categories[uuid].sync(group.categories[uuid]) |
|
242 |
+ elif uuid not in ret.deletedCategories: |
|
243 |
+ ret.categories[uuid]=self.categories[uuid] |
|
244 |
+ elif self.categories[uuid].lastChange>ret.deletedCategories[uuid].lastChange: |
|
245 |
+ ret.categories[uuid]=self.categories[uuid] |
|
246 |
+ del ret.deletedCategories[uuid] |
|
247 |
+ for uuid in group.categories: |
|
248 |
+ if uuid not in ret.categories: |
|
249 |
+ if uuid not in ret.deletedCategories: |
|
250 |
+ ret.categories[uuid]=group.categories[uuid] |
|
251 |
+ elif group.categories[uuid].lastChange>ret.deletedCategories[uuid].lastChange: |
|
252 |
+ ret.categories[uuid]=group.categories[uuid] |
|
253 |
+ del ret.deletedCategories[uuid] |
|
254 |
+ |
|
222 | 255 |
return ret |
223 | 256 |
|
224 | 257 |
|
... | ... |
@@ -230,15 +263,17 @@ class Contribution(object): |
230 | 263 |
self.title=None |
231 | 264 |
self.cost=None |
232 | 265 |
self.date=None |
266 |
+ self.category=None |
|
233 | 267 |
self.lastChange=None |
234 | 268 |
|
235 | 269 |
def load(self,data): |
236 |
- self.uuid=data['uuid'] |
|
237 |
- self.contributor=data['contributor'] |
|
238 |
- self.title=data['title'] |
|
239 |
- self.cost=data['cost'] |
|
240 |
- self.date=data['date'] |
|
241 |
- self.lastChange=data['lastChange'] |
|
270 |
+ self.uuid=data.get('uuid',None) |
|
271 |
+ self.contributor=data.get('contributor',None) |
|
272 |
+ self.title=data.get('title',None) |
|
273 |
+ self.cost=data.get('cost',None) |
|
274 |
+ self.date=data.get('date',None) |
|
275 |
+ self.category=data.get('category',None) |
|
276 |
+ self.lastChange=data.get('lastChange',None) |
|
242 | 277 |
|
243 | 278 |
def export(self): |
244 | 279 |
return { |
... | ... |
@@ -247,6 +282,7 @@ class Contribution(object): |
247 | 282 |
'cost': self.cost, |
248 | 283 |
'title': self.title, |
249 | 284 |
'date': self.date, |
285 |
+ 'category': self.category, |
|
250 | 286 |
'lastChange': self.lastChange |
251 | 287 |
} |
252 | 288 |
|
... | ... |
@@ -264,10 +300,9 @@ class Contributor(object): |
264 | 300 |
self.deletionTime=None |
265 | 301 |
|
266 | 302 |
def load(self,data): |
267 |
- self.name=data['name'] |
|
268 |
- self.email=data['email'] |
|
269 |
- if 'deletionTime' in data: |
|
270 |
- self.deletionTime=data['deletionTime'] |
|
303 |
+ self.name=data.get('name',None) |
|
304 |
+ self.email=data.get('email',None) |
|
305 |
+ self.deletionTime=data.get('deletionTime',None) |
|
271 | 306 |
|
272 | 307 |
def export(self): |
273 | 308 |
ret={ |
... | ... |
@@ -278,6 +313,32 @@ class Contributor(object): |
278 | 313 |
ret['deletionTime']=self.deletionTime |
279 | 314 |
return ret |
280 | 315 |
|
316 |
+class Category(object): |
|
317 |
+ |
|
318 |
+ def __init__(self): |
|
319 |
+ self.name=None |
|
320 |
+ self.color=None |
|
321 |
+ self.lastChange=None |
|
322 |
+ |
|
323 |
+ def load(self,data): |
|
324 |
+ self.name=data.get('name',None) |
|
325 |
+ self.color=data.get('color',None) |
|
326 |
+ self.lastChange=data.get('lastChange',None) |
|
327 |
+ |
|
328 |
+ def export(self): |
|
329 |
+ ret={ |
|
330 |
+ 'name': self.name, |
|
331 |
+ 'color': self.color, |
|
332 |
+ 'lastChange': self.lastChange |
|
333 |
+ } |
|
334 |
+ return ret |
|
335 |
+ |
|
336 |
+ def sync(self, c): |
|
337 |
+ if c.lastChange>self.lastChange: |
|
338 |
+ return c |
|
339 |
+ else: |
|
340 |
+ return self |
|
341 |
+ |
|
281 | 342 |
if __name__ == '__main__': |
282 | 343 |
import testdata |
283 | 344 |
import json |
284 | 345 |