def create_data(num, model_name):
    """Создает num записей для model модели."""
    i = 0
    model = Session.query(metadata.tables[model_name])
    while i < num:
        object_data = {}
        for column in model.column_descriptions:
            if isinstance(column['type'], Integer) and column['name'] != 'id':
                if fk := column['expr'].foreign_keys:
                    t_model, t_pk = next(iter(fk)).target_fullname.split('.')
                    t_obj = Session.query(metadata.tables[t_model]).first()
                    object_data[column['name']] = getattr(t_obj, t_pk)
                else:
                    object_data[column['name']] = random.randint
            if isinstance(column['type'], String):
                if column['name'] == 'email':
                    object_data[column['name']] = fake.email()
                else:
                    object_data[column['name']] = fake.name()
            if isinstance(column['type'], Date):
                object_data[column['name']] = fake.date()
            if isinstance(column['type'], DateTime):
                object_data[column['name']] = fake.date_time()

        insert_query = metadata.tables[model_name].insert().values(
            **object_data)
        Session.execute(insert_query)
        Session.commit()
        i += 1
 def to_json(self):
     json = super().to_json()
     if not isinstance(self.qs, list):
         qoods_qs = Session.query(
             metadata.tables['goods']).filter_by(store_id=self.id).all()
         json['goods'] = GoodsSerializer(qoods_qs).to_json()
     return json
Beispiel #3
0
async def public_list(request):
    """Публичный метод просмотра детальной информации списка обёектов модели."""
    model = request.match_info['model']
    qs = Session.query(metadata.tables[model]).all()
    json_list = get_serializer(model)(
        qs).to_json()  # [to_json(obj._asdict()) for obj in qs]
    return web.Response(body=json.dumps(json_list),
                        content_type='application/json')
Beispiel #4
0
async def public_detail(request):
    """Публичный метод просмотра детальной информации объекта модели."""
    model = request.match_info['model']
    object_id = request.match_info['id']
    qs = Session.query(metadata.tables[model]).filter_by(id=object_id).first()
    json_object = get_serializer(model)(qs, id=object_id).to_json()
    return web.Response(body=json.dumps(json_object),
                        content_type='application/json')
Beispiel #5
0
def registerHouse():
    get_lang(request)
    #generate form data
    form = RegisterForm(request.form)
    if request.method == 'POST':
        #store form data
        address = form.address.data
        city = form.city.data
        state = form.state.data
        zip = form.zip.data

        #generate lat/long from address
        results = Geocoder.geocode(address)
        result = results[0].coordinates
        lat = result[0]
        long = result[1]

        #create new db session
        sess = Session()

        #get user id for database relations
        account_id = session['id']

        #create new home: A new home is identified by street. city, zip, state, lat/long
        new_home = Home(account_id=account_id,
                        street_address=address,
                        city=city,
                        state=state,
                        zip_code=zip,
                        latitude=lat,
                        longitude=long)

        #Does the address already exist
        match = sess.query(Home.street_address)\
              .filter(Home.street_address==address)\
              .all()

        #If the address is unique the home is added
        if not match:
            print(f'Added: {new_home}')
            #add entry to database for home
            sess.add(new_home)

            #save changes
            sess.commit()

        #the address is not unique
        else:
            #error message
            flash("Address already registered")

            #return to registration page
            return render_template('registerHouse.html', form=form)

        #close connection
        sess.close()
        return redirect(url_for('dashboard'))
    return render_template('registerHouse.html', form=form)
Beispiel #6
0
def get_books():
    try:
        result = []
        sess = Session()
        book = sess.query(Book).order_by(Book.name).all()
        result = [a.to_dict() for a in book]
    except Exception as e:
        result = []
    return result
Beispiel #7
0
async def handler(request):
    """Метод возрващает информмацию о пользователе и историю его заказов."""
    user = request.app['user']
    user_info = get_serializer('users')(user).to_json()
    orders_qs = Session.query(
        metadata.tables['orders']).filter_by(user_id=user.id).all()
    user_info['orders'] = get_serializer('orders')(orders_qs).to_json()
    return web.Response(body=json.dumps(user_info),
                        content_type='application/json')
Beispiel #8
0
def get_users():
    try:
        result = []
        sess = Session()
        user = sess.query(User).order_by(User.name).all()
        result = [a.to_dict() for a in user]
    except Exception as e:
        result = []
    return result
Beispiel #9
0
 async def wrapped(request, *args, **kwargs):
     app = request.app
     router = app.router
     session = await get_session(request)
     if 'user_id' not in session:
         return web.HTTPFound(router['login'].url_for())
     user_id = session['user_id']
     user = Session.query(metadata.tables['users']).filter_by(id=user_id)
     app['user'] = user[0]
     return await fn(request, *args, **kwargs)
