equal
deleted
inserted
replaced
16 # return "echoing the param back: %s" % echo_param |
16 # return "echoing the param back: %s" % echo_param |
17 # |
17 # |
18 # dump jsonservice into urlpatterns: |
18 # dump jsonservice into urlpatterns: |
19 # (r'^service1/$', 'djangoapp.views.jsonservice'), |
19 # (r'^service1/$', 'djangoapp.views.jsonservice'), |
20 |
20 |
|
21 |
21 class JSONRPCService(JSONRPCServiceBase): |
22 class JSONRPCService(JSONRPCServiceBase): |
22 |
23 |
23 def __call__(self, request, extra=None): |
24 def __call__(self, request, extra=None): |
24 return self.process(request.raw_post_data) |
25 return self.process(request.raw_post_data) |
|
26 |
25 |
27 |
26 def jsonremote(service): |
28 def jsonremote(service): |
27 """Make JSONRPCService a decorator so that you can write : |
29 """Make JSONRPCService a decorator so that you can write : |
28 |
30 |
29 from jsonrpc import JSONRPCService |
31 from jsonrpc import JSONRPCService |
61 # RPC functions. dump "processor" into urlpatterns to make it |
63 # RPC functions. dump "processor" into urlpatterns to make it |
62 # part of the app: |
64 # part of the app: |
63 # (r'^formsservice/$', 'djangoapp.views.processor'), |
65 # (r'^formsservice/$', 'djangoapp.views.processor'), |
64 |
66 |
65 from django import forms |
67 from django import forms |
|
68 |
66 |
69 |
67 def builderrors(form): |
70 def builderrors(form): |
68 d = {} |
71 d = {} |
69 for error in form.errors.keys(): |
72 for error in form.errors.keys(): |
70 if error not in d: |
73 if error not in d: |
89 'ChoiceField': ['choices'], |
92 'ChoiceField': ['choices'], |
90 'FilePathField': ['path', 'match', 'recursive', 'choices'], |
93 'FilePathField': ['path', 'match', 'recursive', 'choices'], |
91 'IPAddressField': ['max_length', 'min_length'], |
94 'IPAddressField': ['max_length', 'min_length'], |
92 } |
95 } |
93 |
96 |
|
97 |
94 def describe_field_errors(field): |
98 def describe_field_errors(field): |
95 res = {} |
99 res = {} |
96 field_type = field.__class__.__name__ |
100 field_type = field.__class__.__name__ |
97 msgs = {} |
101 msgs = {} |
98 for n, m in field.error_messages.items(): |
102 for n, m in field.error_messages.items(): |
100 res['error_messages'] = msgs |
104 res['error_messages'] = msgs |
101 if field_type in ['ComboField', 'MultiValueField', 'SplitDateTimeField']: |
105 if field_type in ['ComboField', 'MultiValueField', 'SplitDateTimeField']: |
102 res['fields'] = map(describe_field, field.fields) |
106 res['fields'] = map(describe_field, field.fields) |
103 return res |
107 return res |
104 |
108 |
|
109 |
105 def describe_fields_errors(fields, field_names): |
110 def describe_fields_errors(fields, field_names): |
106 res = {} |
111 res = {} |
107 if not field_names: |
112 if not field_names: |
108 field_names = fields.keys() |
113 field_names = fields.keys() |
109 for name in field_names: |
114 for name in field_names: |
110 field = fields[name] |
115 field = fields[name] |
111 res[name] = describe_field_errors(field) |
116 res[name] = describe_field_errors(field) |
112 return res |
117 return res |
|
118 |
113 |
119 |
114 def describe_field(field): |
120 def describe_field(field): |
115 res = {} |
121 res = {} |
116 field_type = field.__class__.__name__ |
122 field_type = field.__class__.__name__ |
117 for fname in field_names.get(field_type, []) + \ |
123 for fname in field_names.get(field_type, []) + \ |
119 res[fname] = getattr(field, fname) |
125 res[fname] = getattr(field, fname) |
120 if field_type in ['ComboField', 'MultiValueField', 'SplitDateTimeField']: |
126 if field_type in ['ComboField', 'MultiValueField', 'SplitDateTimeField']: |
121 res['fields'] = map(describe_field, field.fields) |
127 res['fields'] = map(describe_field, field.fields) |
122 return res |
128 return res |
123 |
129 |
|
130 |
124 def describe_fields(fields, field_names): |
131 def describe_fields(fields, field_names): |
125 res = {} |
132 res = {} |
126 if not field_names: |
133 if not field_names: |
127 field_names = fields.keys() |
134 field_names = fields.keys() |
128 for name in field_names: |
135 for name in field_names: |
129 field = fields[name] |
136 field = fields[name] |
130 res[name] = describe_field(field) |
137 res[name] = describe_field(field) |
131 return res |
138 return res |
|
139 |
132 |
140 |
133 class FormProcessor(JSONRPCService): |
141 class FormProcessor(JSONRPCService): |
134 def __init__(self, forms, _formcls=None): |
142 def __init__(self, forms, _formcls=None): |
135 |
143 |
136 if _formcls is None: |
144 if _formcls is None: |
203 # (r'^service1/$', 'djangoapp.views.jsonservice'), |
211 # (r'^service1/$', 'djangoapp.views.jsonservice'), |
204 |
212 |
205 from django.core.serializers import serialize |
213 from django.core.serializers import serialize |
206 import datetime |
214 import datetime |
207 from datetime import date |
215 from datetime import date |
|
216 |
208 |
217 |
209 def dict_datetimeflatten(item): |
218 def dict_datetimeflatten(item): |
210 d = {} |
219 d = {} |
211 for k, v in item.items(): |
220 for k, v in item.items(): |
212 k = str(k) |
221 k = str(k) |
216 d[k] = dict_datetimeflatten(v) |
225 d[k] = dict_datetimeflatten(v) |
217 else: |
226 else: |
218 d[k] = v |
227 d[k] = v |
219 return d |
228 return d |
220 |
229 |
|
230 |
221 def json_convert(l, fields=None): |
231 def json_convert(l, fields=None): |
222 res = [] |
232 res = [] |
223 for item in serialize('python', l, fields=fields): |
233 for item in serialize('python', l, fields=fields): |
224 res.append(dict_datetimeflatten(item)) |
234 res.append(dict_datetimeflatten(item)) |
225 return res |
235 return res |