|
| 1 | +import pkg_resources |
1 | 2 | from stevedore import driver |
2 | 3 |
|
3 | 4 | from mfr.core import exceptions |
@@ -97,6 +98,48 @@ def make_renderer(name, metadata, file_path, url, assets_url, export_url): |
97 | 98 | } |
98 | 99 | ) |
99 | 100 |
|
| 101 | + |
| 102 | +def get_renderer_name(name: str) -> str: |
| 103 | + """ Return the name of the renderer used for a certain file extension. |
| 104 | +
|
| 105 | + :param str name: The name of the extension to get the renderer name for. (.jpg, .docx, etc) |
| 106 | +
|
| 107 | + :rtype : `str` |
| 108 | + """ |
| 109 | + |
| 110 | + # `ep_iterator` is an iterable object. Must convert it to a `list` for access. |
| 111 | + # `list()` can only be called once because the iterator moves to the end after conversion. |
| 112 | + ep_iterator = pkg_resources.iter_entry_points(group='mfr.renderers', name=name.lower()) |
| 113 | + ep_list = list(ep_iterator) |
| 114 | + |
| 115 | + # Empty list indicates unsupported file type. |
| 116 | + # Return a blank string and let `make_renderer()` handle it. |
| 117 | + if len(ep_list) == 0: |
| 118 | + return '' |
| 119 | + |
| 120 | + # If file type is supported, there must be only one element in the list. |
| 121 | + assert len(ep_list) == 1 |
| 122 | + return ep_list[0].attrs[0] |
| 123 | + |
| 124 | + |
| 125 | +def get_exporter_name(name: str) -> str: |
| 126 | + """ Return the name of the exporter used for a certain file extension. |
| 127 | +
|
| 128 | + :param str name: The name of the extension to get the exporter name for. (.jpg, .docx, etc) |
| 129 | +
|
| 130 | + :rtype : `str` |
| 131 | + """ |
| 132 | + |
| 133 | + # `ep_iterator` is an iterable object. Must convert it to a `list` for access. |
| 134 | + # `list()` can only be called once because the iterator moves to the end after conversion. |
| 135 | + ep_iterator = pkg_resources.iter_entry_points(group='mfr.exporters', name=name.lower()) |
| 136 | + ep_list = list(ep_iterator) |
| 137 | + |
| 138 | + # `make_renderer()` is called before `make_exporter()` to ensure the file type is supported |
| 139 | + assert len(ep_list) == 1 |
| 140 | + return ep_list[0].attrs[0] |
| 141 | + |
| 142 | + |
100 | 143 | def sizeof_fmt(num, suffix='B'): |
101 | 144 | if abs(num) < 1000: |
102 | 145 | return '%3.0f%s' % (num, suffix) |
|
0 commit comments