#!/usr/bin/env python import datetime import getpass import json import mimetypes import os import re import sqlite3 import unicodedata import uuid #~ import bcrypt from settings import log, template_lookup, COMPANIES, DB_SAT #~ def _get_hash(password): #~ return bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode() #~ def validate_password(hashed, password): #~ return bcrypt.hashpw(password.encode(), hashed.encode()) == hashed.encode() def get_pass(): password = getpass.getpass('Introduce la contraseña: ') pass2 = getpass.getpass('Confirma la contraseña: ') if password != pass2: msg = 'Las contraseñas son diferentes' return False, msg password = password.strip() if not password: msg = 'La contraseña es necesaria' return False, msg return True, password def get_value(arg): value = input('Introduce el {}: '.format(arg)).strip() if not value: msg = 'El {} es requerido'.format(arg) log.error(msg) return '' return value def _get_args(rfc): con = sqlite3.connect(COMPANIES) cursor = con.cursor() sql = "SELECT con FROM names WHERE rfc=?" cursor.execute(sql, (rfc,)) values = cursor.fetchone() if values is None: msg = 'No se encontró el RFC' log.error(msg) return '' cursor.close() con.close() return values[0] def get_con(rfc=''): if not rfc: rfc = get_value('RFC').upper() if not rfc: return False args = _get_args(rfc.upper()) if not args: return False return loads(args) def get_rfcs(): con = sqlite3.connect(COMPANIES) cursor = con.cursor() sql = "SELECT * FROM names" cursor.execute(sql) values = cursor.fetchall() cursor.close() con.close() return values def get_sat_key(table, key): con = sqlite3.connect(DB_SAT) cursor = con.cursor() sql = 'SELECT key, description FROM {} WHERE key=?'.format(table) cursor.execute(sql, (key,)) data = cursor.fetchone() cursor.close() con.close() if data is None: return {'ok': False, 'text': 'No se encontró la clave'} return {'ok': True, 'text': data[1]} def now(): return datetime.datetime.now() def get_token(): return _get_hash(uuid.uuid4().hex) def get_mimetype(path): mt = mimetypes.guess_type(path)[0] return mt or 'application/octet-stream' def is_file(path): return os.path.isfile(path) def get_stream(path): return get_file(path), get_size(path) def get_file(path): return open(path, 'rb') def get_size(path): return os.path.getsize(path) def get_template(name, data={}): #~ print ('NAME', name, data) template = template_lookup.get_template(name) return template.render(**data) def dumps(data): return json.dumps(data, default=str) def loads(data): return json.loads(data) def clean(values): for k, v in values.items(): if isinstance(v, str): values[k] = v.strip() return values def parse_con(values): data = values.split('|') try: con = {'type': data[0]} if con['type'] == 'sqlite': con['name'] = data[1] else: if data[1]: con['host'] = data[1] if data[2]: con['port'] = data[2] con['name'] = data[3] con['user'] = data[4] con['password'] = data[5] return con except IndexError: return {} def spaces(value): return ' '.join(value.split()) def to_slug(string): value = (unicodedata.normalize('NFKD', string) .encode('ascii', 'ignore') .decode('ascii').lower()) return value