11#!/usr/bin/env python
22# -*- encoding: utf-8 -*-
33
4+ try :
5+ import simplejson as json
6+ except ImportError :
7+ import json
8+
49
510class Model (object ):
611
7- dates = ()
8- maps = {}
9- collection_maps = {}
12+ _dates = ()
13+ _maps = {}
14+ _collection_maps = {}
1015
1116 def __init__ (self , attrs ):
1217 """ """
13- self .attrs = attrs
18+ self ._attrs = attrs
19+ self .__set_attrs ()
20+
21+ def __set_attrs (self ):
22+ for attr in self ._attrs :
23+ setattr (self , attr , self ._attrs [attr ])
1424
15- def __getattr__ (self , name ):
16- try :
17- return self .attrs [name ]
18- except KeyError :
19- raise AttributeError
25+ @classmethod
26+ def loads (self , json_content ):
27+ resource_chunk = json .loads (json_content )
28+ if not hasattr (resource_chunk , 'items' ):
29+ return [self .__load (raw_resource )
30+ for raw_resource in resource_chunk ]
31+ else :
32+ return self .__load (resource_chunk )
2033
2134 @classmethod
22- def loads (self , raw_resource ):
35+ def __load (self , raw_resource ):
2336 def parse_date (string_date ):
2437 from datetime import datetime
2538 try :
@@ -30,29 +43,36 @@ def parse_date(string_date):
3043
3144 def parse_map (model , raw_resource ):
3245 if hasattr (raw_resource , 'items' ):
33- return model .loads (raw_resource )
46+ return model .__load (raw_resource )
3447
3548 def parse_collection_map (model , raw_resources ):
3649 # Dict of resources (Ex: Gist file)
3750 if hasattr (raw_resources , 'items' ):
3851 dict_map = {}
3952 for key , raw_resource in raw_resources .items ():
40- dict_map [key ] = model .loads (raw_resource )
53+ dict_map [key ] = model .__load (raw_resource )
4154 return dict_map
4255 # list of resources
4356 elif hasattr (raw_resources , '__iter__' ):
44- return [model .loads (raw_resource )
57+ return [model .__load (raw_resource )
4558 for raw_resource in raw_resources ]
4659 raw_resource .update (
4760 {attr : parse_date (raw_resource [attr ])
48- for attr in self .dates if attr in raw_resource })
61+ for attr in self ._dates if attr in raw_resource })
4962 raw_resource .update (
5063 {attr : parse_map (model , raw_resource [attr ])
51- for attr , model in self .maps .items ()
64+ for attr , model in self ._maps .items ()
5265 if attr in raw_resource })
5366 raw_resource .update (
5467 {attr : parse_collection_map (model , raw_resource [attr ])
55- for attr , model in self .collection_maps .items ()
68+ for attr , model in self ._collection_maps .items ()
5669 if attr in raw_resource })
5770
5871 return self (raw_resource )
72+
73+
74+ class Raw (Model ):
75+
76+ @classmethod
77+ def loads (self , json_content ):
78+ return json .loads (json_content )
0 commit comments