Package: zsl
ZSL - z' service layerZSL is a Python micro-framework utilizingdependency injectionfor creating service applications on top ofFlaskweb framework andGearmanjob server orCelerytask queue.MotivationWe 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.DisclaimerAt 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.InstallationWe recommend to install it troughPyPiand run it in
avirtualenvordockercontainer.$pipinstallzslGetting startedFor 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$exportZSL_SETTINGS=`pwd`/settings/app_settings.cfg# settings/app_settings.cfgTASKS=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.pyclassHelloWorldTask:defperform(self,data):return"Hello World"$python-mzslweb
*Runningonhttp://127.0.0.1:5000/(PressCTRL+Ctoquit)$curlhttp://localhost:5000/task/hello/hello_world_task
Helloworld!DeployingDeploy will happen upon pushing a new tag to Gitlab.Creating new tag/versionUsebump2versionto 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 usessemver. Starts with number.PipelineCurrent pipeline tries to copy previous Travis runs. It runs tox target seperately and on a tag push will create deploy.Tox Docker imageGitlab pipeline runs inside a docker image which is defined indocker/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 tohttps://gitlab.atteq.com/atteq/z-service-layer/zsl/-/settings/access_tokensand create a token to read/write to registry. Then rundocker login registry.gitlab.atteq.com:443To build/push the image:Build image locally.docker build -t zsl/tox-env -f docker/Dockerfile.tox .Tag image.docker tag zsl/tox-env registry.gitlab.atteq.com:443/atteq/z-service-layer/zsl/tox-env:latestPush image.docker push registry.gitlab.atteq.com:443/atteq/z-service-layer/zsl/tox-env:latestUpdate image hash in.gitlab-ci.yml. (copy from build output ordocker images --digests).