def extract_availability(self, circulation_data, element, ns): identifier = self.text_of_subtag(element, 'axis:titleId', ns) primary_identifier = IdentifierData(Identifier.THETA_ID, identifier) if not circulation_data: circulation_data = CirculationData( data_source=DataSource.THETA, primary_identifier=primary_identifier, ) availability = self._xpath1(element, 'axis:availability', ns) total_copies = self.int_of_subtag(availability, 'axis:totalCopies', ns) available_copies = self.int_of_subtag(availability, 'axis:availableCopies', ns) size_of_hold_queue = self.int_of_subtag(availability, 'axis:holdsQueueSize', ns) availability_updated = self.text_of_optional_subtag( availability, 'axis:updateDate', ns) if availability_updated: try: attempt = datetime.datetime.strptime( availability_updated, self.FULL_DATE_FORMAT_IMPLICIT_UTC) availability_updated += ' +00:00' except ValueError: pass availability_updated = datetime.datetime.strptime( availability_updated, self.FULL_DATE_FORMAT) circulation_data.licenses_owned = total_copies circulation_data.licenses_available = available_copies circulation_data.licenses_reserved = 0 circulation_data.patrons_in_hold_queue = size_of_hold_queue return circulation_data
def extract_availability(self, circulation_data, element, ns): primary_identifier = IdentifierData(Identifier.ENKI_ID, element["id"]) if not circulation_data: circulation_data = CirculationData( data_source=DataSource.ENKI, primary_identifier=primary_identifier, ) # For now, assume there is a license available for each item. circulation_data.licenses_owned = 1 circulation_data.licenses_available = 1 circulation_data.licenses_reserved = 0 circulation_data.patrons_in_hold_queue = 0 return circulation_data
def test_circulationdata_may_require_collection(self): """Depending on the information provided in a CirculationData object, it might or might not be possible to call apply() without providing a Collection. """ identifier = IdentifierData(Identifier.OVERDRIVE_ID, "1") format = FormatData(Representation.EPUB_MEDIA_TYPE, DeliveryMechanism.NO_DRM, rights_uri=RightsStatus.IN_COPYRIGHT) circdata = CirculationData(DataSource.OVERDRIVE, primary_identifier=identifier, formats=[format]) circdata.apply(self._db, collection=None) # apply() has created a LicensePoolDeliveryMechanism for this # title, even though there are no LicensePools for it. identifier_obj, ignore = identifier.load(self._db) eq_([], identifier_obj.licensed_through) [lpdm] = identifier_obj.delivery_mechanisms eq_(DataSource.OVERDRIVE, lpdm.data_source.name) eq_(RightsStatus.IN_COPYRIGHT, lpdm.rights_status.uri) mechanism = lpdm.delivery_mechanism eq_(Representation.EPUB_MEDIA_TYPE, mechanism.content_type) eq_(DeliveryMechanism.NO_DRM, mechanism.drm_scheme) # But if we put some information in the CirculationData # that can only be stored in a LicensePool, there's trouble. circdata.licenses_owned = 0 assert_raises_regexp( ValueError, 'Cannot store circulation information because no Collection was provided.', circdata.apply, self._db, collection=None)