Beispiel #1
0
    def __init__(self, content_dict, **kwargs):
        super(AudiobookManifest, self).__init__(**kwargs)
        self.raw = content_dict

        # Metadata values that map directly onto the core spec.
        self.import_metadata('title')
        self.import_metadata('publisher')
        self.import_metadata('description')
        self.import_metadata('isbn', 'identifier')
        self.import_metadata('authors', 'author')
        self.import_metadata('narrators', 'narrator')
        self.import_metadata('minutes', 'duration', lambda x: x*60)

        # Metadata values that have no equivalent in the core spec,
        # but are potentially useful.
        self.import_metadata('size', 'schema:contentSize')
        self.import_metadata('titleid', 'rbdigital:id', str)
        self.import_metadata('hasDrm', 'rbdigital:hasDrm')
        self.import_metadata('encryptionKey', 'rbdigital:encryptionKey')

        # Spine items.
        for file_data in self.raw.get('files', []):
            self.import_spine(file_data)

        # Links.
        download_url = self.raw.get('downloadUrl')
        if download_url:
            self.add_link(
                download_url, 'alternate', 
                type=Representation.guess_media_type(download_url)
            )

        cover = self.best_cover(self.raw.get('images', []))
        if cover:
            self.add_link(
                cover, "cover", type=Representation.guess_media_type(cover)
            )
Beispiel #2
0
    def import_spine(self, file_data):
        """Import an RBdigital spine item as a Web Publication Manifest
        spine item.
        """
        href = file_data.get('downloadUrl')
        duration = file_data.get('minutes') * 60
        title = file_data.get('display')

        id = file_data.get('id')
        size = file_data.get('size')
        filename = file_data.get('filename')
        type = Representation.guess_media_type(filename)

        extra = {}
        for k, v, transform in (
            ('id', 'rbdigital:id', str),
            ('size', 'schema:contentSize', lambda x: x),
            ('minutes', 'duration', lambda x: x * 60),
        ):
            if k in file_data:
                extra[v] = transform(file_data[k])
        self.add_spine(href, type, title, **extra)