Refactor. New wikibase module.
This commit is contained in:
parent
b697be2306
commit
85329eab0d
28
app.py
28
app.py
|
@ -3,7 +3,7 @@
|
||||||
from flask import Flask, render_template, url_for, redirect, request, g, jsonify, session
|
from flask import Flask, render_template, url_for, redirect, request, g, jsonify, session
|
||||||
from depicts import (utils, wdqs, commons, mediawiki, painting, saam, database,
|
from depicts import (utils, wdqs, commons, mediawiki, painting, saam, database,
|
||||||
dia, rijksmuseum, npg, museodelprado, barnesfoundation,
|
dia, rijksmuseum, npg, museodelprado, barnesfoundation,
|
||||||
wd_catalog, relaxed_ssl, human)
|
wd_catalog, relaxed_ssl, human, wikibase)
|
||||||
from depicts.pager import Pagination, init_pager
|
from depicts.pager import Pagination, init_pager
|
||||||
from depicts.model import (DepictsItem, DepictsItemAltLabel, Edit, PaintingItem,
|
from depicts.model import (DepictsItem, DepictsItemAltLabel, Edit, PaintingItem,
|
||||||
Language)
|
Language)
|
||||||
|
@ -134,7 +134,7 @@ def save(item_id):
|
||||||
painting_item = PaintingItem.query.get(item_id)
|
painting_item = PaintingItem.query.get(item_id)
|
||||||
if painting_item is None:
|
if painting_item is None:
|
||||||
painting_entity = mediawiki.get_entity_with_cache(f'Q{item_id}')
|
painting_entity = mediawiki.get_entity_with_cache(f'Q{item_id}')
|
||||||
label = mediawiki.get_entity_label(painting_entity)
|
label = wikibase.get_entity_label(painting_entity)
|
||||||
painting_item = PaintingItem(item_id=item_id, label=label, entity=painting_entity)
|
painting_item = PaintingItem(item_id=item_id, label=label, entity=painting_entity)
|
||||||
database.session.add(painting_item)
|
database.session.add(painting_item)
|
||||||
database.session.commit()
|
database.session.commit()
|
||||||
|
@ -367,10 +367,6 @@ def image_with_cache(qid, image_filename, width):
|
||||||
|
|
||||||
return detail[image_filename]
|
return detail[image_filename]
|
||||||
|
|
||||||
def first_datavalue(entity, pid):
|
|
||||||
if pid in entity['claims']:
|
|
||||||
return entity['claims'][pid][0]['mainsnak']['datavalue']['value']
|
|
||||||
|
|
||||||
def get_catalog_page(property_id, value):
|
def get_catalog_page(property_id, value):
|
||||||
detail = wd_catalog.lookup(property_id, value)
|
detail = wd_catalog.lookup(property_id, value)
|
||||||
url = detail['url']
|
url = detail['url']
|
||||||
|
@ -481,10 +477,10 @@ def item_page(item_id):
|
||||||
people = human.from_name(label) if label else None
|
people = human.from_name(label) if label else None
|
||||||
|
|
||||||
if 'P276' in entity['claims']:
|
if 'P276' in entity['claims']:
|
||||||
location = first_datavalue(entity, 'P276')['id']
|
location = wikibase.first_datavalue(entity, 'P276')['id']
|
||||||
institution = other[location]
|
institution = other[location]
|
||||||
elif 'P195' in entity['claims']:
|
elif 'P195' in entity['claims']:
|
||||||
collection = first_datavalue(entity, 'P195')['id']
|
collection = wikibase.first_datavalue(entity, 'P195')['id']
|
||||||
institution = other[collection]
|
institution = other[collection]
|
||||||
else:
|
else:
|
||||||
institution = '???'
|
institution = '???'
|
||||||
|
@ -497,19 +493,19 @@ def item_page(item_id):
|
||||||
catalog_ids = wd_catalog.find_catalog_id(entity)
|
catalog_ids = wd_catalog.find_catalog_id(entity)
|
||||||
catalog_detail = []
|
catalog_detail = []
|
||||||
for property_id in sorted(catalog_ids):
|
for property_id in sorted(catalog_ids):
|
||||||
value = first_datavalue(entity, property_id)
|
value = wikibase.first_datavalue(entity, property_id)
|
||||||
detail = wd_catalog.lookup(property_id, value)
|
detail = wd_catalog.lookup(property_id, value)
|
||||||
catalog_detail.append(detail)
|
catalog_detail.append(detail)
|
||||||
|
|
||||||
catalog_url = first_datavalue(entity, 'P973')
|
catalog_url = wikibase.first_datavalue(entity, 'P973')
|
||||||
|
|
||||||
catalog = None
|
catalog = None
|
||||||
try:
|
try:
|
||||||
if 'P4704' in entity['claims']:
|
if 'P4704' in entity['claims']:
|
||||||
saam_id = first_datavalue(entity, 'P4704')
|
saam_id = wikibase.first_datavalue(entity, 'P4704')
|
||||||
catalog = saam.get_catalog(saam_id)
|
catalog = saam.get_catalog(saam_id)
|
||||||
elif 'P4709' in entity['claims']:
|
elif 'P4709' in entity['claims']:
|
||||||
catalog_id = first_datavalue(entity, 'P4709')
|
catalog_id = wikibase.first_datavalue(entity, 'P4709')
|
||||||
catalog = barnesfoundation.get_catalog(catalog_id)
|
catalog = barnesfoundation.get_catalog(catalog_id)
|
||||||
elif catalog_url and 'www.dia.org' in catalog_url:
|
elif catalog_url and 'www.dia.org' in catalog_url:
|
||||||
catalog = dia.get_catalog(catalog_url)
|
catalog = dia.get_catalog(catalog_url)
|
||||||
|
@ -533,7 +529,7 @@ def item_page(item_id):
|
||||||
for property_id in sorted(catalog_ids):
|
for property_id in sorted(catalog_ids):
|
||||||
if property_id == 'P350':
|
if property_id == 'P350':
|
||||||
continue # RKDimages ID
|
continue # RKDimages ID
|
||||||
value = first_datavalue(entity, property_id)
|
value = wikibase.first_datavalue(entity, property_id)
|
||||||
detail = wd_catalog.lookup(property_id, value)
|
detail = wd_catalog.lookup(property_id, value)
|
||||||
try:
|
try:
|
||||||
html = get_catalog_page(property_id, value)
|
html = get_catalog_page(property_id, value)
|
||||||
|
@ -614,7 +610,7 @@ def get_labels(keys, name=None):
|
||||||
json.dump({'keys': keys, 'labels': labels},
|
json.dump({'keys': keys, 'labels': labels},
|
||||||
open(filename, 'w'), indent=2)
|
open(filename, 'w'), indent=2)
|
||||||
|
|
||||||
return {entity['id']: mediawiki.get_entity_label(entity) for entity in labels}
|
return {entity['id']: wikibase.get_entity_label(entity) for entity in labels}
|
||||||
|
|
||||||
def get_other(entity):
|
def get_other(entity):
|
||||||
other_items = set()
|
other_items = set()
|
||||||
|
@ -668,10 +664,10 @@ def next_page(item_id):
|
||||||
entity = mediawiki.get_entity_with_cache(qid)
|
entity = mediawiki.get_entity_with_cache(qid)
|
||||||
|
|
||||||
width = 800
|
width = 800
|
||||||
image_filename = first_datavalue(entity, 'P18')
|
image_filename = wikibase.first_datavalue(entity, 'P18')
|
||||||
image = image_with_cache(qid, image_filename, width)
|
image = image_with_cache(qid, image_filename, width)
|
||||||
|
|
||||||
label = mediawiki.get_entity_label(entity)
|
label = wikibase.get_entity_label(entity)
|
||||||
other = get_other(entity)
|
other = get_other(entity)
|
||||||
|
|
||||||
other_list = []
|
other_list = []
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from .model import HumanItem
|
from .model import HumanItem
|
||||||
from . import mediawiki, utils
|
from . import mediawiki, utils, wikibase
|
||||||
import re
|
import re
|
||||||
|
|
||||||
re_four_digits = re.compile(r'\b\d{4}\b')
|
re_four_digits = re.compile(r'\b\d{4}\b')
|
||||||
|
@ -47,7 +47,7 @@ def from_name(name):
|
||||||
'year_of_birth': item.year_of_birth,
|
'year_of_birth': item.year_of_birth,
|
||||||
'year_of_death': item.year_of_death,
|
'year_of_death': item.year_of_death,
|
||||||
}
|
}
|
||||||
label = mediawiki.get_entity_label(entity)
|
label = wikibase.get_entity_label(entity)
|
||||||
if label:
|
if label:
|
||||||
i['label'] = label
|
i['label'] = label
|
||||||
if 'en' in entity['descriptions']:
|
if 'en' in entity['descriptions']:
|
||||||
|
|
|
@ -145,11 +145,3 @@ def get_categories(titles, site):
|
||||||
continue
|
continue
|
||||||
title_and_cats.append((i['title'], cats))
|
title_and_cats.append((i['title'], cats))
|
||||||
return title_and_cats
|
return title_and_cats
|
||||||
|
|
||||||
def get_entity_label(entity):
|
|
||||||
if 'en' in entity['labels']:
|
|
||||||
return entity['labels']['en']['value']
|
|
||||||
|
|
||||||
label_values = {l['value'] for l in entity['labels'].values()}
|
|
||||||
if len(label_values) == 1:
|
|
||||||
return list(label_values)[0]
|
|
||||||
|
|
11
depicts/wikibase.py
Normal file
11
depicts/wikibase.py
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
def first_datavalue(entity, pid):
|
||||||
|
if pid in entity['claims']:
|
||||||
|
return entity['claims'][pid][0]['mainsnak']['datavalue']['value']
|
||||||
|
|
||||||
|
def get_entity_label(entity):
|
||||||
|
if 'en' in entity['labels']:
|
||||||
|
return entity['labels']['en']['value']
|
||||||
|
|
||||||
|
label_values = {l['value'] for l in entity['labels'].values()}
|
||||||
|
if len(label_values) == 1:
|
||||||
|
return list(label_values)[0]
|
Loading…
Reference in a new issue