Skip to main content

zsl application framework for web based services

Project description

Build Status Coverage Status

ZSL - z' service layer

ZSL is a Python micro-framework utilizing dependency injection for creating service applications on top of Flask web framework and Gearman job server or Celery task queue.

Motivation

We developed ZSL to modernize our workflow with maintaining our clients' mostly web applications written in various older CMS solutions without the need to rewrite them significantly. With ZSL we can write our new components in Python, with one coherent shared codebase, accessible trough Gearman or JavaScript. Also the same code can be called through various endpoints - web or task queue nowadays.

Disclaimer

At current stage this should be taken as proof of concept. We don't recommend to run in any production except ours. It is too rigid, with minimum test coverage and lots of bad code practices. We open sourced it as way of motivation for us to make it better.

Installation

We recommend to install it trough PyPi and run it in a virtualenv or docker container.

$ pip install zsl

Getting started

For now it is a bit cumbersome to get it running. It has inherited settings trough ENV variables from Flask and has a rigid directory structure like django apps. On top of that, it needs a database and Redis.

The minimum application layout has to contain:

.
├── app                    # application sources
│   ├── __init__.py
│   └── tasks              # public tasks
│       ├── hello.py
│       └── __init__.py
├── settings               # settings
│   ├── app_settings.cfg
│   ├── default_settings.py
│   └── __init__.py
└── tests
$ export ZSL_SETTINGS=`pwd`/settings/app_settings.cfg
# settings/app_settings.cfg

TASKS = TaskConfiguration()\
        .create_namespace('task')\
            .add_packages(['app.tasks'])\
            .get_configuration()
RESOURCE_PACKAGE = ()
DATABASE_URI = 'postgresql://postgres:postgres@localhost/postgres'
DATABASE_ENGINE_PROPS = {}
SERVICE_INJECTION = ()
REDIS = {
    'host': 'localhost',
    'port': 6379,
    'db': 0
}
RELOAD = True
# hello.py

class HelloWorldTask:
    def perform(self, data):
        return "Hello World"
$ python -m zsl web
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
$ curl http://localhost:5000/task/hello/hello_world_task
Hello world!

Deploying

Deploy will happen upon pushing a new tag to Gitlab.

Creating new tag/version

Use bump2version to update version in config files. It will also create commit and new tag.

$ bumpversion --new-version ${VERSION} {major|minor|patch} --tag-name ${VERSION}

Version name uses semver. Starts with number.

Pipeline

Current pipeline tries to copy previous Travis runs. It runs tox target seperately and on a tag push will create deploy.

Tox Docker image

Gitlab pipeline runs inside a docker image which is defined in docker/Dockerfile.tox. Currently we manually configure, build and push it to gitlab container registry. So to update the container follow this steps.

When pushing for the first time run, you have to create an access token and login to atteq gitlab container registry. Go to https://gitlab.atteq.com/atteq/z-service-layer/zsl/-/settings/access_tokens and create a token to read/write to registry. Then run

docker login registry.gitlab.atteq.com:443

To build/push the image:

  1. Build image locally.

    docker build -t zsl/tox-env -f docker/Dockerfile.tox .

  2. Tag image.

    docker tag zsl/tox-env registry.gitlab.atteq.com:443/atteq/z-service-layer/zsl/tox-env:latest

  3. Push image.

    docker push registry.gitlab.atteq.com:443/atteq/z-service-layer/zsl/tox-env:latest

  4. Update image hash in .gitlab-ci.yml. (copy from build output or docker images --digests).

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

zsl-1.5.0.tar.gz (121.3 kB view details)

Uploaded Source

Built Distribution

zsl-1.5.0-py2.py3-none-any.whl (125.1 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file zsl-1.5.0.tar.gz.

File metadata

  • Download URL: zsl-1.5.0.tar.gz
  • Upload date:
  • Size: 121.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.6

File hashes

Hashes for zsl-1.5.0.tar.gz
Algorithm Hash digest
SHA256 d1eac2c2a21ed5f40447390aaafbe6d80585cf11c8fd8be2902cfadfaa864f14
MD5 aa49adac7c4d269c96e4808c2810825a
BLAKE2b-256 485f790dc565a985b330966f6f61142d17c3bf253f40ecb2b9a4ec513f2fa9cd

See more details on using hashes here.

File details

Details for the file zsl-1.5.0-py2.py3-none-any.whl.

File metadata

  • Download URL: zsl-1.5.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 125.1 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.6

File hashes

Hashes for zsl-1.5.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 f94a54231ddc91ab0ffae46c5125380659d4b028ce81fa52d2f90659bc09767c
MD5 6124a50a00776943943f36a40ee574a1
BLAKE2b-256 dc1ae755a5734824187502a7d8c590503f80d6d5e288d84ed97a3008ac30d3be

See more details on using hashes here.

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