forked from edward/owl-map
Various improvements
This commit is contained in:
parent
697fdf1d6d
commit
d0ddd5204c
|
@ -7,6 +7,8 @@ from sqlalchemy.dialects import postgresql
|
||||||
from sqlalchemy.sql.expression import cast
|
from sqlalchemy.sql.expression import cast
|
||||||
from sqlalchemy.ext.hybrid import hybrid_property
|
from sqlalchemy.ext.hybrid import hybrid_property
|
||||||
from sqlalchemy.ext.declarative import declared_attr
|
from sqlalchemy.ext.declarative import declared_attr
|
||||||
|
from sqlalchemy.ext.associationproxy import association_proxy
|
||||||
|
from sqlalchemy.orm.collections import attribute_mapped_collection
|
||||||
from geoalchemy2 import Geometry
|
from geoalchemy2 import Geometry
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from flask_login import UserMixin
|
from flask_login import UserMixin
|
||||||
|
@ -36,6 +38,14 @@ class Item(Base):
|
||||||
locations = relationship("ItemLocation", cascade="all, delete-orphan", backref="item")
|
locations = relationship("ItemLocation", cascade="all, delete-orphan", backref="item")
|
||||||
qid = column_property("Q" + cast(item_id, String))
|
qid = column_property("Q" + cast(item_id, String))
|
||||||
|
|
||||||
|
wiki_extracts = relationship(
|
||||||
|
"Extract",
|
||||||
|
collection_class=attribute_mapped_collection("site"),
|
||||||
|
cascade="save-update, merge, delete, delete-orphan",
|
||||||
|
backref="item",
|
||||||
|
)
|
||||||
|
extracts = association_proxy("wiki_extracts", "extract")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_by_qid(cls, qid):
|
def get_by_qid(cls, qid):
|
||||||
if qid and len(qid) > 1 and qid[0].upper() == "Q" and qid[1:].isdigit():
|
if qid and len(qid) > 1 and qid[0].upper() == "Q" and qid[1:].isdigit():
|
||||||
|
@ -202,12 +212,17 @@ class Item(Base):
|
||||||
+ self.wd_url + "\n\n" + "Value:\n\n" + json.dumps(v, indent=2))
|
+ self.wd_url + "\n\n" + "Value:\n\n" + json.dumps(v, indent=2))
|
||||||
mail.send_mail(f"OWL Map: bad time value in {self.qid}", body)
|
mail.send_mail(f"OWL Map: bad time value in {self.qid}", body)
|
||||||
|
|
||||||
def closed(self):
|
def time_claim(self, pid):
|
||||||
ret = []
|
ret = []
|
||||||
for v in self.get_claim("P3999"):
|
for v in self.get_claim(pid):
|
||||||
if not v:
|
if not v:
|
||||||
continue
|
continue
|
||||||
t = utils.format_wikibase_time(v)
|
try:
|
||||||
|
t = utils.format_wikibase_time(v)
|
||||||
|
except Exception:
|
||||||
|
self.alert_admin_about_bad_time(v)
|
||||||
|
raise
|
||||||
|
|
||||||
if t:
|
if t:
|
||||||
ret.append(t)
|
ret.append(t)
|
||||||
else:
|
else:
|
||||||
|
@ -215,6 +230,47 @@ class Item(Base):
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
def closed(self):
|
||||||
|
return self.time_claim("P3999")
|
||||||
|
|
||||||
|
def first_paragraph_language(self, lang):
|
||||||
|
if lang not in self.sitelinks():
|
||||||
|
return
|
||||||
|
extract = self.extracts.get(lang)
|
||||||
|
if not extract:
|
||||||
|
return
|
||||||
|
|
||||||
|
empty_list = [
|
||||||
|
"<p><span></span></p>",
|
||||||
|
"<p><span></span>\n</p>",
|
||||||
|
"<p><span></span>\n\n</p>",
|
||||||
|
"<p>\n<span></span>\n</p>",
|
||||||
|
"<p>\n\n<span></span>\n</p>",
|
||||||
|
"<p>.\n</p>",
|
||||||
|
"<p><br></p>",
|
||||||
|
'<p class="mw-empty-elt">\n</p>',
|
||||||
|
'<p class="mw-empty-elt">\n\n</p>',
|
||||||
|
'<p class="mw-empty-elt">\n\n\n</p>',
|
||||||
|
]
|
||||||
|
|
||||||
|
text = extract.strip()
|
||||||
|
while True:
|
||||||
|
found_empty = False
|
||||||
|
for empty in empty_list:
|
||||||
|
if text.startswith(empty):
|
||||||
|
text = text[len(empty) :].strip()
|
||||||
|
found_empty = True
|
||||||
|
if not found_empty:
|
||||||
|
break
|
||||||
|
|
||||||
|
close_tag = "</p>"
|
||||||
|
first_end_p_tag = text.find(close_tag)
|
||||||
|
if first_end_p_tag == -1:
|
||||||
|
# FIXME: e-mail admin
|
||||||
|
return text
|
||||||
|
|
||||||
|
return text[: first_end_p_tag + len(close_tag)]
|
||||||
|
|
||||||
# class Claim(Base):
|
# class Claim(Base):
|
||||||
# __tablename__ = "claim"
|
# __tablename__ = "claim"
|
||||||
# item_id = Column(Integer, primary_key=True)
|
# item_id = Column(Integer, primary_key=True)
|
||||||
|
@ -451,3 +507,14 @@ class ItemExtraKeys(Base):
|
||||||
note = Column(String)
|
note = Column(String)
|
||||||
|
|
||||||
item = relationship('Item')
|
item = relationship('Item')
|
||||||
|
|
||||||
|
class Extract(Base):
|
||||||
|
__tablename__ = "extract"
|
||||||
|
|
||||||
|
item_id = Column(Integer, ForeignKey("item.item_id"), primary_key=True)
|
||||||
|
site = Column(String, primary_key=True)
|
||||||
|
extract = Column(String, nullable=False)
|
||||||
|
|
||||||
|
def __init__(self, site, extract):
|
||||||
|
self.site = site
|
||||||
|
self.extract = extract
|
||||||
|
|
Loading…
Reference in a new issue