0001-environment-parse-float-value-as-json-integers-in-va.patch
hobo/environment/models.py | ||
---|---|---|
1 |
import re |
|
1 | 2 |
import datetime |
2 | 3 |
import json |
3 | 4 |
import random |
... | ... | |
22 | 23 | |
23 | 24 |
SECRET_CHARS = 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)' |
24 | 25 | |
26 |
FLOAT_RE = re.compile(r'^\s*[0-9]+\.[0-9]+\s*') |
|
27 | ||
28 | ||
25 | 29 |
class Variable(models.Model): |
26 | 30 |
name = models.CharField(max_length=100, verbose_name=_('name')) |
27 | 31 |
label = models.CharField(max_length=100, blank=True, verbose_name=_('label')) |
... | ... | |
39 | 43 |
return self.label |
40 | 44 |
return self.name |
41 | 45 | |
42 |
@property |
|
43 |
def json(self): |
|
44 |
if self.value and (self.value[0] in '{[' or self.value in ('true', 'false')): |
|
46 |
def _parse_value_as_json(self): |
|
47 |
if self.value and ( |
|
48 |
self.value[0] in '{[' |
|
49 |
or self.value in ('true', 'false') |
|
50 |
or FLOAT_RE.match(self.value)): |
|
45 | 51 |
try: |
46 | 52 |
return json.loads(self.value) |
47 | 53 |
except ValueError: |
48 |
pass
|
|
54 |
raise ValidationError('invalid JSON document')
|
|
49 | 55 |
return self.value |
50 | 56 | |
57 |
@property |
|
58 |
def json(self): |
|
59 |
try: |
|
60 |
return self._parse_value_as_json() |
|
61 |
except ValidationError: |
|
62 |
return self.value |
|
63 | ||
51 | 64 |
def clean(self): |
52 |
if self.value and (self.value[0] in '{[' or self.value in ('true', 'false')): |
|
53 |
try: |
|
54 |
json.loads(self.value) |
|
55 |
except ValueError: |
|
56 |
raise ValidationError('invalid JSON document') |
|
65 |
self._parse_value_as_json() |
|
57 | 66 | |
58 | 67 | |
59 | 68 |
class ServiceBase(models.Model): |
60 |
- |