forked from tjfontaine/linode-python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfields.py
More file actions
78 lines (59 loc) · 1.78 KB
/
fields.py
File metadata and controls
78 lines (59 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
from datetime import datetime
class Field(object):
to_py = lambda self, value: value
to_linode = to_py
def __init__(self, field):
self.field = field
class IntField(Field):
def to_py(self, value):
if value is not None and value != '':
return int(value)
to_linode = to_py
class FloatField(Field):
def to_py(self, value):
if value is not None:
return float(value)
to_linode = to_py
class CharField(Field):
to_py = lambda self, value: str(value)
to_linode = to_py
class BoolField(Field):
def to_py(self, value):
if value in (1, '1'): return True
else: return False
def to_linode(self, value):
if value: return 1
else: return 0
class ChoiceField(Field):
to_py = lambda self, value: value
def __init__(self, field, choices=[]):
Field.__init__(self, field)
self.choices = choices
def to_linode(self, value):
if value in self.choices:
return value
else:
raise AttributeError
class ListField(Field):
def __init__(self, field, type=Field(''), delim=','):
Field.__init__(self, field)
self.__type=type
self.__delim=delim
def to_linode(self, value):
return self.__delim.join([str(self.__type.to_linode(v)) for v in value])
def to_py(self, value):
return [self.__type.to_py(v) for v in value.split(self.__delim) if v != '']
class DateTimeField(Field):
to_py = lambda self, value: datetime.strptime(value, '%Y-%m-%d %H:%M:%S.0')
to_linode = lambda self, value: value.strftime('%Y-%m-%d %H:%M:%S.0')
class ForeignField(Field):
def __init__(self, field):
self.field = field.primary_key
self.__model = field
def to_py(self, value):
return self.__model.get(id=value)
def to_linode(self, value):
if isinstance(value, int):
return value
else:
return value.id