def fulfill_link(self, data_source_name, identifier_identifier, license_pool, active_loan, delivery_mechanism): """Create a new fulfillment link.""" if isinstance(delivery_mechanism, LicensePoolDeliveryMechanism): logging.warn("LicensePoolDeliveryMechanism passed into fulfill_link instead of DeliveryMechanism!") delivery_mechanism = delivery_mechanism.delivery_mechanism format_types = AcquisitionFeed.format_types(delivery_mechanism) if not format_types: return None fulfill_url = self.url_for( "fulfill", data_source=data_source_name, identifier=identifier_identifier, mechanism_id=delivery_mechanism.id, _external=True ) rel=OPDSFeed.ACQUISITION_REL link_tag = AcquisitionFeed.acquisition_link( rel=rel, href=fulfill_url, types=format_types ) children = AcquisitionFeed.license_tags(license_pool, active_loan, None) link_tag.extend(children) return link_tag
def fulfill_link(self, license_pool, active_loan, delivery_mechanism): """Create a new fulfillment link. This link may include tags from the OPDS Extensions for DRM. """ if isinstance(delivery_mechanism, LicensePoolDeliveryMechanism): logging.warn("LicensePoolDeliveryMechanism passed into fulfill_link instead of DeliveryMechanism!") delivery_mechanism = delivery_mechanism.delivery_mechanism format_types = AcquisitionFeed.format_types(delivery_mechanism) if not format_types: return None fulfill_url = self.url_for( "fulfill", license_pool_id=license_pool.id, mechanism_id=delivery_mechanism.id, library_short_name=self.library.short_name, _external=True ) rel=OPDSFeed.ACQUISITION_REL link_tag = AcquisitionFeed.acquisition_link( rel=rel, href=fulfill_url, types=format_types ) children = AcquisitionFeed.license_tags(license_pool, active_loan, None) link_tag.extend(children) children = self.drm_device_registration_tags( license_pool, active_loan, delivery_mechanism ) link_tag.extend(children) return link_tag
def borrow_link(self, identifier, borrow_mechanism, fulfillment_mechanisms): if borrow_mechanism: # Following this link will both borrow the book and set # its delivery mechanism. mechanism_id = borrow_mechanism.delivery_mechanism.id else: # Following this link will borrow the book but not set # its delivery mechanism. mechanism_id = None borrow_url = self.url_for( "borrow", identifier_type=identifier.type, identifier=identifier.identifier, mechanism_id=mechanism_id, library_short_name=self.library.short_name, _external=True) rel = OPDSFeed.BORROW_REL borrow_link = AcquisitionFeed.link( rel=rel, href=borrow_url, type=OPDSFeed.ENTRY_TYPE ) indirect_acquisitions = [] for lpdm in fulfillment_mechanisms: # We have information about one or more delivery # mechanisms that will be available at the point of # fulfillment. To the extent possible, put information # about these mechanisms into the <link> tag as # <opds:indirectAcquisition> tags. # These are the formats mentioned in the indirect # acquisition. format_types = AcquisitionFeed.format_types(lpdm.delivery_mechanism) # If we can borrow this book, add this delivery mechanism # to the borrow link as an <opds:indirectAcquisition>. if format_types: indirect_acquisition = AcquisitionFeed.indirect_acquisition( format_types ) indirect_acquisitions.append(indirect_acquisition) if not indirect_acquisitions: raise UnfulfillableWork() borrow_link.extend(indirect_acquisitions) return borrow_link
def borrow_link(self, data_source_name, identifier, borrow_mechanism, fulfillment_mechanisms): if borrow_mechanism: # Following this link will both borrow the book and set # its delivery mechanism. mechanism_id = borrow_mechanism.delivery_mechanism.id else: # Following this link will borrow the book but not set # its delivery mechanism. mechanism_id = None borrow_url = self.url_for( "borrow", data_source=data_source_name, identifier_type=identifier.type, identifier=identifier.identifier, mechanism_id=mechanism_id, _external=True) rel = OPDSFeed.BORROW_REL borrow_link = AcquisitionFeed.link( rel=rel, href=borrow_url, type=OPDSFeed.ENTRY_TYPE ) for lpdm in fulfillment_mechanisms: # We have information about one or more delivery # mechanisms that will be available at the point of # fulfillment. To the extent possible, put information # about these mechanisms into the <link> tag as # <opds:indirectAcquisition> tags. # These are the formats mentioned in the indirect # acquisition. format_types = AcquisitionFeed.format_types(lpdm.delivery_mechanism) # If we can borrow this book, add this delivery mechanism # to the borrow link as an <opds:indirectAcquisition>. if format_types: indirect_acquisition = AcquisitionFeed.indirect_acquisition( format_types ) borrow_link.append(indirect_acquisition) return borrow_link