Historie 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,292 @@
1
+ Metadata-Version: 2.4
2
+ Name: Historie
3
+ Version: 0.1.0
4
+ Summary: Structured reStructuredText-based résumé format for developers
5
+ Author-email: saaj <mail@saaj.me>
6
+ License-Expression: GPL-3.0-only
7
+ Project-URL: Homepage, https://heptapod.host/saajns/historie
8
+ Keywords: résumé,developer-story,curriculum-vitae,cv,restructuredtext
9
+ Classifier: Topic :: Text Processing :: Markup :: reStructuredText
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3 :: Only
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Programming Language :: Python :: 3.14
16
+ Classifier: Programming Language :: Python :: 3.15
17
+ Classifier: Programming Language :: Python :: Implementation :: CPython
18
+ Classifier: Intended Audience :: Developers
19
+ Requires-Python: >=3.10
20
+ Description-Content-Type: text/x-rst
21
+ Requires-Dist: docutils<0.24,>=0.23
22
+ Requires-Dist: weasyprint<65,>=62
23
+
24
+ .. image:: https://img.shields.io/pypi/l/Historie.svg
25
+ :target: https://spdx.org/licenses/GPL-3.0-only.html
26
+ :alt: PyPI - License
27
+ .. image::
28
+ https://img.shields.io/gitlab/pipeline-status/saajns%2Fhistorie
29
+ ?gitlab_url=https%3A%2F%2Fheptapod.host&branch=branch%2Fdefault
30
+ :target: https://heptapod.host/saajns/historie/-/commits/branch/default
31
+ :alt: Pipeline status
32
+ .. image::
33
+ https://img.shields.io/gitlab/pipeline-coverage/saajns%2Fhistorie
34
+ ?gitlab_url=https%3A%2F%2Fheptapod.host&branch=branch%2Fdefault
35
+ :target: https://saajns.heptapod.io/historie/htmlcov/?badge=coverage
36
+ :alt: Test code coverage
37
+ .. image:: https://badge.fury.io/py/Historie.svg
38
+ :target: https://pypi.python.org/pypi/Historie
39
+ :alt: PyPI
40
+
41
+ ********
42
+ Historie
43
+ ********
44
+ Historie is a résumé management tool, comprised by a reStructuredText-based DSL
45
+ and an exporter to a number of publishing formats (HTML and PDF). Structured,
46
+ timeline-centric representation is inspired by the StackOverflow Developer
47
+ Story that was shut down [1]_ (and was attempted to be revived recently).
48
+
49
+ Install
50
+ =======
51
+ Install with::
52
+
53
+ pipx install Historie
54
+
55
+ DSL
56
+ ===
57
+ Adds the following reStructuredText directives [2]_ each usually having a
58
+ number of arguments:
59
+
60
+ 1. ``his-contacts``
61
+
62
+ - ``name``
63
+ - ``title``
64
+ - ``location``
65
+ - ``email``
66
+
67
+ Example:
68
+
69
+ .. code:: restructuredtext
70
+
71
+ .. his-contacts::
72
+ :name: Robert C. Martin
73
+ :title: Software Craftsman & Clean Code Evangelist
74
+ :location: Chicago, Illinois, USA
75
+ :email: uncle.bob@cleancoders.com
76
+
77
+ 2. ``his-links``
78
+
79
+ This directive has no argument, but uses a definition list to allow
80
+ annotated links, for example:
81
+
82
+ .. code:: restructuredtext
83
+
84
+ .. his-links::
85
+
86
+ Clean Coders
87
+ https://cleancoders.com/
88
+
89
+ The Clean Code Blog
90
+ https://blog.cleancoder.com/
91
+
92
+ GitHub
93
+ https://github.com/unclebob
94
+
95
+ 3. ``his-stack-exchange-profiles``
96
+
97
+ - ``stackoverflow``
98
+ - ``serverfault``
99
+ - ``superuser``
100
+ - ``askubuntu``
101
+ - ``unix``
102
+ - ``dba``
103
+ - ``softwareengineering``
104
+
105
+ Example:
106
+
107
+ .. code:: restructuredtext
108
+
109
+ .. his-stack-exchange-profiles::
110
+ :stackoverflow: 73476
111
+
112
+ 4. ``his-technology-preference``
113
+
114
+ - ``desired``
115
+ - ``undesired``
116
+
117
+ Example:
118
+
119
+ .. code:: restructuredtext
120
+
121
+ .. his-technology-preference::
122
+ :desired:
123
+ clean-code, solid-principles, tdd, craftsmanship, agile,
124
+ refactoring, design-patterns, clojure, java, architecture
125
+ :undesired:
126
+ big-design-up-front, waterfall, code-comments,
127
+ null-references, singletons, service-locators
128
+
129
+ 5. ``his-summary``
130
+
131
+ This directive only has content, for example:
132
+
133
+ .. code:: restructuredtext
134
+
135
+ .. his-summary::
136
+
137
+ Software professional since 1970. Author of foundational texts on
138
+ clean code, agile development, and software craftsmanship. Original
139
+ signatory of the Agile Manifesto. Firm believer that the only way
140
+ to go fast is to go well.
141
+
142
+ 6. ``his-job``
143
+
144
+ - ``company-name``
145
+ - ``company-website``
146
+ - ``role``
147
+ - ``start``
148
+ - ``finish``
149
+ - ``technology``
150
+
151
+ Examples:
152
+
153
+ .. code:: restructuredtext
154
+
155
+ .. his-job::
156
+ :company-name: Clean Coders
157
+ :company-website: https://cleancoders.com/
158
+ :role: Founder & Head Craftsman
159
+ :start: 2010-01-01
160
+ :technology:
161
+ video-production, education, clean-code, tdd,
162
+ solid-principles, refactoring, clojure
163
+
164
+ Founded educational platform delivering video training on software
165
+ craftsmanship. Produced 60+ hours of content covering clean code,
166
+ TDD, SOLID principles, and functional programming. Reached hundreds
167
+ of thousands of developers worldwide.
168
+
169
+ .. his-job::
170
+ :company-name: Object Mentor
171
+ :company-website: https://web.archive.org/web/20070913061205/https://www.objectmentor.com/
172
+ :role: Founder & President
173
+ :start: 1990-01-01
174
+ :finish: 2009-12-31
175
+ :technology:
176
+ consulting, training, agile, xp, tdd, oop,
177
+ design-patterns, c++, java
178
+
179
+ Built premier consulting firm for agile transformation and technical
180
+ training. Trained Fortune 500 companies in XP, TDD, and OOP. Authored
181
+ company's flagship course curricula. Helped establish agile practices
182
+ in enterprise software development.
183
+
184
+ .. his-job::
185
+ :company-name: Teradyne
186
+ :company-website: https://teradyne.com/
187
+ :role: Software Engineer
188
+ :start: 1970-01-01
189
+ :finish: 1989-12-31
190
+ :technology:
191
+ assembly, c, c++, embedded-systems, real-time,
192
+ telecommunications, testing-equipment
193
+
194
+ Cut teeth on PDP-8 and PDP-11 assembly. Developed embedded systems
195
+ for automated testing equipment. Learned that the hard way is the
196
+ slow way, and discipline is the path to speed. Discovered that
197
+ debugging time dwarfs coding time unless you write tests first.
198
+
199
+ 7. ``his-project``
200
+
201
+ - ``name``
202
+ - ``url``
203
+ - ``start``
204
+ - ``finish``
205
+ - ``technology``
206
+
207
+ Examples:
208
+
209
+ .. code:: restructuredtext
210
+
211
+ .. his-project::
212
+ :name: FitNesse
213
+ :url: https://github.com/unclebob/fitnesse
214
+ :start: 2002-01-01
215
+ :technology: java, acceptance-testing, wiki, collaboration
216
+
217
+ Fully integrated standalone wiki and acceptance testing framework.
218
+ Enables customers, testers, and programmers to collaborate on
219
+ software requirements through executable specifications. Because
220
+ the best documentation is documentation that runs.
221
+
222
+ .. his-project::
223
+ :name: Clean Code (The Book)
224
+ :url: https://www.oreilly.com/library/view/clean-code-a/9780136083238/
225
+ :start: 2007-01-01
226
+ :finish: 2008-08-01
227
+ :technology: java, craftsmanship, refactoring, naming, functions
228
+
229
+ A Handbook of Agile Software Craftsmanship. Distilled decades of
230
+ experience into principles, patterns, and practices for writing
231
+ code that works and reads well. Over 1 million copies sold.
232
+ Translated into dozens of languages. Still sparking debates about
233
+ function length.
234
+
235
+ .. his-project::
236
+ :name: The Agile Manifesto
237
+ :url: https://agilemanifesto.org/
238
+ :start: 2001-02-11
239
+ :technology: agile, collaboration, methodology, values
240
+
241
+ Co-authored with 16 other signatories at Snowbird ski resort.
242
+ Four values, twelve principles, infinite interpretations.
243
+ Revolutionized software development industry. Occasionally
244
+ misunderstood by management consultants selling certifications.
245
+
246
+ 8. ``his-education``
247
+
248
+ - ``institution``
249
+ - ``institution-website``
250
+ - ``degree``
251
+ - ``start``
252
+ - ``finish``
253
+ - ``technology``
254
+
255
+ Example:
256
+
257
+ .. code:: restructuredtext
258
+
259
+ .. his-education::
260
+ :institution: Self-taught
261
+ :start: 1970-01-01
262
+ :technology: assembly, fortran, cobol, algorithms, data-structures
263
+
264
+ Began programming professionally in 1970 on PDP-8 and PDP-11
265
+ systems. Learned through hands-on experience, reading, and
266
+ mentorship. Proof that mastery comes from dedication and
267
+ deliberate practice, not just formal credentials.
268
+
269
+ CLI
270
+ ===
271
+ ::
272
+
273
+ $ historie --help
274
+ usage: historie [-h] [--logging-level LOGGING_LEVEL] [-f {html,pdf}] [-o OUTPUT] input
275
+
276
+ Generate a résumé in a publish format from reStructuredText.
277
+
278
+ positional arguments:
279
+ input Input reStructuredText file
280
+
281
+ options:
282
+ -h, --help show this help message and exit
283
+ --logging-level LOGGING_LEVEL
284
+ Logging level. By default: INFO.
285
+ -f, --format {html,pdf}
286
+ Output format. By default: html.
287
+ -o, --output OUTPUT Output file: By default ".rst" is appended to input.
288
+
289
+ ____
290
+
291
+ .. [1] https://meta.stackoverflow.com/questions/415293/sunsetting-jobs-developer-story
292
+ .. [2] https://docutils.sourceforge.io/docs/ref/rst/directives.html
@@ -0,0 +1,18 @@
1
+ pyproject.toml
2
+ readme.rst
3
+ Historie.egg-info/PKG-INFO
4
+ Historie.egg-info/SOURCES.txt
5
+ Historie.egg-info/dependency_links.txt
6
+ Historie.egg-info/entry_points.txt
7
+ Historie.egg-info/requires.txt
8
+ Historie.egg-info/top_level.txt
9
+ historie/__init__.py
10
+ historie/__main__.py
11
+ historie/cli.py
12
+ historie/directives.py
13
+ historie/exporters.py
14
+ historie/html_writer.py
15
+ historie/tests.py
16
+ historie/utility.py
17
+ historie/static/default_favicon.svg
18
+ historie/static/style.css
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ historie = historie.cli:main
@@ -0,0 +1,2 @@
1
+ docutils<0.24,>=0.23
2
+ weasyprint<65,>=62
@@ -0,0 +1 @@
1
+ historie
@@ -0,0 +1,292 @@
1
+ Metadata-Version: 2.4
2
+ Name: Historie
3
+ Version: 0.1.0
4
+ Summary: Structured reStructuredText-based résumé format for developers
5
+ Author-email: saaj <mail@saaj.me>
6
+ License-Expression: GPL-3.0-only
7
+ Project-URL: Homepage, https://heptapod.host/saajns/historie
8
+ Keywords: résumé,developer-story,curriculum-vitae,cv,restructuredtext
9
+ Classifier: Topic :: Text Processing :: Markup :: reStructuredText
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3 :: Only
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Programming Language :: Python :: 3.14
16
+ Classifier: Programming Language :: Python :: 3.15
17
+ Classifier: Programming Language :: Python :: Implementation :: CPython
18
+ Classifier: Intended Audience :: Developers
19
+ Requires-Python: >=3.10
20
+ Description-Content-Type: text/x-rst
21
+ Requires-Dist: docutils<0.24,>=0.23
22
+ Requires-Dist: weasyprint<65,>=62
23
+
24
+ .. image:: https://img.shields.io/pypi/l/Historie.svg
25
+ :target: https://spdx.org/licenses/GPL-3.0-only.html
26
+ :alt: PyPI - License
27
+ .. image::
28
+ https://img.shields.io/gitlab/pipeline-status/saajns%2Fhistorie
29
+ ?gitlab_url=https%3A%2F%2Fheptapod.host&branch=branch%2Fdefault
30
+ :target: https://heptapod.host/saajns/historie/-/commits/branch/default
31
+ :alt: Pipeline status
32
+ .. image::
33
+ https://img.shields.io/gitlab/pipeline-coverage/saajns%2Fhistorie
34
+ ?gitlab_url=https%3A%2F%2Fheptapod.host&branch=branch%2Fdefault
35
+ :target: https://saajns.heptapod.io/historie/htmlcov/?badge=coverage
36
+ :alt: Test code coverage
37
+ .. image:: https://badge.fury.io/py/Historie.svg
38
+ :target: https://pypi.python.org/pypi/Historie
39
+ :alt: PyPI
40
+
41
+ ********
42
+ Historie
43
+ ********
44
+ Historie is a résumé management tool, comprised by a reStructuredText-based DSL
45
+ and an exporter to a number of publishing formats (HTML and PDF). Structured,
46
+ timeline-centric representation is inspired by the StackOverflow Developer
47
+ Story that was shut down [1]_ (and was attempted to be revived recently).
48
+
49
+ Install
50
+ =======
51
+ Install with::
52
+
53
+ pipx install Historie
54
+
55
+ DSL
56
+ ===
57
+ Adds the following reStructuredText directives [2]_ each usually having a
58
+ number of arguments:
59
+
60
+ 1. ``his-contacts``
61
+
62
+ - ``name``
63
+ - ``title``
64
+ - ``location``
65
+ - ``email``
66
+
67
+ Example:
68
+
69
+ .. code:: restructuredtext
70
+
71
+ .. his-contacts::
72
+ :name: Robert C. Martin
73
+ :title: Software Craftsman & Clean Code Evangelist
74
+ :location: Chicago, Illinois, USA
75
+ :email: uncle.bob@cleancoders.com
76
+
77
+ 2. ``his-links``
78
+
79
+ This directive has no argument, but uses a definition list to allow
80
+ annotated links, for example:
81
+
82
+ .. code:: restructuredtext
83
+
84
+ .. his-links::
85
+
86
+ Clean Coders
87
+ https://cleancoders.com/
88
+
89
+ The Clean Code Blog
90
+ https://blog.cleancoder.com/
91
+
92
+ GitHub
93
+ https://github.com/unclebob
94
+
95
+ 3. ``his-stack-exchange-profiles``
96
+
97
+ - ``stackoverflow``
98
+ - ``serverfault``
99
+ - ``superuser``
100
+ - ``askubuntu``
101
+ - ``unix``
102
+ - ``dba``
103
+ - ``softwareengineering``
104
+
105
+ Example:
106
+
107
+ .. code:: restructuredtext
108
+
109
+ .. his-stack-exchange-profiles::
110
+ :stackoverflow: 73476
111
+
112
+ 4. ``his-technology-preference``
113
+
114
+ - ``desired``
115
+ - ``undesired``
116
+
117
+ Example:
118
+
119
+ .. code:: restructuredtext
120
+
121
+ .. his-technology-preference::
122
+ :desired:
123
+ clean-code, solid-principles, tdd, craftsmanship, agile,
124
+ refactoring, design-patterns, clojure, java, architecture
125
+ :undesired:
126
+ big-design-up-front, waterfall, code-comments,
127
+ null-references, singletons, service-locators
128
+
129
+ 5. ``his-summary``
130
+
131
+ This directive only has content, for example:
132
+
133
+ .. code:: restructuredtext
134
+
135
+ .. his-summary::
136
+
137
+ Software professional since 1970. Author of foundational texts on
138
+ clean code, agile development, and software craftsmanship. Original
139
+ signatory of the Agile Manifesto. Firm believer that the only way
140
+ to go fast is to go well.
141
+
142
+ 6. ``his-job``
143
+
144
+ - ``company-name``
145
+ - ``company-website``
146
+ - ``role``
147
+ - ``start``
148
+ - ``finish``
149
+ - ``technology``
150
+
151
+ Examples:
152
+
153
+ .. code:: restructuredtext
154
+
155
+ .. his-job::
156
+ :company-name: Clean Coders
157
+ :company-website: https://cleancoders.com/
158
+ :role: Founder & Head Craftsman
159
+ :start: 2010-01-01
160
+ :technology:
161
+ video-production, education, clean-code, tdd,
162
+ solid-principles, refactoring, clojure
163
+
164
+ Founded educational platform delivering video training on software
165
+ craftsmanship. Produced 60+ hours of content covering clean code,
166
+ TDD, SOLID principles, and functional programming. Reached hundreds
167
+ of thousands of developers worldwide.
168
+
169
+ .. his-job::
170
+ :company-name: Object Mentor
171
+ :company-website: https://web.archive.org/web/20070913061205/https://www.objectmentor.com/
172
+ :role: Founder & President
173
+ :start: 1990-01-01
174
+ :finish: 2009-12-31
175
+ :technology:
176
+ consulting, training, agile, xp, tdd, oop,
177
+ design-patterns, c++, java
178
+
179
+ Built premier consulting firm for agile transformation and technical
180
+ training. Trained Fortune 500 companies in XP, TDD, and OOP. Authored
181
+ company's flagship course curricula. Helped establish agile practices
182
+ in enterprise software development.
183
+
184
+ .. his-job::
185
+ :company-name: Teradyne
186
+ :company-website: https://teradyne.com/
187
+ :role: Software Engineer
188
+ :start: 1970-01-01
189
+ :finish: 1989-12-31
190
+ :technology:
191
+ assembly, c, c++, embedded-systems, real-time,
192
+ telecommunications, testing-equipment
193
+
194
+ Cut teeth on PDP-8 and PDP-11 assembly. Developed embedded systems
195
+ for automated testing equipment. Learned that the hard way is the
196
+ slow way, and discipline is the path to speed. Discovered that
197
+ debugging time dwarfs coding time unless you write tests first.
198
+
199
+ 7. ``his-project``
200
+
201
+ - ``name``
202
+ - ``url``
203
+ - ``start``
204
+ - ``finish``
205
+ - ``technology``
206
+
207
+ Examples:
208
+
209
+ .. code:: restructuredtext
210
+
211
+ .. his-project::
212
+ :name: FitNesse
213
+ :url: https://github.com/unclebob/fitnesse
214
+ :start: 2002-01-01
215
+ :technology: java, acceptance-testing, wiki, collaboration
216
+
217
+ Fully integrated standalone wiki and acceptance testing framework.
218
+ Enables customers, testers, and programmers to collaborate on
219
+ software requirements through executable specifications. Because
220
+ the best documentation is documentation that runs.
221
+
222
+ .. his-project::
223
+ :name: Clean Code (The Book)
224
+ :url: https://www.oreilly.com/library/view/clean-code-a/9780136083238/
225
+ :start: 2007-01-01
226
+ :finish: 2008-08-01
227
+ :technology: java, craftsmanship, refactoring, naming, functions
228
+
229
+ A Handbook of Agile Software Craftsmanship. Distilled decades of
230
+ experience into principles, patterns, and practices for writing
231
+ code that works and reads well. Over 1 million copies sold.
232
+ Translated into dozens of languages. Still sparking debates about
233
+ function length.
234
+
235
+ .. his-project::
236
+ :name: The Agile Manifesto
237
+ :url: https://agilemanifesto.org/
238
+ :start: 2001-02-11
239
+ :technology: agile, collaboration, methodology, values
240
+
241
+ Co-authored with 16 other signatories at Snowbird ski resort.
242
+ Four values, twelve principles, infinite interpretations.
243
+ Revolutionized software development industry. Occasionally
244
+ misunderstood by management consultants selling certifications.
245
+
246
+ 8. ``his-education``
247
+
248
+ - ``institution``
249
+ - ``institution-website``
250
+ - ``degree``
251
+ - ``start``
252
+ - ``finish``
253
+ - ``technology``
254
+
255
+ Example:
256
+
257
+ .. code:: restructuredtext
258
+
259
+ .. his-education::
260
+ :institution: Self-taught
261
+ :start: 1970-01-01
262
+ :technology: assembly, fortran, cobol, algorithms, data-structures
263
+
264
+ Began programming professionally in 1970 on PDP-8 and PDP-11
265
+ systems. Learned through hands-on experience, reading, and
266
+ mentorship. Proof that mastery comes from dedication and
267
+ deliberate practice, not just formal credentials.
268
+
269
+ CLI
270
+ ===
271
+ ::
272
+
273
+ $ historie --help
274
+ usage: historie [-h] [--logging-level LOGGING_LEVEL] [-f {html,pdf}] [-o OUTPUT] input
275
+
276
+ Generate a résumé in a publish format from reStructuredText.
277
+
278
+ positional arguments:
279
+ input Input reStructuredText file
280
+
281
+ options:
282
+ -h, --help show this help message and exit
283
+ --logging-level LOGGING_LEVEL
284
+ Logging level. By default: INFO.
285
+ -f, --format {html,pdf}
286
+ Output format. By default: html.
287
+ -o, --output OUTPUT Output file: By default ".rst" is appended to input.
288
+
289
+ ____
290
+
291
+ .. [1] https://meta.stackoverflow.com/questions/415293/sunsetting-jobs-developer-story
292
+ .. [2] https://docutils.sourceforge.io/docs/ref/rst/directives.html
@@ -0,0 +1 @@
1
+ __version__ = '0.1.0'
@@ -0,0 +1,5 @@
1
+ from .cli import main
2
+
3
+
4
+ if __name__ == '__main__':
5
+ main()
@@ -0,0 +1,66 @@
1
+ import argparse
2
+ import fileinput
3
+ import logging
4
+ import sys
5
+ from pathlib import Path
6
+
7
+ from . import exporters
8
+
9
+
10
+ logger = logging.getLogger(__package__)
11
+
12
+
13
+ def build_parser():
14
+ parser = argparse.ArgumentParser(
15
+ prog='historie',
16
+ description=(
17
+ 'Generate a résumé in a publish format from reStructuredText.'
18
+ ),
19
+ )
20
+ parser.add_argument(
21
+ '--logging-level',
22
+ help='Logging level. By default: %(default)s.',
23
+ default='INFO',
24
+ )
25
+ parser.add_argument(
26
+ '-f', '--format',
27
+ choices=['html', 'pdf'],
28
+ default='html',
29
+ help='Output format. By default: %(default)s.',
30
+ )
31
+ parser.add_argument(
32
+ '-o', '--output',
33
+ type=Path,
34
+ help='Output file: By default ".rst" is appended to input.',
35
+ )
36
+ parser.add_argument('input', help='Input reStructuredText file')
37
+
38
+ return parser
39
+
40
+
41
+ def main():
42
+ logging.basicConfig(
43
+ level=logging.INFO,
44
+ format='%(asctime)s %(levelname)-7s %(name)s %(message)s',
45
+ datefmt='%Y-%m-%d %H:%M:%S',
46
+ )
47
+
48
+ args = build_parser().parse_args()
49
+ logging.root.setLevel(args.logging_level)
50
+
51
+ input_path = Path(args.input)
52
+ if args.input and args.input != '-' and not input_path.exists():
53
+ logger.error('Input file not found: %s', args.input)
54
+ sys.exit(1)
55
+
56
+ if args.output:
57
+ output = args.output
58
+ elif args.input and args.input != '-':
59
+ output = f'{input_path.stem}.{args.format}'
60
+ else:
61
+ output = f'output.{args.format}'
62
+
63
+ exporter = exporters.registry[args.format]
64
+ with fileinput.input(files=args.input) as f_in:
65
+ with open(output, 'wb') as f_out:
66
+ exporter(''.join(line for line in f_in), f_out)