def get_record(self, bibcode, load_only=None): if isinstance(bibcode, list): out = [] with self.session_scope() as session: q = session.query(Records).filter(Records.bibcode.in_(bibcode)) if load_only: q = q.options(_load_only(*load_only)) for r in q.all(): out.append(r.toJSON(load_only=load_only)) return out else: with self.session_scope() as session: q = session.query(Records).filter_by(bibcode=bibcode) if load_only: q = q.options(_load_only(*load_only)) r = q.first() if r is None: return None return r.toJSON(load_only=load_only)
def compute_orphaned(self, canonical_bibcodes): """return a list of orphaned bibcodes, compare database to passed canonical """ orphaned = set() # get all bibcodes from the storage (into memory) store = set() with self.session_scope() as session: for r in session.query(Records).filter(Records.origin=='classic').options(_load_only('bibcode')).yield_per(1000): store.add(r.bibcode) orphaned = store.difference(canonical_bibcodes) self.logger.info('Found %s orphaned bibcode, %s canonical, %s from database', len(orphaned), len(canonical_bibcodes), len(store)) return orphaned