114 except out_of_band.Error, error: |
115 except out_of_band.Error, error: |
115 return helper.responses.errorResponse(error, request) |
116 return helper.responses.errorResponse(error, request) |
116 return func(self, request, access_type, *args, **kwargs) |
117 return func(self, request, access_type, *args, **kwargs) |
117 |
118 |
118 return wrapper |
119 return wrapper |
|
120 |
|
121 |
|
122 def task(func): |
|
123 """Task decorator wrapper method |
|
124 """ |
|
125 |
|
126 @wraps(func) |
|
127 def wrapper(request, *args, **kwargs): |
|
128 """Decorator wrapper method |
|
129 """ |
|
130 |
|
131 try: |
|
132 return func(request, *args, **kwargs) |
|
133 except tasks.FatalTaskError, error: |
|
134 logging.exception(error) |
|
135 return tasks.terminateTask() |
|
136 except Exception, exception: |
|
137 logging.exception(exception) |
|
138 return tasks.repeatTask() |
|
139 |
|
140 return wrapper |
|
141 |
|
142 |
|
143 def iterative_task(func): |
|
144 """Iterative wrapper method |
|
145 """ |
|
146 |
|
147 @wraps(func) |
|
148 def wrapper(request, *args, **kwargs): |
|
149 """Decorator wrapper method |
|
150 |
|
151 Params usage: |
|
152 logic: name of the logic for the data model to iterate through |
|
153 filter: a dict for the properties that the entities should have |
|
154 order: a list with the sort order |
|
155 json: json object with additional parameters |
|
156 |
|
157 Returns: |
|
158 Standard http django response |
|
159 """ |
|
160 |
|
161 post_dict = request.POST |
|
162 |
|
163 if 'logic' not in post_dict: |
|
164 return tasks.terminateTask() |
|
165 |
|
166 _temp = __import__(post_dict['logic'], globals(), locals(), ['logic'], -1) |
|
167 logic = _temp.logic |
|
168 |
|
169 filter = None |
|
170 if 'filter' in post_dict: |
|
171 filter = simplejson.loads(post_dict['filter']) |
|
172 |
|
173 order = None |
|
174 if 'order' in post_dict: |
|
175 order = simplejson.loads(post_dict['order']) |
|
176 |
|
177 start_key = None |
|
178 if 'next_key' in post_dict: |
|
179 start_key = db.Key(post_dict['start_key']) |
|
180 |
|
181 json = None |
|
182 if 'json' in post_dict: |
|
183 json = post_dict['json'] |
|
184 |
|
185 entities, start_key = logic.getBatchOfData(filter, order, start_key) |
|
186 |
|
187 try: |
|
188 new_json = func(request, entities=entities, json=json, *args, **kwargs) |
|
189 except tasks.FatalTaskError, error: |
|
190 logging.error(error) |
|
191 return tasks.terminateTask() |
|
192 except Exception, exception: |
|
193 logging.error(exception) |
|
194 return tasks.repeatTask() |
|
195 |
|
196 if start_key is None: |
|
197 logging.debug('Task sucessfully completed') |
|
198 else: |
|
199 context = post_dict.copy() |
|
200 |
|
201 if 'json' in context: |
|
202 del context['json'] |
|
203 |
|
204 context.update({'start_key': start_key}) |
|
205 |
|
206 if new_json is not None: |
|
207 context.update({'json': new_json}) |
|
208 |
|
209 tasks.startTask(url=request.path, context=context) |
|
210 |
|
211 return tasks.terminateTask() |
|
212 |
|
213 return wrapper |