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 |