Skip to content

Commit c736667

Browse files
committed
Merge pull request #97 from dimagi/type-configs
Type configs
2 parents 1dce008 + 64d3a4d commit c736667

File tree

8 files changed

+324
-216
lines changed

8 files changed

+324
-216
lines changed

.travis.yml

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
language: python
22
python:
3-
- "2.6"
43
- "2.7"
54
install: "pip install . --use-mirrors"
65
script: "python setup.py test"

jsonobject/api.py

+40-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,50 @@
1+
from __future__ import absolute_import
12
from .base import JsonObjectBase, _LimitedDictInterfaceMixin
2-
from .convert import STRING_CONVERSIONS
33

4+
import decimal
5+
import datetime
46

5-
class JsonObject(JsonObjectBase, _LimitedDictInterfaceMixin):
7+
from . import properties
8+
import re
9+
10+
11+
re_date = re.compile(r'^(\d{4})\D?(0[1-9]|1[0-2])\D?([12]\d|0[1-9]|3[01])$')
12+
re_time = re.compile(
13+
r'^([01]\d|2[0-3])\D?([0-5]\d)\D?([0-5]\d)?\D?(\d{3,6})?$')
14+
re_datetime = re.compile(
15+
r'^(\d{4})\D?(0[1-9]|1[0-2])\D?([12]\d|0[1-9]|3[01])'
16+
r'(\D?([01]\d|2[0-3])\D?([0-5]\d)\D?([0-5]\d)?\D?(\d{3,6})?'
17+
r'([zZ]|([\+-])([01]\d|2[0-3])\D?([0-5]\d)?)?)?$'
18+
)
19+
re_decimal = re.compile('^(\d+)\.(\d+)$')
620

7-
_string_conversions = STRING_CONVERSIONS
821

22+
class JsonObject(JsonObjectBase, _LimitedDictInterfaceMixin):
923
def __getstate__(self):
1024
return self.to_json()
1125

1226
def __setstate__(self, dct):
1327
self.__init__(dct)
28+
29+
class Meta(object):
30+
properties = {
31+
decimal.Decimal: properties.DecimalProperty,
32+
datetime.datetime: properties.DateTimeProperty,
33+
datetime.date: properties.DateProperty,
34+
datetime.time: properties.TimeProperty,
35+
str: properties.StringProperty,
36+
unicode: properties.StringProperty,
37+
bool: properties.BooleanProperty,
38+
int: properties.IntegerProperty,
39+
long: properties.IntegerProperty,
40+
float: properties.FloatProperty,
41+
list: properties.ListProperty,
42+
dict: properties.DictProperty,
43+
set: properties.SetProperty,
44+
}
45+
string_conversions = (
46+
(re_date, datetime.date),
47+
(re_time, datetime.time),
48+
(re_datetime, datetime.datetime),
49+
(re_decimal, decimal.Decimal),
50+
)

0 commit comments

Comments
 (0)