コード例 #1
0
 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)
コード例 #2
0
    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
コード例 #3
0
 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)