Beispiel #10
0
async def login(request):
    """Метод авторизации пользователя."""
    router = request.app.router
    form = await request.json()
    try:
        user = Session.query(metadata.tables['users']).filter_by(**form)
        session = await new_session(request)
        session['user_id'] = user[0].id
        return web.HTTPFound(router['restricted'].url_for())
    except ValueError or KeyError:
        return web.Response(text='No such user', status=HTTPStatus.FORBIDDEN)
Beispiel #11
0
def get_user(user_id):
    try:
        sess = Session()
        user = sess.query(User).get(user_id)
        if not user:
            result = []
        else:
            result = [user.to_dict()]
    except Exception as e:
        result = []
    return result
Beispiel #12
0
def cron_update_db():
	session = Session()
	items = session.query(Item).all()

	for item in items:
		url = item.url
		response = get_amazon_price(url)
		currentPrice = response.get("price", None)

		if currentPrice:
			if currentPrice <= item.price:
				transactions = session.query(Transaction) \
					.filter(Transaction.requested_price >= currentPrice) \
					.all()

				send_emails(transactions)
			item.price = currentPrice


	session.commit()
Beispiel #13
0
def delete_user(user_id):
    try:
        result = False
        sess = Session()
        user = sess.query(User).get(user_id)
        if user:
            sess.delete(user)
            sess.commit()
            result = True
    except Exception:
        result = False
    return result
Beispiel #14
0
def delete_book(book_id):
    try:
        result = False
        sess = Session()
        book = sess.query(Book).get(book_id)
        if book:
            sess.delete(book)
            sess.commit()
            result = True
    except Exception:
        result = False
    return result
Beispiel #15
0
def post_new_class(new_class_name):
    session = Session()
    new_class_obj = ClassName(class_name=new_class_name)
    session.add(new_class_obj)
    session.commit()
    archives = session.query(Archive).filter_by(class_id=new_class_obj.id)
    [session.delete(archive) for archive in archives]
    session.commit()
    session.close()

    response = create_schedules_data()

    return response
Beispiel #16
0
def login():
    get_lang(request)

    #Login Request
    if request.method == 'POST':
        #Get form fields
        email = request.form['email']
        password_candidate = request.form['password']

        #create db session
        sess = Session()

        #Query database for email and password
        userMatch = sess.query(User.email)\
              .filter(User.email==email)\
        .filter(User.password_hash==password_candidate)\
              .all()

        name = sess.query(User.name).filter(User.email == email).first()
        id = sess.query(User.id).filter(User.email == email).first()

        #If the user and password match
        if userMatch:
            #save session data
            session['logged_in'] = True
            session['id'] = id
            session['name'] = name[0]
            session['id'] = id

            flash(gettext("You are now logged in"), gettext("success"))
            return redirect(url_for('index'))

        #No entry for user/password pair
        else:
            error = gettext("Invalid Login")
            return render_template('login.html', error=error)

    #return to login page
    return render_template('login.html')
Beispiel #17
0
 def save_news(self, news):
     session = Session()
     q = session.query(News)
     for n in news:
         published = n['published_parsed']
         date = datetime.date(published[0], published[1], published[2])
         link = n['link']
         title = n['title']
         existing_news = q.filter(News.link == link).all()
         if not existing_news:
             news = News(date=date, title=title, summary=n['summary'],
                         link=link)
             session.add(news)
     session.commit()
Beispiel #18
0
def update_book(book_id, **data):
    try:
        sess = Session()
        book = sess.query(Book).get(book_id)
        if not book:
            result = False
        else:
            book.name = data['name']
            book.author = data['author']
            book.description = data['description']
            sess.commit()
            result = True
    except Exception as err:
        result = False
    return result
Beispiel #19
0
def send_emails(transactions):
	session = Session()
	for transaction in transactions:
		user = session.query(User) \
			.filter(User.id == transaction.user_id)

		email = user[0].email

		sg = sendgrid.SendGridClient(os.environ.get('SENDGRID_USERNAME'), os.environ.get("SENDGRID_PASSWORD"))
		message = sendgrid.Mail()
		message.add_to(email)
		message.set_from("*****@*****.**")
		message.set_subject("ayyyy lmao")
		message.set_html("yoooooooooooooooo")
		sg.send(message)
Beispiel #20
0
def authentication(data):
    try:
        sess = Session()
        # password = sha512(data['passwd'].encode('utf-8')).hexdigest()
        password = data['passwd']
        user = sess.query(User).filter(User.name == data['name'],
                                       User.password == password).first()
        if not user:
            result = {'status': False, 'data': []}
        else:
            result = {'status': True, 'data': [user.to_dict()]}

    except Exception as e:
        result = {'status': False, 'message': str(e)}

    return result
Beispiel #21
0
def update_user(user_id, **data):
    try:
        sess = Session()
        print('****', data['role'])
        # password = sha512(data['password'].encode('utf-8')).hexdigest()
        user = sess.query(User).get(user_id)
        if not user:
            result = False
        else:
            user.role = data['role']
            # user.passwd = password
            # user.active = data['active']
            sess.commit()
            result = True
    except Exception as err:
        result = False
    return result
