From b91b6a57208e393706332da2a808e8f6a8384595 Mon Sep 17 00:00:00 2001
From: Benjamin Bertrand <benjamin.bertrand@esss.se>
Date: Tue, 26 Sep 2017 09:41:41 +0200
Subject: [PATCH] Removed client

Client moved to its own repository (ics-inventory-client)
---
 .dockerignore          |   1 -
 README.rst             |  28 +--------
 client/environment.yml |  28 ---------
 client/pyscan.py       | 132 -----------------------------------------
 4 files changed, 1 insertion(+), 188 deletions(-)
 delete mode 100644 client/environment.yml
 delete mode 100644 client/pyscan.py

diff --git a/.dockerignore b/.dockerignore
index bfa3cc3..51c38d9 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -2,7 +2,6 @@
 **/*.swp
 **/__pycache__
 settings*.cfg
-client
 data
 postgres
 Jenkinsfile
diff --git a/README.rst b/README.rst
index 68e6022..338cf8b 100644
--- a/README.rst
+++ b/README.rst
@@ -1,7 +1,7 @@
 ICS inventory
 =============
 
-ICS inventory proof of concept.
+ICS inventory web server.
 
 
 Development
@@ -76,29 +76,3 @@ To restore the database::
 
     $ gunzip -c inventory_db.dump.g | docker run --rm --link inventory_postgres:postgres --net inventory_default
       -e PGPASSWORD="<inventory_password>" -i postgres:9.6 psql -h postgres -U inventory inventory_db
-
-
-Client
-------
-
-The `pyscan.py` client can be found under the "client" directory.
-You should first create a configuration file::
-
-    $ cat ~/.pyscan.yml
-    device: /dev/tty.usbmodem1421
-    url: http://localhost:8000/api
-    username: yourusername
-
-
-To install the requirements, conda_ is recommended::
-
-    $ cd client
-    $ conda env create -n pyscan
-    $ source activate pyscan
-
-Run::
-
-    $ python pyscan.py
-
-
-.. _conda: https://conda.io/miniconda.html
diff --git a/client/environment.yml b/client/environment.yml
deleted file mode 100644
index c9e9e1d..0000000
--- a/client/environment.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-name: pyscan
-channels: !!python/tuple
-- conda-forge
-- defaults
-dependencies:
-- conda-forge::ca-certificates=2017.4.17=0
-- conda-forge::certifi=2017.4.17=py36_0
-- conda-forge::chardet=3.0.2=py36_1
-- conda-forge::click=6.7=py36_0
-- conda-forge::idna=2.5=py36_0
-- conda-forge::ncurses=5.9=10
-- conda-forge::openssl=1.0.2l=0
-- conda-forge::pip=9.0.1=py36_0
-- conda-forge::python=3.6.1=3
-- conda-forge::pyyaml=3.12=py36_1
-- conda-forge::readline=6.2=0
-- conda-forge::requests=2.18.1=py36_0
-- conda-forge::setuptools=33.1.1=py36_0
-- conda-forge::sqlite=3.13.0=1
-- conda-forge::tk=8.5.19=1
-- conda-forge::urllib3=1.21.1=py36_0
-- conda-forge::wheel=0.29.0=py36_0
-- conda-forge::xz=5.2.2=0
-- conda-forge::yaml=0.1.6=0
-- conda-forge::zlib=1.2.11=0
-- pip:
-  - daiquiri==1.2.1
-  - pyserial==3.3
diff --git a/client/pyscan.py b/client/pyscan.py
deleted file mode 100644
index a237048..0000000
--- a/client/pyscan.py
+++ /dev/null
@@ -1,132 +0,0 @@
-import os
-import logging
-import time
-import click
-import daiquiri
-import requests
-import serial
-import yaml
-from collections import namedtuple
-
-
-QRCode = namedtuple('QRCode', 'table id name')
-daiquiri.setup(level=logging.DEBUG)
-# logger = daiquiri.getLogger(__name__)
-logger = daiquiri.getLogger('pyscan')
-
-
-def get_config(filename):
-    with open(filename) as f:
-        config = yaml.load(f)
-    return config
-
-
-def get_token(url, username):
-    password = click.prompt('Please enter your password', hide_input=True)
-    payload = {'username': username, 'password': password}
-    r = requests.post(url + '/login', json=payload)
-    r.raise_for_status()
-    logger.info(f'Successfully logged in to {url}!')
-    return r.json()['access_token']
-
-
-def save_item(url, token, item):
-    headers = {'Authorization': f'Bearer {token}'}
-    r = requests.post(url + '/items', json=item, headers=headers)
-    r.raise_for_status()
-
-
-def save_items(url, token, items):
-    for item in items:
-        try:
-            save_item(url, token, item)
-        except requests.exceptions.HTTPError as err:
-            logger.warning(err)
-        else:
-            logger.info(f'Item saved: {item}')
-
-
-class Scanner:
-
-    def __init__(self, device, url, token):
-        self.device = device
-        self.url = url
-        self.token = token
-        self.items = []
-        self._manufacturer = None
-        self._model = None
-        self._location = None
-        self._status = None
-
-    def process_qrcode(self, qrcode):
-        if qrcode.table in ('manufacturer', 'model', 'location', 'status'):
-            logger.info(f'Setting {qrcode.table} to {qrcode.name}')
-            setattr(self, '_' + qrcode.table, qrcode.name)
-        elif qrcode.table == 'action':
-            if qrcode.name == 'Discard last':
-                try:
-                    item = self.items.pop()
-                except IndexError:
-                    logger.warning('No item to remove!')
-                else:
-                    logger.info(f'Item {item} discarded')
-            elif qrcode.name == 'Clear attributes':
-                logger.info('Clearing manufacturer/model/location/status')
-                self._manufacturer = None
-                self._model = None
-                self._location = None
-                self._status = None
-            elif qrcode.name == 'Save to db':
-                logger.info('Saving all items to database')
-                save_items(self.url, self.token, self.items)
-                self.items = []
-            else:
-                logger.warning(f'Unknown action: {qrcode.name}')
-        else:
-            logger.warning(f'Unknown table: {qrcode.table}')
-
-    def process_serial_number(self, serial_number):
-        item = {'serial_number': serial_number,
-                'manufacturer': self._manufacturer,
-                'model': self._model,
-                'location': self._location,
-                'status': self._status,
-                }
-        logger.info(f'Creating item: {item}')
-        self.items.append(item)
-
-    def parse(self, line):
-        logger.debug(line)
-        try:
-            qrcode = QRCode(*line.split(','))
-        except TypeError:
-            # Assume this is a serial number
-            self.process_serial_number(line)
-        else:
-            self.process_qrcode(qrcode)
-
-    def run(self):
-        logger.debug(self.device)
-        ser = serial.Serial(self.device, 115200)
-        while (True):
-            if ser.in_waiting > 0:
-                line = ser.readline()
-                self.parse(line.decode('ascii').strip())
-            time.sleep(0.1)
-
-
-@click.command()
-@click.option('--conf', '-c', default='~/.pyscan.yml',
-              help='Configuration file [default: "~/pyscan.yml"]')
-def scan(conf):
-    filename = os.path.expanduser(conf)
-    config = get_config(filename)
-    url = config['url']
-    username = config['username']
-    token = get_token(url, username)
-    scanner = Scanner(config['device'], url, token)
-    scanner.run()
-
-
-if __name__ == '__main__':
-    scan()
-- 
GitLab