Exemplo n.º 1
0
def add_images_to_depicts_lookup(hits):
    qid_to_item = {hit['qid']: hit for hit in hits}
    all_qids = [hit['qid'] for hit in hits]
    entities = mediawiki.get_entities_with_cache(all_qids)

    for entity in entities:
        qid = entity['id']
        item = qid_to_item[qid]
        item.entity = entity
    database.session.commit()

    for hit in hits:
        item = qid_to_item[hit['qid']]
        if item.entity:
            image_filename = wikibase.first_datavalue(item.entity, 'P18')
            hit['image_filename'] = image_filename

    filenames = [
        hit['image_filename'] for hit in hits if hit.get('image_filename')
    ]
    filenames = filenames[:50]
    thumbwidth = 200
    detail = commons.image_detail(filenames, thumbwidth=thumbwidth)

    for hit in hits:
        filename = hit.get('image_filename')
        if not filename or filename not in detail:
            continue
        hit['image'] = detail[filename]
Exemplo n.º 2
0
def find_more_json():
    pid = request.args.get('pid')
    qid_list = request.args.getlist('qid')
    limit = 6

    filenames = []
    cache_name = f'{pid}={",".join(qid_list)}_{limit}'
    bindings = wdqs.run_from_template_with_cache(
        'query/find_more_basic.sparql',
        cache_name=cache_name,
        qid_list=qid_list,
        pid=pid,
        limit=limit)

    items = []
    for row in bindings:
        item_id = wdqs.row_id(row)
        row_qid = f'Q{item_id}'
        image_filename = wdqs.commons_uri_to_filename(row['image']['value'])
        filenames.append(image_filename)
        items.append({
            'qid': row_qid,
            'item_id': item_id,
            'href': url_for('item_page', item_id=item_id),
            'filename': image_filename
        })

    thumbheight = 120
    detail = commons.image_detail(filenames, thumbheight=thumbheight)

    for item in items:
        item['image'] = detail[item['filename']]

    return jsonify(items=items)
Exemplo n.º 3
0
def get_image_detail_with_cache(items,
                                cache_name,
                                thumbwidth=None,
                                refresh=False):
    filenames = [cur.image_filename() for cur in items]

    if thumbwidth is None:
        thumbwidth = app.config['THUMBWIDTH']

    filename = f'cache/{cache_name}_images.json'
    cache_exists = os.path.exists(filename)
    detail = None
    if not refresh and cache_exists:
        try:
            detail = json.load(open(filename))
        except json.decoder.JSONDecodeError:
            pass
    if not detail:
        try:
            detail = commons.image_detail(filenames, thumbwidth=thumbwidth)
            json.dump(detail, open(filename, 'w'), indent=2)
        except requests.exceptions.ReadTimeout:
            detail = json.load(open(filename)) if cache_exists else {}

    return detail
Exemplo n.º 4
0
def image_with_cache(qid, image_filename, width):
    filename = f'cache/{qid}_{width}_image.json'
    if os.path.exists(filename):
        detail = json.load(open(filename))
    else:
        detail = commons.image_detail([image_filename], thumbwidth=width)
        json.dump(detail, open(filename, 'w'), indent=2)

    return detail[image_filename]
Exemplo n.º 5
0
def image_with_cache(qid, image_filename, width):
    filename = f'cache/{qid}_{width}_image.json'
    detail = json.load(open(filename)) if os.path.exists(filename) else {}

    image_filename = image_filename.replace('_', ' ')

    # The image associated with an item can change.
    # If that happens the detail in the cache will be for the wrong file.
    if not detail or image_filename not in detail:
        detail = commons.image_detail([image_filename], thumbwidth=width)
        json.dump(detail, open(filename, 'w'), indent=2)

    return detail.get(image_filename)
Exemplo n.º 6
0
def get_image_detail_with_cache(items,
                                cache_name,
                                thumbwidth=None,
                                refresh=False):
    filenames = [cur['image_filename'] for cur in items]

    if thumbwidth is None:
        thumbwidth = app.config['THUMBWIDTH']

    filename = f'cache/{cache_name}_images.json'
    if not refresh and os.path.exists(filename):
        detail = json.load(open(filename))
    else:
        detail = commons.image_detail(filenames, thumbwidth=thumbwidth)
        json.dump(detail, open(filename, 'w'), indent=2)

    return detail