Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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)