1+ # -*- encoding: utf-8 -*-
2+ """
3+ Copyright (c) 2019 - present AppSeed.us
4+ """
5+
6+ from flask_login import UserMixin
7+ from sqlalchemy import Binary , Column , Integer , String
8+ from sqlalchemy .sql .sqltypes import Date , PickleType
9+ import time
10+ from app import db , login_manager
11+ import datetime
12+ from app .base .util import hash_pass
13+
14+ class User (db .Model , UserMixin ):
15+
16+ __tablename__ = 'User'
17+
18+ id = Column (Integer , primary_key = True )
19+ username = Column (String , unique = True )
20+ email = Column (String , unique = True )
21+ password = Column (Binary )
22+
23+ def __init__ (self , ** kwargs ):
24+ for property , value in kwargs .items ():
25+ # depending on whether value is an iterable or not, we must
26+ # unpack it's value (when **kwargs is request.form, some values
27+ # will be a 1-element list)
28+ if hasattr (value , '__iter__' ) and not isinstance (value , str ):
29+ # the ,= unpack of a singleton fails PEP8 (travis flake8 test)
30+ value = value [0 ]
31+
32+ if property == 'password' :
33+ value = hash_pass ( value ) # we need bytes here (not plain str)
34+
35+ setattr (self , property , value )
36+
37+ def __repr__ (self ):
38+ return str (self .username )
39+
40+
41+ @login_manager .user_loader
42+ def user_loader (id ):
43+ return User .query .filter_by (id = id ).first ()
44+
45+ @login_manager .request_loader
46+ def request_loader (request ):
47+ username = request .form .get ('username' )
48+ user = User .query .filter_by (username = username ).first ()
49+ return user if user else None
50+
51+ class Picks (db .Model ):
52+
53+ __tablename__ = 'Picks'
54+
55+ id = Column (Integer , primary_key = True )
56+ pick = Column (PickleType )
57+ direction = Column (String , unique = True )
58+ bearish = Column (Integer )
59+ neutral = Column (Integer )
60+ bullish = Column (Integer )
61+ total = Column (Integer )
62+ time = Column (Date , default = datetime .datetime .utcnow ())
63+
64+ #def __init__(self, **kwargs):
65+ # for property, value in kwargs.items():
66+ # if hasattr(value, '__iter__') and not isinstance(value, str):
67+ # value = value[0]
68+ # if property == 'time':
69+ # value = time.ctime() # we need bytes here (not plain str)
70+ # setattr(self, property, value)
71+ def __repr__ (self ):
72+ return "class picks id is " + str (self .id )
0 commit comments