Skip to main content

Lightweight framework for transforming input to output

Project description

beelzebub

Beelzebub is a lightweight framework to transform input to output. The base classes aren't meant to be used directly, rather they establish the interfaces of the framework, and provide a basis with which to derive classes for defining a particular transformation workflow.

A workflow consists of a reader class, a writer class, and a processor class. The workflow class instantiates one of each of these classes, and then executes the workflow of reading input from a given source via the reader class, writing output to a given sink via the writer class, and the processor class calls the reader, processes the input, and passes this to the writer.

Both the reader and writer classes are based on a common context manager class. In particular, the open() method can read/write to one of a set of supported iostream types. The iotype must be one of ['file','url','str']. A TypeError exception will be raised otherwise.

The workflow class can optionally set up logging for the workflow (based on the existence of a logger section in the optional configuration dict), and then calls the run() method, passing the source and sink.

As mentioned, an optional configuration dict can be passed when instantiating the workflow object. As a particular workflow will have specific reader, writer and processor classes, the configuration items for each of these components is arbitrary, suited to the particular workflow. However, the framework will look for a toplevel key called reader to pass to the reader class, writer to pass to the writer class, and processor to pass to the processor class. In addition, if a logger key exists, then this will be used to configure logging, via a call to logging.config.dictConfig(conf['logger']).

One of the main uses of the configuration is to specify the iotype for the reader and writer. For example, if the input is read from a file, but the output is to be written to a string, then the configuration should be something like the following:

conf = {'reader': {'iotype': 'file'}, 'writer': {'iotype': 'str'}}
in_file = sys.argv[1]
out_file = None

x = BaseWorkflow(conf=conf)
x.run(in_file, out_file)
print(x.writer.output)

Note that if the output is to be written to a string, then the sink argument (here, out_file) to run() is redundant, and can be set to None. In this case, access the output string via the workflow's writer's output attribute.

If a binary file is to be read or written, then mode should be specified in the corresponding part of the configuration and include the 'b' flag. For example, for reading a binary file from a web server and writing to a local copy:

conf = {
    'reader': {'iotype': 'url', 'mode': 'rb'},
    'writer': {'iotype': 'file', 'mode': 'wb'},
    'logger': {'version': 1, 'loggers': {'beelzebub.base': {'level': 'DEBUG'}}}
}
in_file = 'http://web.server/file.dat'
out_file = './file-copy.dat'

x = BaseWorkflow(conf=conf)
x.run(in_file, out_file)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

beelzebub-1.0.0.tar.gz (9.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

beelzebub-1.0.0-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

File details

Details for the file beelzebub-1.0.0.tar.gz.

File metadata

  • Download URL: beelzebub-1.0.0.tar.gz
  • Upload date:
  • Size: 9.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.2 CPython/3.8.10 Linux/5.15.0-124-generic

File hashes

Hashes for beelzebub-1.0.0.tar.gz
Algorithm Hash digest
SHA256 3f94936286fb32a89d37e1e6f4e22ce63bf6f2c1d85b941f0f7dc9d18860b98a
MD5 a05b00a7e2ee1ab4d59528eb1163ffd5
BLAKE2b-256 a53f1ea6d5aad76962ac6634c9325ffea7e39596252a7ea00d991c3218dd9dd7

See more details on using hashes here.

File details

Details for the file beelzebub-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: beelzebub-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 10.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.2 CPython/3.8.10 Linux/5.15.0-124-generic

File hashes

Hashes for beelzebub-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d9cabfb93be206eea30b1c6efc95dd597dd77216d3e28ebf9d1770ee0123c94f
MD5 c44f843505cfe64eb45f963ed74e205b
BLAKE2b-256 7be91e050d3a79d234ecb22c4f5f29fd1b26d5a8d18049ed4cc17778862608c3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page