Skip to main content

Scaffolding for Brewblox backend services

Project description

Scaffolding for Brewblox service applications

In order to reduce code duplication between services, generic functionality is implemented here.

For an example on how to implement your own service based on brewblox-service, see https://github.com/brewblox/brewblox-boilerplate.

brewblox-service can technically be launched as a standalone application, but will not be very useful.

brewblox_service

Small generic tools are defined here.

brewblox_logger can be used for creating module-specific loggers. It is not required, but will play a bit nicer with default formatting of the log.

Example:

from brewblox_service import brewblox_logger

LOGGER = brewblox_logger(__name__)
LOGGER.info('hello')

service.py

Parses commandline arguments, creates an aiohttp app, and runs it.

The shortest implementation is:

app = service.create_app(default_name='my_service')
service.furnish(app)
service.run(app)

This will get you a working web application, but it will only support the /_service/status health check endpoint.

Applications can configure their own features, and add new commandline arguments.

Example:

# Separately creating the parser allows adding arguments to the default set
parser = service.create_parser(default_name='my_service')
parser.add_argument('--my-arg')

# Now create the app
app = service.create_app(parser=create_parser())

# Add features for this service
device.setup(app)
api.setup(app)

# Furnish and run
service.furnish(app)
service.run(app)

features.py

Many service features are application-scoped. Their lifecycle should span multiple requests, either because they are not request-driven, or because they manage asynchronous I/O operations (such as listening to AMQP messages).

The ServiceFeature class offers an abstract base class for this behavior. Implementing classes should define startup(app) and shutdown(app) functions, and those will be automatically called when the application starts up and shuts down.

Both startup() and shutdown() are called in an async context, making them the async counterparts of __init__() and __del__() functions.

Features must be constructed after the app is created, but before it starts running. (service.create_app() and service.run(app))

The add() and get() functions make it easy to centrally declare a feature, and then use it in any function that has a reference to the aiohttp app.

mqtt.py

The replacement for the AMQP-based events module.

The major advantages over AMQP is that the protocol is simpler, and supports websocket transport. This allows for it to be used outside a Brewblox network.

Messages have a /-separated topic and a JSON-serialized body.

To publish data, all you need is the publish(topic, message) function.

To listen to incoming messages, you can combine subscribe(topic) with one or more calls to listen(topic, callback). The subscribe/listen functions allow for + and # wildcards to be used.

For a detailed explanation of how to use MQTT topics, see http://www.steves-internet-guide.com/understanding-mqtt-topics/.

For the Brewblox spec on how and where to publish data, see https://brewblox.netlify.app/dev/reference/event_logging.html.

Includes top-level convenience functions for publish(topic, message), listen(topic, callback) and subscribe(topic).

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

brewblox-service-0.31.0.tar.gz (27.9 kB view details)

Uploaded Source

Built Distribution

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

brewblox_service-0.31.0-py3-none-any.whl (30.7 kB view details)

Uploaded Python 3

File details

Details for the file brewblox-service-0.31.0.tar.gz.

File metadata

  • Download URL: brewblox-service-0.31.0.tar.gz
  • Upload date:
  • Size: 27.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.9

File hashes

Hashes for brewblox-service-0.31.0.tar.gz
Algorithm Hash digest
SHA256 3d649326948c6ba698127ba92e80621b9e7f1a63f4a0cd01ece9d6f22336034d
MD5 7ee11d9f70f3dd098f8acc3ce8d15b96
BLAKE2b-256 7a631a0f148243b1814b39cb64e88ec663b0e770aaea95b7708466406ddd8584

See more details on using hashes here.

File details

Details for the file brewblox_service-0.31.0-py3-none-any.whl.

File metadata

  • Download URL: brewblox_service-0.31.0-py3-none-any.whl
  • Upload date:
  • Size: 30.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.9

File hashes

Hashes for brewblox_service-0.31.0-py3-none-any.whl
Algorithm Hash digest
SHA256 98035251c106a59d6195458251825498633c3307c5cbcec396686e16f431c8ba
MD5 3e3187a82359dc78d1fb462a6dcb3a2c
BLAKE2b-256 c5818632b32678967b8c52b1acff6e133e6117d9c2a74c55d3a1b7b81bb26061

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