Exemple #1
0
def document_factory(ident_hash, context=None, baked=False):
    metadata = get_metadata(ident_hash)
    if baked and context is None:
        raise RuntimeError("Request for baked Document with no context")

    content = get_content(ident_hash, context)
    resources_map = {
        h: resource_factory(h, ident_hash)
        for h in get_registered_files(ident_hash)
    }
    doc = cnxepub.Document(metadata['id'],
                           content,
                           metadata=metadata,
                           resources=resources_map.values())
    # FIXME the referencing binding template doesn't allow for more than
    # the `id` to be set. Change this to allow an anonymous function.
    for ref in doc.references:
        if ref.remote_type != 'internal' \
           or not ref.uri.startswith('/resources/'):
            continue
        hash, filename = ref.uri.split('/')[-2:]
        if hash == 'resources':
            # if ref.uri is just /resources/hash (without filename)
            hash = filename
        try:
            resource = resources_map[hash]
        except KeyError:  # reference w/o resource
            resource = resource_factory(hash)

        ref.bind(resource, '/resources/{}')
    return doc
Exemple #2
0
def document_factory(ident_hash, context=None, baked=False):
    metadata = get_metadata(ident_hash)
    if baked and context is None:
        raise RuntimeError("Request for baked Document with no context")

    content = get_content(ident_hash, context)
    resources_map = {h: resource_factory(h, ident_hash)
                     for h in get_registered_files(ident_hash)}
    doc = cnxepub.Document(metadata['id'], content, metadata=metadata,
                           resources=resources_map.values())
    # FIXME the referencing binding template doesn't allow for more than
    # the `id` to be set. Change this to allow an anonymous function.
    for ref in doc.references:
        if ref.remote_type != 'internal' \
           or not ref.uri.startswith('/resources/'):
            continue
        hash, filename = ref.uri.split('/')[-2:]
        if hash == 'resources':
            # if ref.uri is just /resources/hash (without filename)
            hash = filename
        try:
            resource = resources_map[hash]
        except KeyError:  # reference w/o resource
            resource = resource_factory(hash)

        ref.bind(resource, '/resources/{}')
    return doc
Exemple #3
0
def binder_factory(ident_hash):
    metadata = get_metadata(ident_hash)
    tree = get_tree(ident_hash)
    nodes = tree_to_nodes(tree)
    titles = _title_overrides_from_tree(tree)
    resources = [resource_factory(h, ident_hash)
                 for h in get_registered_files(ident_hash)]
    binder = cnxepub.Binder(metadata['id'], nodes=nodes, metadata=metadata,
                            resources=resources, title_overrides=titles)
    return binder
Exemple #4
0
def binder_factory(ident_hash, baked=False):
    metadata = get_metadata(ident_hash)
    tree = get_tree(ident_hash, baked=baked)
    if baked:
        context = tree['id']
    else:
        context = None
    nodes = tree_to_nodes(tree, context, metadata)
    titles = _title_overrides_from_tree(tree)
    resources = [resource_factory(h, ident_hash)
                 for h in get_registered_files(ident_hash)]
    binder = cnxepub.Binder(metadata['id'], nodes=nodes, metadata=metadata,
                            resources=resources, title_overrides=titles)
    return binder
Exemple #5
0
def binder_factory(ident_hash, baked=False):
    metadata = get_metadata(ident_hash)
    tree = get_tree(ident_hash, baked=baked)
    if baked:
        context = tree['id']
    else:
        context = None
    nodes = tree_to_nodes(tree, context, metadata)
    titles = _title_overrides_from_tree(tree)
    resources = [
        resource_factory(h, ident_hash)
        for h in get_registered_files(ident_hash)
    ]
    binder = cnxepub.Binder(metadata['id'],
                            nodes=nodes,
                            metadata=metadata,
                            resources=resources,
                            title_overrides=titles)
    return binder