Пример #1
0
class Restlin:
    def __init__(self):
        self.__CONFIG = "../config/config.config"
        self.__APP = FastAPI()
        self.__HOST = ''
        self.__PORT = ''
        self.__LOGIN = Login(username='', password='')
        self.__APP.add_middleware(CORSMiddleware,
                                  allow_origins=["*"],
                                  allow_methods=["*"],
                                  allow_headers=["*"])
        self.__get_config()
        self.__LOGGER = Logger('restlin')

    def __get_config(self):
        with open(self.__CONFIG, 'r') as stream:
            restlin = yaml.load(stream, Loader=yaml.FullLoader)['RESTLIN']
            self.__HOST = restlin['HOST']
            self.__PORT = restlin['PORT']

    def set_login(self, login: Login):
        self.__LOGIN.username = login.username
        self.__LOGIN.password = login.password

    def get_login(self):
        return self.__LOGIN

    def start_unicorn(self):
        uvicorn.run(self.__APP,
                    host=self.__HOST,
                    port=self.__PORT,
                    log_level='error')

    def get_app(self):
        return self.__APP

    def log_info(self, msg):
        self.__LOGGER.log_info(msg)

    def log_warning(self, msg):
        self.__LOGGER.log_warning(msg)

    def log_error(self, msg):
        self.__LOGGER.log_error(msg)
