How to use _decoded_input method in autotest

Best Python code snippet using autotest_python

resource_lib.py

Source:resource_lib.py Github

copy

Full Screen

...147 content['query_parameters'] = query_parameters148 encoded_content = json.dumps(content)149 return http.HttpResponse(encoded_content,150 content_type=_JSON_CONTENT_TYPE)151 def _decoded_input(self):152 content_type = self._request.META.get('CONTENT_TYPE',153 _JSON_CONTENT_TYPE)154 raw_data = self._request.raw_post_data155 if content_type == _JSON_CONTENT_TYPE:156 try:157 raw_dict = json.loads(raw_data)158 except ValueError, exc:159 raise exceptions.BadRequest('Error decoding request body: '160 '%s\n%r' % (exc, raw_data))161 if not isinstance(raw_dict, dict):162 raise exceptions.BadRequest('Expected dict input, got %s: %r' %163 (type(raw_dict), raw_dict))164 elif content_type == 'application/x-www-form-urlencoded':165 cgi_dict = cgi.parse_qs(raw_data) # django won't do this for PUT166 raw_dict = {}167 for key, values in cgi_dict.items():168 value = values[-1] # take last value if multiple were given169 try:170 # attempt to parse numbers, booleans and nulls171 raw_dict[key] = json.loads(value)172 except ValueError:173 # otherwise, leave it as a string174 raw_dict[key] = value175 else:176 raise exceptions.RequestError(415, 'Unsupported media type: %s'177 % content_type)178 return _InputDict(raw_dict)179 def _format_datetime(self, date_time):180 """Return ISO 8601 string for the given datetime"""181 if date_time is None:182 return None183 timezone_hrs = time.timezone / 60 / 60 # convert seconds to hours184 if timezone_hrs >= 0:185 timezone_join = '+'186 else:187 timezone_join = '' # minus sign comes from number itself188 timezone_spec = '%s%s:00' % (timezone_join, timezone_hrs)189 return date_time.strftime('%Y-%m-%dT%H:%M:%S') + timezone_spec190 @classmethod191 def _check_for_required_fields(cls, input_dict, fields):192 assert isinstance(fields, (list, tuple)), fields193 missing_fields = ', '.join(field for field in fields194 if field not in input_dict)195 if missing_fields:196 raise exceptions.BadRequest('Missing input: ' + missing_fields)197class Entry(Resource):198 @classmethod199 def add_query_selectors(cls, query_processor):200 """Sbuclasses may override this to support querying."""201 pass202 def short_representation(self):203 return self.link()204 def full_representation(self):205 return self.short_representation()206 def get(self):207 return self._basic_response(self.full_representation())208 def put(self):209 try:210 self.update(self._decoded_input())211 except model_logic.ValidationError, exc:212 raise exceptions.BadRequest('Invalid input: %s' % exc)213 return self._basic_response(self.full_representation())214 def _delete_entry(self):215 raise NotImplementedError216 def delete(self):217 self._delete_entry()218 return http.HttpResponse(status=204) # No content219 def create_instance(self, input_dict, containing_collection):220 raise NotImplementedError221 def update(self, input_dict):222 raise NotImplementedError223class InstanceEntry(Entry):224 class NullEntry(object):225 def link(self):226 return None227 def short_representation(self):228 return None229 _null_entry = NullEntry()230 _permitted_methods = ('GET', 'PUT', 'DELETE')231 model = None # subclasses must override this with a Django model class232 def __init__(self, request, instance):233 assert self.model is not None234 super(InstanceEntry, self).__init__(request)235 self.instance = instance236 self._is_prepared_for_full_representation = False237 @classmethod238 def from_optional_instance(cls, request, instance):239 if instance is None:240 return cls._null_entry241 return cls(request, instance)242 def _delete_entry(self):243 self.instance.delete()244 def full_representation(self):245 self.prepare_for_full_representation([self])246 return super(InstanceEntry, self).full_representation()247 @classmethod248 def prepare_for_full_representation(cls, entries):249 """250 Prepare the given list of entries to generate full representations.251 This method delegates to _do_prepare_for_full_representation(), which252 subclasses may override as necessary to do the actual processing. This253 method also marks the instance as prepared, so it's safe to call this254 multiple times with the same instance(s) without wasting work.255 """256 not_prepared = [entry for entry in entries257 if not entry._is_prepared_for_full_representation]258 cls._do_prepare_for_full_representation([entry.instance259 for entry in not_prepared])260 for entry in not_prepared:261 entry._is_prepared_for_full_representation = True262 @classmethod263 def _do_prepare_for_full_representation(cls, instances):264 """265 Subclasses may override this to gather data as needed for full266 representations of the given model instances. Typically, this involves267 querying over related objects, and this method offers a chance to query268 for many instances at once, which can provide a great performance269 benefit.270 """271 pass272class Collection(Resource):273 _DEFAULT_ITEMS_PER_PAGE = 50274 _permitted_methods=('GET', 'POST')275 # subclasses must override these276 queryset = None # or override _fresh_queryset() directly277 entry_class = None278 def __init__(self, request):279 super(Collection, self).__init__(request)280 assert self.entry_class is not None281 if isinstance(self.entry_class, basestring):282 type(self).entry_class = _resolve_class_path(self.entry_class)283 self._query_processor = query_lib.QueryProcessor()284 self.entry_class.add_query_selectors(self._query_processor)285 def _query_parameters_accepted(self):286 params = [('start_index', 'Index of first member to include'),287 ('items_per_page', 'Number of members to include'),288 ('full_representations',289 'True to include full representations of members')]290 for selector in self._query_processor.selectors():291 params.append((selector.name, selector.doc))292 return params293 def _fresh_queryset(self):294 assert self.queryset is not None295 # always copy the queryset before using it to avoid caching296 return self.queryset.all()297 def _entry_from_instance(self, instance):298 return self.entry_class(self._request, instance)299 def _representation(self, entry_instances):300 entries = [self._entry_from_instance(instance)301 for instance in entry_instances]302 want_full_representation = self._read_bool_parameter(303 'full_representations')304 if want_full_representation:305 self.entry_class.prepare_for_full_representation(entries)306 members = []307 for entry in entries:308 if want_full_representation:309 rep = entry.full_representation()310 else:311 rep = entry.short_representation()312 members.append(rep)313 rep = self.link()314 rep.update({'members': members})315 return rep316 def _read_bool_parameter(self, name):317 if name not in self._query_params:318 return False319 return (self._query_params[name].lower() == 'true')320 def _read_int_parameter(self, name, default):321 if name not in self._query_params:322 return default323 input_value = self._query_params[name]324 try:325 return int(input_value)326 except ValueError:327 raise exceptions.BadRequest('Invalid non-numeric value for %s: %r'328 % (name, input_value))329 def _apply_form_query(self, queryset):330 """Apply any query selectors passed as form variables."""331 for parameter, values in self._query_params.lists():332 if ':' in parameter:333 parameter, comparison_type = parameter.split(':', 1)334 else:335 comparison_type = None336 if not self._query_processor.has_selector(parameter):337 continue338 for value in values: # forms keys can have multiple values339 queryset = self._query_processor.apply_selector(340 queryset, parameter, value,341 comparison_type=comparison_type)342 return queryset343 def _filtered_queryset(self):344 return self._apply_form_query(self._fresh_queryset())345 def get(self):346 queryset = self._filtered_queryset()347 items_per_page = self._read_int_parameter('items_per_page',348 self._DEFAULT_ITEMS_PER_PAGE)349 start_index = self._read_int_parameter('start_index', 0)350 page = queryset[start_index:(start_index + items_per_page)]351 rep = self._representation(page)352 rep.update({'total_results': len(queryset),353 'start_index': start_index,354 'items_per_page': items_per_page})355 return self._basic_response(rep)356 def full_representation(self):357 # careful, this rep can be huge for large collections358 return self._representation(self._fresh_queryset())359 def post(self):360 input_dict = self._decoded_input()361 try:362 instance = self.entry_class.create_instance(input_dict, self)363 entry = self._entry_from_instance(instance)364 entry.update(input_dict)365 except model_logic.ValidationError, exc:366 raise exceptions.BadRequest('Invalid input: %s' % exc)367 # RFC 2616 specifies that we provide the new URI in both the Location368 # header and the body369 response = http.HttpResponse(status=201, # Created370 content=entry.href())371 response['Location'] = entry.href()372 return response373class Relationship(Entry):374 _permitted_methods = ('GET', 'DELETE')...

Full Screen

Full Screen

models.py

Source:models.py Github

copy

Full Screen

...119 'gasUsed' : self.gasUsed,120 'confirmations' : self.confirmations,121 'etherscan' : "https://etherscan.io/tx/"+str(self.hash)122 }123 def set_decoded_input(self, _decoded_input):124 self.decoded_input = _decoded_input if _decoded_input else None125 def ts(self):...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run autotest automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful