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()
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" }])
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
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) ]
def configure(self): self.patches = ObjDict() self.mocks = ObjDict() self.base_import_path = "application.tracker.models"
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 {}))
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"
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()