Пример #2
0
class Database:
    def __init__(self, username, password):
        # READ CONFIGURATION FROM config FILE
        self.__CONFIG = "../config/config.config"

        # PARSE DATA FROM DICTIONARY
        self.__HOST = ''
        self.__DATABASE = ''
        self.__PORT = ''
        self.__get_config()

        # CREATE CONNECTION
        try:
            self.__CONNECTION = psycopg2.connect(host=self.__HOST,
                                                 port=self.__PORT,
                                                 database=self.__DATABASE,
                                                 user=username,
                                                 password=password)
        except Exception as e:
            print(f"Got exception trying to connect:\n {e}")

        # CREATE CURSOR
        self.__CURSOR = self.__CONNECTION.cursor()

        #LOGGER
        self.__LOGGER = Logger("database")
        self.__LOGGER.log_info(
            f"Established new connection to database by {username}.")

    def __get_config(self):
        with open(self.__CONFIG, 'r') as stream:
            db = yaml.load(stream, Loader=yaml.FullLoader)['DATABASE']
            self.__HOST = db['HOST']
            self.__PORT = db['PORT']
            self.__DATABASE = db['DATABASE']

    def __get_ids_for_update(self, clientname, clientnumber, servicename,
                             statusname):
        self.__CURSOR.execute(
            f"SELECT * FROM get_id_for_update('{clientname}', '{clientnumber}', '{servicename}', '{statusname}')"
        )
        return self.__CURSOR.fetchone()

    def update_client_live(self, clientname, clientnumber, servicename,
                           statusname):
        try:
            data = self.__get_ids_for_update(clientname, clientnumber,
                                             servicename, statusname)
            self.__CURSOR.execute(
                f"call update_live_status({data[0]}, {data[1]}, {data[2]})")
            self.__CONNECTION.commit()
        except Exception as e:
            self.__LOGGER.log_error(f"Update client live raised error: {e}")

    def is_admin(self):
        self.__CURSOR.execute("SELECT is_super()")
        return self.__CURSOR.fetchone()[0]

    def get_data_for_managers(self):
        try:
            self.__CURSOR.execute("SELECT * FROM managers_view")
            data = self.__CURSOR.fetchall()
            self.__CURSOR.execute("SELECT * FROM managers_live_view")
            live = self.__CURSOR.fetchall()
            self.__CURSOR.execute("SELECT service FROM services ORDER BY id")
            services = self.__CURSOR.fetchall()
            organised_data = Data()
            index = 0
            response = Response()
            response.data = []
            response.services = []
            for service in services:
                response.services.append(service[0])
            for d in data:
                organised_data.statuses = []
                organised_data.name = d[0]
                organised_data.phone = d[1]
                organised_data.adress = d[2]
                organised_data.salary = d[3]
                for s in services:
                    organised_data.statuses.append(live[index][0])
                    index += 1
                response.data.append(organised_data)
                organised_data = Data()
        except Exception as e:
            self.__LOGGER.log_error(f"Get data for managers raised error: {e}")
        return response

    def get_managers(self):
        try:
            self.__CURSOR.execute("SELECT * FROM administrator_user_view")
            response = []
            manager = Managers()
            managers = self.__CURSOR.fetchall()
            for m in managers:
                manager.username = m[0]
                response.append(manager)
                manager = Managers()
        except Exception as e:
            self.__LOGGER.log_error(f"Get managers raised error: {e}")
        return response

    def get_clients(self):
        try:
            self.__CURSOR.execute("SELECT * FROM administrator_client_view")
            clients = self.__CURSOR.fetchall()
            response = []
            client = Clients()
            for c in clients:
                client.id_ = c[0]
                client.fio = c[1]
                client.tel = c[2]
                client.job = c[3]
                client.homeadress = c[4]
                client.salary = c[5]
                client.call_back = c[6]
                response.append(client)
                client = Clients()
        except Exception as e:
            self.__LOGGER.log_error(f"Get clients raised error: {e}")

        return response

    def get_services(self):
        try:
            self.__CURSOR.execute("SELECT * FROM administrator_service_view")
            services = self.__CURSOR.fetchall()
            response = []
            service = Services()
            for s in services:
                service.id_ = s[0]
                service.service = s[1]
                service.service_description = s[2]
                response.append(service)
                service = Services()
        except Exception as e:
            self.__LOGGER.log_error(f"Get services raised error: {e}")
        return response

    def delete_client(self, id_):
        try:
            self.__CURSOR.execute(f"call delete_client({id_})")
            self.__CONNECTION.commit()
        except Exception as e:
            self.__LOGGER.log_error(f"Delete client raised error: {e}")
            return False
        return True

    def update_client(self, client: Clients):
        try:
            cli = client.dict()
            query = f"call update_client(client_id_p=>{client.id_}"
            for c in cli.keys():
                if (cli[c] and c != "id_" and c != "call_back"
                        and c != "salary"):
                    query += f",{c}_p=>'{cli[c]}'"
                elif (cli[c] and c == "salary" or c == "call_back"):
                    query += f",{c}_p=>{cli[c]}"
            query += ")"
            self.__CURSOR.execute(query)
            self.__CONNECTION.commit()
        except Exception as e:
            self.__LOGGER.log_error(f"Update client raised error: {e}")
            return False
        return True

    def insert_clients(self, client: Clients):
        try:
            self.__CURSOR.execute(
                f"call insert_client('{client.fio}','{client.tel}','{client.job}', '{client.homeadress}', '{client.salary}')"
            )
            self.__CONNECTION.commit()
        except Exception as e:
            self.__LOGGER.log_error(f"Insert client raised error: {e}")
            return False
        return True

    def delete_service(self, id_):
        try:
            self.__CURSOR.execute(f"call delete_service({id_})")
            self.__CONNECTION.commit()
        except Exception as e:
            self.__LOGGER.log_error(f"Delete service raised error: {e}")
            return False
        return True

    def insert_service(self, service: Services):
        try:
            self.__CURSOR.execute(
                f"select insert_service('{service.service}','{service.service_description}')"
            )
            self.__CONNECTION.commit()
        except Exception as e:
            self.__LOGGER.log_error(f"Insert service raised error: {e}")
            return False
        return True

    def delete_role(self, username):
        try:
            self.__CURSOR.execute(f"call delete_user('{username}')")
            self.__CONNECTION.commit()
        except Exception as e:
            self.__LOGGER.log_error(f"Delete role raised error: {e}")
            return False
        return True

    def insert_role(self, login: Login):
        try:
            self.__CURSOR.execute(
                f"call add_user('{login.username}', '{login.password}')")
            self.__CONNECTION.commit()
        except Exception as e:
            self.__LOGGER.log_error(f"Insert role raised error: {e}")
            return False
        return True