Esempio n. 1
0
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
Esempio n. 3
0
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.')