def __init__(self, _db, api, datasource, batch_size=10, metadata_replacement_policy=None, circulationdata_replacement_policy=None, cutoff_time=None): self._db = _db self.api = api output_source = DataSource.lookup(_db, datasource) input_identifier_types = [output_source.primary_identifier_type] service_name = "%s Bibliographic Coverage Provider" % datasource metadata_replacement_policy = ( metadata_replacement_policy or ReplacementPolicy.from_metadata_source()) circulationdata_replacement_policy = ( circulationdata_replacement_policy or ReplacementPolicy.from_license_source()) self.metadata_replacement_policy = metadata_replacement_policy self.circulationdata_replacement_policy = circulationdata_replacement_policy super(BibliographicCoverageProvider, self).__init__(service_name, input_identifier_types, output_source, batch_size=batch_size, cutoff_time=cutoff_time)
def _set_circulationdata(self, identifier, circulationdata, circulationdata_replacement_policy=None): """Finds or creates the LicensePool for an Identifier, updates it with the given circulationdata, then creates a Work for the book. TODO: Makes assumption of one license pool per identifier. In a later branch, this will change. :return: The Identifier (if successful) or an appropriate CoverageFailure (if not). """ circulationdata_replacement_policy = circulationdata_replacement_policy or ( ReplacementPolicy.from_license_source()) pool = self.license_pool(identifier) if isinstance(pool, CoverageFailure): return pool if not circulationdata: e = "Did not receive circulationdata from input source" return CoverageFailure(identifier, e, data_source=self.output_source, transient=True) try: circulationdata.apply( pool, replace=circulationdata_replacement_policy, ) except Exception as e: self.log.warn("Error applying circulationdata to pool %d: %s", pool.id, e, exc_info=e) return CoverageFailure(identifier, repr(e), data_source=self.output_source, transient=True) return identifier
def _default_replacement_policy(self, _db): """Unless told otherwise, assume that we are getting this data from a reliable source of both metadata and circulation information. """ return ReplacementPolicy.from_license_source(_db)