Skip to main content

Meta inquiry middleware for distributed systems

Project description


pypi-pyversions pypi-v pypi-wheel pypi-status code-style

jomiel is the meta inquiry middleware for distributed systems. It returns data about content on video-sharing websites (e.g. YouTube). Two technologies form the basis for jomiel:

  • ZeroMQ (also known as ØMQ, 0MQ, or zmq) looks like an embeddable networking library but acts like a concurrency framework

  • Protocol Buffers is a language-neutral, platform-neutral, extensible mechanism for serializing structured data

jomiel is a spiritual successor to (now defunct) libquvi.

Example: jomiel and yomiel working together


  • Language and platform neutral. It communicates using Protocol Buffers and ZeroMQ. There are plenty of client demos. Pick your favorite language.

  • Secure. It can authenticate and encrypt connections using CURVE and SSH.

  • Extensible. It has a plugin architecture.

Getting started


Install from PyPI:

pip install jomiel

Install from the repository, e.g. for development:

git clone
cd jomiel
pip install -e .  # Install a project in editable mode

Or, if you'd rather not install in "editable mode":

pip install git+

Try sending inquiries to jomiel with:

  • the client demos written in different modern programming languages
  • yomiel - the pretty printer for jomiel messages

Be sure to check out:


usage: jomiel [-h] [--version] [-v] [--config-file FILE] [-D] [-E] [-P]
              [--logger-config FILE] [-L] [--logger-idents-verbose] [-l IDENT]
              [-p] [-m] [--debug-sensitive] [-F] [--http-user-agent STRING]
              [--http-timeout TIME] [--http-debug] [-I] [-r ADDR] [-d ADDR]
              [-w [1-64]] [--curve-enable] [--curve-public-key-dir DIR]
              [--curve-server-key-file FILE] [--curve-domain DOMAIN]
              [--curve-allow ADDR]

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  -v, --version-long    show version information about program's environment
                        and exit (default: False)
  --config-file FILE    Read configuration from the specified file [env var:
                        CONFIG_FILE] (default: None)
  -D, --print-config    Show the configuration values and exit (default:
  -E, --report-config   Report keys, values and where they were set (default:
  -P, --config-paths    Print default configuration file paths (default:
  -p, --plugin-list     Display the found plugins and exit (default: False)

  --logger-config FILE  Logger configuration file to read [env var:
                        LOGGER_CONFIG] (default: None)
  -L, --logger-idents   Print logger identities and exit (default: False)
                        Print logger identities in detail, use together with
                        --logger-idents (default: False)
  -l IDENT, --logger-ident IDENT
                        Use the logger identity [env var: LOGGER_IDENT]
                        (default: default)

  -m, --debug-minify-json
                        Minify JSON messages in the logger (default: False)
  --debug-sensitive     Log sensitive data, e.g. input URIs, serialized
                        messages (default: False)

  -F, --http-allow-redirects
                        Follow HTTP redirections (default: False)
  --http-user-agent STRING
                        Identify as STRING to the HTTP server (default:
  --http-timeout TIME   Time in seconds allowed for the connection to the HTTP
                        server to take (default: 5)
  --http-debug          Enable verbose HTTP output (default: False)

  -I, --broker-input-allow-any
                        Disable input URI validation (default: False)
  -r ADDR, --broker-router-endpoint ADDR
                        Bind the frontend (router) socket to the local
                        endpoint [env var: BROKER_ROUTER_ENDPOINT] (default:
  -d ADDR, --broker-dealer-endpoint ADDR
                        Bind the backend (dealer) socket to the local endpoint
                        [env var: BROKER_DEALER_ENDPOINT] (default:
  -w [1-64], --broker-worker-threads [1-64]
                        Number of worker threads in the pool waiting for
                        client connections (default: 5)

  --curve-enable        Enable CURVE support (default: False)
  --curve-public-key-dir DIR
                        Directory that holds all public client key files
                        (default: .curve/)
  --curve-server-key-file FILE
                        Secret CURVE key file for the server (default:
  --curve-domain DOMAIN
                        Configure CURVE authentication for a given domain
                        (default: *)
  --curve-allow ADDR    Allow (whitelist IP addresses) (default:

 If an arg is specified in more than one place, then commandline values
override environment variables which override defaults.

Website coverage

jomiel --plugin-list  # The current coverage is very limited

See the src/jomiel/plugin/ directory for the existing plugins. The plugin architecture is extensible. When you are contributing new plugins, make sure that the website is not:

  • dedicated to copyright infringement (whether they host the media or only link to it)

  • NSFW


jomiel is licensed under the Apache License version 2.0.


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

jomiel-1.2.0.tar.gz (39.6 kB view hashes)

Uploaded source

Built Distribution

jomiel-1.2.0-py3-none-any.whl (35.0 kB view hashes)

Uploaded py3

Supported by

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