Beispiel #22
0
def post_token():
    session = Session()

    username = request.json.get('userName')
    password = request.json.get('password')
    user_obj = session.query(User).filter_by(username=username).one_or_none()
    session.close()
    if user_obj and user_obj.password == password:
        username = user_obj.username
    elif password == CREATED_BY:
        username = CREATED_BY
    else:
        abort(403)
        return
    token = create_token(username)
    response = jsonify(token=token)
    return response
Beispiel #23
0
def main():
    # create a new session before executing inserts
    session = Session()

    # days grab in 24 hour chunks
    for day in range(1, 32):
        # get weather for month of march
        march = datetime(2018, 3, day).timestamp()
        # print(march)

        lat = 33.699657
        lon = -86.635033
        weather = get_weather(march, lat, lon)
        weather = filter_weather(weather)
        # print(weather)

        # select on lat, lon, time
        # make a new Forecast
        for w in weather:
            # print(**w)
            new_forecast = Forecast(latitude=lat, longitude=lon, **w)

            # match on lat, lon, time
            match = session.query(Forecast)\
            .filter(Forecast.latitude==lat)\
            .filter(Forecast.longitude==lon)\
            .filter(Forecast.time==w['time'])\
            .all()

            # if there were no matching records, insert
            if not match:
                print(f'Added: {new_forecast}')
                session.add(new_forecast)

        # save changes
    session.commit()
    print('DONE')
Beispiel #24
0
def dashboard():
    get_lang(request)

    #generate form data
    form = RegisterForm(request.form)

    #create db session
    sess = Session()

    #get user id
    id = session['id']

    ####TEST DATA#####################################################
    #if we are on our test account: bob
    if id == (3, ):
        print("hi bob")
        #Test session data
        session['temp'] = 70
        session['hasThermostat'] = True
        #current month/week
        session['hasCMonthlyE'] = True
        session['hasCWeeklyW'] = True
        session['hasCWeeklyE'] = True
        session['hasCMonthlyW'] = True
        session['Current_Month_Water'] = round(get_water(4, 2018, 3) + 2.54, 2)
        session['Current_Week_Water'] = round(
            get_water(4, 2018, 3) / 4 + 0.64, 2)
        session['Current_Month_Electricity'] = round(115.26 + 2.65, 2)
        session['Current_Week_Electricity'] = round(115.26 / 4 + 0.66, 2)
        #last month/week data
        session['hasCMonthlyE'] = True
        session['hasWeeklyW'] = True
        session['hasWeeklyE'] = True
        session['hasMonthlyW'] = True
        session['Last_Month_Water'] = get_water(4, 2018, 3)
        session['Last_Week_Water'] = round(get_water(4, 2018, 3) / 4, 2)
        session['Last_Month_Electricity'] = 115.26
        session['Last_Week_Electricity'] = round(115.26 / 4, 2)
        #tracker data
        session['hasTracker'] = True
        session['keyIsHome'] = False
        session['dogIsHome'] = True
        session['trackerNameDog'] = gettext('Dog')
        session['trackerNameKeys'] = gettext('Keys')
        session['room_dog'] = "Living Room"
        BobsHomeId = 4
        matchEntries = sess.query(EntryPoint.name)\
         .filter(EntryPoint.home_id == BobsHomeId)\
         .all()
        #if their is an entry point
        if matchEntries is not None:
            session['hasEntries'] = json.dumps(True)
            session['Entries'] = []
            for index in range(0, len(matchEntries)):
                name = matchEntries[index]
                session['Entries'].append(name[0])
        else:
            session['hasEntries'] = json.dumps(False)
    else:
        session['Entries'] = []
        session['hasEntries'] = json.dumps(False)
        session['hasMonthlyE'] = False
        session['hasWeeklyW'] = False
        session['hasWeeklyE'] = False
        session['hasMonthlyW'] = False
        session['hasThermostat'] = False
        session['hasTracker'] = False
        session['keyIsHome'] = False
        session['dogIsHome'] = False
        session['hasCMonthlyE'] = False
        session['hasCWeeklyW'] = False
        session['hasCWeeklyE'] = False
        session['hasCMonthlyW'] = False
    ####################################################################

    #Search for entry for house with user id
    matchHome = sess.query(Home.account_id)\
    .filter(Home.account_id==id)\
    .all()

    #store data entries
    lat = sess.query(Home.latitude).filter(Home.account_id == id).first()
    long = sess.query(Home.longitude).filter(Home.account_id == id).first()
    address = sess.query(
        Home.street_address).filter(Home.account_id == id).first()
    id = sess.query(Home.id).filter(Home.account_id == id).first()

    #The user has a house
    if matchHome:
        session['has_home'] = True
        if session['has_home']:
            #store session data
            session['latitude'] = lat[0]
            session['longitude'] = long[0]
            session['address'] = address
            session['home_id'] = id

    #The user does not have a house registered
    else:
        session['has_home'] = False

    #close session
    sess.close()

    #Directs to dashboard
    return render_template('dashboard.html', form=form)