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.ext.hybrid import hybrid_property
 | 
			
		||||
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 collections import defaultdict
 | 
			
		||||
from flask_login import UserMixin
 | 
			
		||||
| 
						 | 
				
			
			@ -36,6 +38,14 @@ class Item(Base):
 | 
			
		|||
    locations = relationship("ItemLocation", cascade="all, delete-orphan", backref="item")
 | 
			
		||||
    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
 | 
			
		||||
    def get_by_qid(cls, qid):
 | 
			
		||||
        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))
 | 
			
		||||
        mail.send_mail(f"OWL Map: bad time value in {self.qid}", body)
 | 
			
		||||
 | 
			
		||||
    def closed(self):
 | 
			
		||||
    def time_claim(self, pid):
 | 
			
		||||
        ret = []
 | 
			
		||||
        for v in self.get_claim("P3999"):
 | 
			
		||||
        for v in self.get_claim(pid):
 | 
			
		||||
            if not v:
 | 
			
		||||
                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:
 | 
			
		||||
                ret.append(t)
 | 
			
		||||
            else:
 | 
			
		||||
| 
						 | 
				
			
			@ -215,6 +230,47 @@ class Item(Base):
 | 
			
		|||
 | 
			
		||||
        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):
 | 
			
		||||
#     __tablename__ = "claim"
 | 
			
		||||
#     item_id = Column(Integer, primary_key=True)
 | 
			
		||||
| 
						 | 
				
			
			@ -451,3 +507,14 @@ class ItemExtraKeys(Base):
 | 
			
		|||
    note = Column(String)
 | 
			
		||||
 | 
			
		||||
    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