Skip to content

Commit d544ac2

Browse files
committed
Moving Resource to it's own module.
1 parent edcfaad commit d544ac2

File tree

2 files changed

+86
-83
lines changed

2 files changed

+86
-83
lines changed

intercom/traits/api_resource.py

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import datetime
2+
import time
3+
4+
from intercom.lib.flat_store import FlatStore
5+
from intercom.lib.typed_json_deserializer import JsonDeserializer
6+
7+
8+
def type_field(attribute):
9+
return attribute == "type"
10+
11+
12+
def timestamp_field(attribute):
13+
return attribute.endswith('_at')
14+
15+
16+
def custom_attribute_field(attribute):
17+
return attribute == 'custom_attributes'
18+
19+
20+
def typed_value(value):
21+
return hasattr(value, 'keys') and 'type' in value
22+
23+
24+
def datetime_value(value):
25+
return hasattr(value, "timetuple")
26+
27+
28+
def to_datetime_value(value):
29+
if value:
30+
return datetime.datetime.fromtimestamp(int(value))
31+
32+
33+
class Resource(object):
34+
35+
def __init__(self, **params):
36+
self.from_dict(params)
37+
38+
if hasattr(self, 'flat_store_attributes'):
39+
for attr in self.flat_store_attributes:
40+
if not hasattr(self, attr):
41+
setattr(self, attr, FlatStore())
42+
43+
def _flat_store_attribute(self, attribute):
44+
if hasattr(self, 'flat_store_attributes'):
45+
return attribute in self.flat_store_attributes
46+
return False
47+
48+
49+
@classmethod
50+
def from_api(cls, response):
51+
obj = cls()
52+
obj.from_response(response)
53+
return obj
54+
55+
def from_response(self, response):
56+
self.from_dict(response)
57+
58+
def from_dict(self, dict):
59+
for attribute, value in dict.items():
60+
if type_field(attribute):
61+
continue
62+
setattr(self, attribute, value)
63+
64+
@property
65+
def attributes(self):
66+
return self.__dict__
67+
68+
def __getattribute__(self, attribute):
69+
value = super(Resource, self).__getattribute__(attribute)
70+
if timestamp_field(attribute):
71+
return to_datetime_value(value)
72+
else:
73+
return value
74+
75+
def __setattr__(self, attribute, value):
76+
if typed_value(value) and not custom_attribute_field(attribute):
77+
value_to_set = JsonDeserializer(value).deserialize()
78+
elif self._flat_store_attribute(attribute):
79+
value_to_set = FlatStore(value)
80+
elif timestamp_field(attribute) and datetime_value(value):
81+
value_to_set = time.mktime(value.timetuple())
82+
else:
83+
value_to_set = value
84+
super(Resource, self).__setattr__(attribute, value_to_set)
85+

intercom/user.py

Lines changed: 1 addition & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -5,98 +5,16 @@
55
# License: http://jkeyes.mit-license.org/
66
#
77

8-
import datetime
9-
import time
108
from intercom.api_operations.all import All
119
from intercom.api_operations.count import Count
1210
from intercom.api_operations.delete import Delete
1311
from intercom.api_operations.find import Find
1412
from intercom.api_operations.find_all import FindAll
1513
from intercom.api_operations.save import Save
16-
from intercom.lib.flat_store import FlatStore
17-
from intercom.lib.typed_json_deserializer import JsonDeserializer
14+
from intercom.traits.api_resource import Resource
1815
from intercom.traits.incrementable_attributes import IncrementableAttributes
1916

2017

21-
def timestamp_field(attribute):
22-
return attribute.endswith('_at')
23-
24-
25-
def type_field(attribute):
26-
return attribute == "type"
27-
28-
29-
def custom_attribute_field(attribute):
30-
return attribute == 'custom_attributes'
31-
32-
33-
def typed_value(value):
34-
return hasattr(value, 'keys') and 'type' in value
35-
36-
37-
def datetime_value(value):
38-
return hasattr(value, "timetuple")
39-
40-
41-
def to_datetime_value(value):
42-
if value:
43-
return datetime.datetime.fromtimestamp(int(value))
44-
45-
46-
class Resource(object):
47-
48-
def __init__(self, **params):
49-
self.from_dict(params)
50-
51-
if hasattr(self, 'flat_store_attributes'):
52-
for attr in self.flat_store_attributes:
53-
if not hasattr(self, attr):
54-
setattr(self, attr, FlatStore())
55-
56-
def _flat_store_attribute(self, attribute):
57-
if hasattr(self, 'flat_store_attributes'):
58-
return attribute in self.flat_store_attributes
59-
return False
60-
61-
62-
@classmethod
63-
def from_api(cls, response):
64-
obj = cls()
65-
obj.from_response(response)
66-
return obj
67-
68-
def from_response(self, response):
69-
self.from_dict(response)
70-
71-
def from_dict(self, dict):
72-
for attribute, value in dict.items():
73-
if type_field(attribute):
74-
continue
75-
setattr(self, attribute, value)
76-
77-
@property
78-
def attributes(self):
79-
return self.__dict__
80-
81-
def __getattribute__(self, attribute):
82-
value = super(Resource, self).__getattribute__(attribute)
83-
if timestamp_field(attribute):
84-
return to_datetime_value(value)
85-
else:
86-
return value
87-
88-
def __setattr__(self, attribute, value):
89-
if typed_value(value) and not custom_attribute_field(attribute):
90-
value_to_set = JsonDeserializer(value).deserialize()
91-
elif self._flat_store_attribute(attribute):
92-
value_to_set = FlatStore(value)
93-
elif timestamp_field(attribute) and datetime_value(value):
94-
value_to_set = time.mktime(value.timetuple())
95-
else:
96-
value_to_set = value
97-
super(Resource, self).__setattr__(attribute, value_to_set)
98-
99-
10018
CLASS_REGISTRY = {}
10119

10220
def create_class_instance(class_name):

0 commit comments

Comments
 (0)