Skip to content
Snippets Groups Projects
Commit 18d3dd74 authored by Thomas Bock's avatar Thomas Bock :speech_balloon:
Browse files

init co

parents
Branches
No related tags found
No related merge requests found
*.pyc
dist/
/*.egg-info
.coverage
share
lib
lib64
pyvenv.cfg
bin
.vscode
pip-selfcheck.json
*.pdf
*.gz
*.aux
*.out
*.fdb_latexmk
*.log
*.fls
*.xml
tmp/ks-*
vl-dcc
======
DCC generation for the vacumm laboratory.
api
===
vl-dcc/<cer_doc_id>
--------------------
returns a xml version of a certificate-document.
.. code ::
curl http://localhost:5005/vl-dcc/cer-2019-75046 > dcc-2019-75046.xml
update (POST)
-------------
http://server:port/update
pulls the latest version from origin master
version (GET)
-------------
http://server:port/version
virtual env
===========
.. code-block:: shell
> python3 -m venv /path/to/vl-dcc
> cd /path/to/vl-dcc
> source bin/activate
install dependencies
====================
.. code-block:: shell
> cd /path/to/vl-dcc
> source bin/activate
> pip install -e .
run server
==========
.. code-block:: shell
> cd /path/to/vl-dcc
> ./server
install daemon and start
========================
.. code-block:: shell
> cd /usr/local/share/vl-dcc # working directory
> sudo nobody
> git clone git@a75436.berlin.ptb.de:vaclab/vl-dcc.git
> cd vl-dcc
>
> ## follow instructions of chapter --> virtual env
> ## follow instructions of chapter --> install dependencies
>
> sudo systemctl daemon-reload # if already exist
> sudo systemctl link $PWD/vl-dcc.service # make permanent
> sudo systemctl restart vl-dcc.service
> sudo systemctl status vl-dcc.service # running?
> journalctl -f --unit vl-dcc.service # run-time check
{
"git":{
"dir": "."
},
"db":{
"host": "a73434.berlin.ptb.de",
"port": 5984,
"database": "vl_db"
},
"server": {
"host":"0.0.0.0",
"port":5005
},
"views":{
"cal_docs":"share/Cert"
},
"templates":{
"xml":"xml",
"latex":"latex"
}
}
server 0 → 100755
#!/bin/sh
export FLASK_APP=bur.py
export FLASK_DEBUG=1
export FLASK_ENV=development
python server.py
import json
import datetime
import re
from flask import Flask, request, jsonify, send_from_directory
from flask_cors import CORS
from vl_dcc.db import DB
from vl_dcc.trans import Trans
import vl_dcc.utils as utils
config = utils.get_config_dict()
git_cmd = utils.git_cmd(config)
app = Flask(__name__, static_url_path='')
CORS(app)
db = DB(config, app)
trans = Trans(config, app, db)
@app.route('/vl-dcc/<cer_doc_id>', methods=['GET'])
def to_xml(cer_doc_id):
if cer_doc_id:
cert_doc = db.get_doc(cer_doc_id)
if not 'error' in cert_doc:
return trans.cert_to_xml(cert_doc)
else:
return utils.res_json(cert_doc)
else:
return utils.return_error("no document id given")
@app.route('/update', methods=['post'])
def update():
app.logger.debug('hit update')
req = request.get_json()
git_cmd.pull()
app.logger.info("pulled {log}".format(log=git_cmd.log("-n 1")))
return jsonify({'ok':True})
@app.route('/version', methods=['get'])
def version():
app.logger.debug('hit version')
return jsonify({'version': git_cmd.describe()})
if __name__ == '__main__':
app.run(host=config['server']['host'], port=config['server']['port'])
\ No newline at end of file
setup.py 0 → 100644
"""setup.py based on
https://github.com/pypa/sampleproject
"""
from setuptools import setup, find_packages
from codecs import open
from os import path
here = path.abspath(path.dirname(__file__))
with open(path.join(here, 'README.rst'), encoding='utf-8') as f:
long_description = f.read()
setup(
name='vl-dcc',
version='0.1.0',
description='DCC generation for the vacuum laboratory.',
long_description=long_description,
url='https://a75436.berlin.ptb.de/vaclab/vl-dcc',
author='Thomas Bock',
author_email='thomas.bock@ptb.de',
license='MIT',
classifiers=[
'Development Status :: 3 - Alpha',
'Intended Audience :: vaclab team',
'License :: OSI Approved :: MIT License',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
],
keywords='Vacuum Laboratory, Calibration, Certificate',
packages=find_packages(exclude=['docs',
'tests',
'test_doc',
'htmlcov'
]),
install_requires=['couchdb',
'flask',
'flask-cors',
'GitPython',
'requests',
],
extras_require={
'dev': ['sphinx',
'sphinx_rtd_theme',
'autopep8',
],
},
package_data={
'sample': ['test_doc'],
},
#entry_points={
# 'console_scripts': [
# 'start=',
# ],
#},
)
[Unit]
Description=The vl-dcc daemon.
After=network.target
[Service]
User=nobody
Type=simple
StandardOutput=null
StandardError=null
Restart=no
WorkingDirectory=/usr/local/share/vl-dcc
ExecStart=/bin/bash -l -c 'source bin/activate;./server'
[Install]
WantedBy=multi-user.target
import sys
import json
import couchdb
class DB:
def __init__(self, config, app):
url = 'http://{}:{}/'.format(config['db']['host'], config['db']['port'])
srv = couchdb.Server(url)
self.db = srv[config['db']['database']]
self.config = config
def get_doc(self, id):
try:
return self.db[id]
except:
return {'error':'Document not found'}
def save_doc(self, new_doc):
old_doc = self.get_doc(new_doc["_id"])
if not 'error' in old_doc:
new_doc["_rev"] = old_doc["_rev"]
res = self.db.save(new_doc)
return res
\ No newline at end of file
from flask import Flask, render_template
import vl_dcc.utils as utils
import os
class Trans:
gas_trans = {
"N2":{
"de" :"Stickstoff",
"en": "nitrogen",
"mol_weigth":"28.013"
},
"He":{
"de":"Helium",
"en": "helium"
},
"Ar":{
"de":"Argon",
"en":"argon"
}
}
meas_type_trans = {
"expansion":{
"de" :", Kalibrierung nach dem statischen Verfahren",
"en": ", static expansion method"
},
"se2_expansion":{
"de" :"",
"en": ""
},
"se2_expansion_direct":{
"de" :"",
"en": ""
},
"se2_expansion":{
"de" :"",
"en": ""
},
"direct":{
"de": ", Kalibrierung durch direkten Vergleich",
"en": ", direct comparison method"
},
"pressure_balance":{
"de": ", Kalibrierung durch Vergleich mit Druckwaage",
"en": ", comparison with pressure balance"
},
"rotary_piston_gauge":{
"de": ", Kalibrierung durch Vergleich mit Drehkolbenmanometer",
"en": ", comparison with rotary piston gauge"
}
}
def __init__(self, config, app, db):
self.xml_path = config['templates']['xml']
def cert_to_xml(self, cert_doc):
dcc_template = utils.path_file(path=self.xml_path, file='dcc.xml')
doc = cert_doc['Certificate']
doc["Helper"] = {"gas_trans":self.gas_trans, "meas_type_trans":self.meas_type_trans}
return render_template(dcc_template, doc=doc)
import json
import git
import requests
import datetime
from flask import jsonify, Response
def get_config_dict():
## sollte vielleicht doch xml-datei werden
with open('./config.json') as json_config_file:
config = json.load(json_config_file)
return config
def path_file(path, file):
return "{path}/{file}".format(path=path, file=file)
def git_cmd(config):
return git.cmd.Git(config['git']['dir'])
def return_ok():
return res_json({'ok':True})
def return_error(error):
return res_json({'error':True, 'reason':error})
def return_version(version):
return res_json({'version':version})
def res_json(body_dict):
return jsonify(body_dict)
def xml_response(xml_str):
return Response(xml_str, content_type='text/xml; charset=utf-8')
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment