|
| 1 | +from __future__ import absolute_import |
1 | 2 | from .base import JsonObjectBase, _LimitedDictInterfaceMixin
|
2 |
| -from .convert import STRING_CONVERSIONS |
3 | 3 |
|
| 4 | +import decimal |
| 5 | +import datetime |
4 | 6 |
|
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+)$') |
6 | 20 |
|
7 |
| - _string_conversions = STRING_CONVERSIONS |
8 | 21 |
|
| 22 | +class JsonObject(JsonObjectBase, _LimitedDictInterfaceMixin): |
9 | 23 | def __getstate__(self):
|
10 | 24 | return self.to_json()
|
11 | 25 |
|
12 | 26 | def __setstate__(self, dct):
|
13 | 27 | 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