def delete_account(user_data):
    """Delete user transaction"""

    session = Session()
    response = None
    try:
        user = session.query(User).filter(User.email == user_data['email'] ).first()

        if user is not None:
            if __hash_pass(user_data['password']) == user.password:
                session.delete(user)
                session.commit()
                # TRANSACTION SUCCESSFUL
                response = success_response(user, 'delete')
            else:
                response = error_response(err_concept='bad_credentials')
        else:
            response = error_response(err_concept='non_user')
    
    except exc.DBAPIError as e:
        session.rollback()
        response = error_response(e.code, e.orig, 'transaction')
    
    finally:
        if response is not None:
            return response
def update_account(user_data):
    """Updating user account data"""

    update_data = user_data['new_data']
    session = Session()
    response = None

    try:
        user = session.query(User).filter(User.email == user_data['email']).first()
        
        if user is not None: 
            if __hash_pass(user_data['password']) == user.password:

                if 'email' in update_data:
                    user.email = update_data['email']
                    
                if 'username' in update_data:
                    user.username = update_data['username'] 
                    
                if 'first_name' in update_data:
                    user.first_name = update_data['first_name']
                    
                if 'last_name' in update_data:
                    user.last_name = update_data['last_name']
                    
                if 'password' in update_data:
                    user.password = __hash_pass(update_data['password'])
                    
                user.last_login = datetime.now()
                session.commit()
                # TRANSACTION SUCCESSFUL
                response = success_response(user, 'update')
            else:
                response = error_response(err_concept='bad_credentials')
        else:
            response = error_response(err_concept='non_user')     


    except exc.DBAPIError as e:
        session.rollback()
        response = error_response(e.code, e.orig, 'transaction')

    finally:
        if response is not None:
            return response
예제 #3
0
    def get(self):
        response = None

        response = product_query(request)
        
        if response is not None:
            return response

        return error_response()
예제 #4
0
def product_query(req):
    """ Product Query method. Lazy load the product
        elaborating a Query object before hitting 
        the database. """
    session = Session()
    query = None
    response = None
    page = None
    try:
        query = Query([Products.name, 
                        Products.cost, 
                        Products.total_products, 
                        Products.batch,
                        Products.expiration_date, 
                        Product_Types.name.label('type')]).join(Product_Types)

        if len(req.args) is 0:  
            pass
        else:
            if 'type' in req.args:
                product_type = req.args['type']
                query = query.filter(Product_Types.name == product_type)

            if 'lower_than' in req.args:
                cost = float(req.args['lower_than'])
                query = query.filter(Products.cost < cost)

            if 'higher_than' in req.args:
                cost = float(req.args['higher_than'])
                query = query.filter(Products.cost > cost)

            if 'name' in req.args:
                name = req.args['name']
                query = query.filter(Products.name.like(f'%{name}%'))

    except exc.DBAPIError as e:
        session.rollback()
        response = error_response(e.code, e.orig)

    else:
        if 'page' in req.args:
            page = int(req.args['page'])
            query = query.limit(10).offset( (page - 1) * 10 )
        else:
            page = 1
            query = query.limit(10).offset(0)
        
        query.session = session
        response = product_response(query, 'products_query', page)

    finally:
        return response
def signin_user(user_data):
    '''SignIn Transaction'''

    session = Session()    
    response = None
    try:
        user = session.query(User).filter( User.email==user_data['email'] ).first()

        if user is not None:
            if __hash_pass(user_data['password']) == user.password:
                user.last_login = datetime.now()
                session.commit()
                # TRANSACTION SUCCESSFUL
                response = success_response(user, 'signin')
            else:
                response = error_response(err_concept='bad_credentials')
        else:
            response = error_response(err_concept='non_user')
    except exc.DBAPIError as e:
        session.rollback()
        response = error_response(e.code, e.orig, 'transaction')
    finally:
        if response is not None:
            return response
def signup_user(user_data):
    '''SignUp Transaction'''
    
    session = Session()
    new_user = User(user_data['username'],
                    user_data['email'], 
                    __hash_pass(user_data['password']),
                    user_data['first_name'], 
                    user_data['last_name'], 
                    datetime.now())
    response = None
    try:
        session.add(new_user)
        session.commit()
        # TRANSACTION SUCCESSFUL
        response = success_response(new_user, 'signup')

    except exc.DBAPIError as e:
        print(e.args)
        session.rollback()
        response = error_response(e.code, e.orig, 'transaction')
    finally:
        return response
예제 #7
0
from sqlalchemy import create_engine, exc
from sqlalchemy.orm import sessionmaker
from services.error import error_response
from config import config

from colorama import Fore
from datetime import datetime

connection = None
try:
    engine = create_engine(config['db_url'],
                           max_overflow=5,
                           pool_recycle=3600,
                           pool_size=5)

    connection = engine.connect()

except exc.OperationalError as e:
    error_response(e.code, e.orig)

finally:
    if connection is not None:
        Session = sessionmaker(bind=engine)
        # CONNECTION ESTABLISHED
        print(Fore.GREEN, f'\n** CONNECTION ESTABLISHED - {datetime.now()}',
              Fore.RESET)