Beispiel #1
0
 def configure(self):
     self.patches = ObjDict()
     self.mocks = ObjDict()
     self.id = 9999
     self.base_import_path = "application.tracker.remote"
     self.base_url = "https://petition.parliament.uk/petitions"
     self.base_archive_url = "https://petition.parliament.uk/archived/petitions"
     self.query_states = RemotePetition.query_states
    def context(self):
        self.patches = ObjDict()
        self.mocks = ObjDict()
        self.patch_petition_fake()
        self.patch_signatures_build()

        yield

        for p in self.patches.values():
            p.stop()
Beispiel #3
0
    def context(self):
        self.configure()
        self.patches = ObjDict()
        self.mocks = ObjDict()
        self.patch_standard_session()

        yield

        for p in self.patches.values():
            p.stop()
 def build(cls, signatures, region, country, constituency):
     logger.info(f"executing SignaturesByFactory build")
     config = cls.setup_build(region, country, constituency, signatures)
     return ObjDict({
         cls.get_key(geo): cls(geo, **conf).__dict__
         for geo, conf in config.items()
     })
 def signature_build_return(cls):
     return ObjDict(signatures_by_region=[{
         "a": "b"
     }],
                    signatures_by_country=[{
                        "c": "d"
                    }],
                    signatures_by_constituency=[{
                        "e": "f"
                    }])
Beispiel #6
0
    def update(self, previous, increment, signatures_by, archived, datetimes,
               meta, attributes):
        future = ObjDict(meta=meta or {}, petition=deepcopy(previous.petition))
        future.updates = {
            "increment": increment,
            "signatures_by": signatures_by,
            "attributes": attributes
        }
        future.petition.setattr("signature_count",
                                previous.petition.signature_count + increment)
        if previous.petition.signature_count > future.petition.signature_count:
            raise ValueError("previous signatures less than future signatures")

        future.petition.set_type(archived or previous.petition.archived)
        future.petition.make_links()
        future.petition.make_timeline(datetimes)
        future.petition.data.attributes.update(attributes)

        return future
Beispiel #7
0
    def save_records(self, session, entry, base=None, geo=None):
        base, geo = base or {}, geo or {}
        entry.records = ObjDict()
        params = {
            "petition_id": self.petition.id,
            "signatures": self.petition.signatures,
            "timestamp": self.petition.polled_at
        }

        if base.pop("save", False):
            entry.records.base = Record(**dict(**params, **base))
            session.add(entry.records.base)
            session.flush()
        if geo.pop("save", False):
            entry.records.geo = Record(**dict(**params, **base))
            session.add(entry.records.geo)
            session.flush()
            attributes = self.petition.latest_data["data"]["attributes"]
            signatures_by = entry.records.geo.build(attributes)
            session.bulk_save_objects(signatures_by)

        session.commit()
 def petitions(self, count=10):
     return [
         ObjDict(id=id, url=RemotePetition.url_addr(id))
         for id in range(count)
     ]
Beispiel #9
0
 def configure(self):
     self.patches = ObjDict()
     self.mocks = ObjDict()
     self.base_import_path = "application.tracker.models"
Beispiel #10
0
 def __init__(self, petition, meta=None):
     self.petition_id = petition.data.id
     self.current_index = 0
     self.timeline = []
     self.timeline.append(
         ObjDict(petition=deepcopy(petition), updates={}, meta=meta or {}))
Beispiel #11
0
 def make_links(self):
     self.links = ObjDict()
     base_url = "https://petition.parliament.uk"
     base_url += "/archived/petitions" if self.archived else "/petitions"
     self.links.self = f"{base_url}/{self.data.id}.json"
Beispiel #12
0
 def make_base(self, petition_id, archived=False):
     self.data = ObjDict(attributes=ObjDict())
     self.data.id = petition_id
     self.set_type(archived)
     self.make_links()