def get_real_owner(instance): """ In case of a cached owner, ensure the retriaval of the actual owner object. Performs extra query, use with caution. """ if isinstance(instance, User): return instance if isinstance(instance.__class__.owner, property): if not getattr(instance, '_real_owner', None) or True: instance._real_owner = getSubField(type(instance).objects.select_related(instance.selector_to_owner()).get(id=instance.id), instance.selector_to_owner().split('__')) return instance._real_owner return instance.owner
def get_real_owner(instance): """ In case of a cached owner, ensure the retriaval of the actual owner object. Performs extra query, use with caution. """ if isinstance(instance, User): return instance if isinstance(instance.__class__.owner, property): if not getattr(instance, '_real_owner', None) or True: instance._real_owner = getSubField(type(instance).objects.select_related(instance.selector_to_owner()).get(pk=instance.pk), instance.selector_to_owner().split('__')) return instance._real_owner return instance.owner
def api_pages( url, name, details, local=False, results_location=None, log_function=print, request_options={}, verbose=False, download_images=False, force_reload_images=False, ): log_function('Downloading list of {}...'.format(name)) details.get('callback_before', lambda: None)() url = addParametersToURL( u'{}{}'.format( details.get('url', url), details.get('endpoint', name), ), details.get('url_parameters', {}), ) if verbose: log_function(url) total = 0 page_number = 0 request_options = request_options.copy() request_options.update(details.get('request_options', {})) while url: result = loadJsonAPIPage(url, local_file_name=name, request_options=request_options, page_number=page_number, log_function=log_function) if 'callback_before_page' in details: result = details['callback_before_page'](result) results = result if 'results_location' in details: results = getSubField(results, details['results_location'], default=[]) elif results_location is not None: results = getSubField(results, results_location, default=[]) for item in results: not_in_fields = {} if (details.get('callback_should_import', None) and not details['callback_should_import'](details, item)): continue if details.get('callback_per_item', False): unique_data, data = details['callback_per_item'](details, item) else: unique_data, data, not_in_fields = import_generic_item( details, item) save_item( details, unique_data, data, log_function, json_item=item, verbose=verbose, download_images=download_images, force_reload_images=force_reload_images, ) if not_in_fields and verbose: log_function('- Ignored:') log_function(not_in_fields) total += 1 page_number += 1 if local: url = None else: if 'next' in result: url = result['next'] else: url = None details.get('callback_end', lambda: None)() log_function('Total {}'.format(total)) log_function('Done.')