from itsdangerous import TimedJSONWebSignatureSerializer as Serializer from datetime import datetime from minibase import db, login_manager from flask_login import UserMixin from flask import current_app @login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id)) class Countries(db.Model): id = db.Column(db.Integer, nullable=False, primary_key=True) name = db.Column(db.String(100), nullable=False) iso3 = db.Column(db.String(3), nullable=True) numeric_code = db.Column(db.String(3), nullable=True) iso2 = db.Column(db.String(2), nullable=True) phonecode = db.Column(db.String(255), nullable=True) capital = db.Column(db.String(255), nullable=True) currency = db.Column(db.String(255), nullable=True) currency_name = db.Column(db.String(255), nullable=True) currency_symbol = db.Column(db.String(255), nullable=True) tld = db.Column(db.String(255), nullable=True) native = db.Column(db.String(255), nullable=True) region = db.Column(db.String(255), nullable=True) region_id = db.Column(db.Integer, nullable=True) subregion = db.Column(db.String(255), nullable=True) subregion_id = db.Column(db.Integer, nullable=True) nationality = db.Column(db.String(255), nullable=True) timezones = db.Column(db.String(255), nullable=True) translations = db.Column(db.String(255), nullable=True) latitude = db.Column(db.Float, nullable=True) longitude = db.Column(db.Float, nullable=True) emoji = db.Column(db.String(191), nullable=True) emojiU = db.Column(db.String(191), nullable=True) created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) updated_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) flag = db.Column(db.Integer, nullable=False, default=1) wikiDataId = db.Column(db.String(255)) # returns a more information-rich, or official, string representation of an object # >>> Company_industry.query.all() # >>> [('1', 'Indsutrial'), ('2', 'Consumer')] def __repr__(self): return f"{self.name}" class Company(db.Model): id = db.Column(db.Integer, nullable=False, primary_key=True) name = db.Column(db.String(100), nullable=False) country_bill = db.Column(db.String(100), nullable=False) state_bill = db.Column(db.String(100), nullable=False) city_bill = db.Column(db.String(100), nullable=False) postal_code_bill = db.Column(db.Integer, nullable=False) street_bill = db.Column(db.String(100), nullable=False) street_no_bill = db.Column(db.Integer, nullable=False) country_ship = db.Column(db.String(100), nullable=False) state_ship = db.Column(db.String(100), nullable=False) city_ship = db.Column(db.String(100), nullable=False) postal_code_ship = db.Column(db.Integer, nullable=False) street_ship = db.Column(db.String(100), nullable=False) street_no_ship = db.Column(db.Integer, nullable=False) main_company = db.Column(db.Integer, nullable=False, default=1) subsidiary_of = db.Column(db.Integer, nullable=True, default='') classification = db.Column(db.Integer, nullable=False, default=0) comment = db.Column(db.String(300), nullable=True) upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) industry = db.Column(db.Integer, db.ForeignKey('company_industry.id'), nullable=False) relation = db.Column(db.Integer, db.ForeignKey('company_relation.id'), nullable=False) legal_entity = db.Column(db.Integer, db.ForeignKey('company_legal_entity.id'), nullable=False) class Person(db.Model): id = db.Column(db.Integer, nullable=False, primary_key=True) name = db.Column(db.String(50), nullable=False) last_name = db.Column(db.String(50), nullable=False) date_of_birth = db.Column(db.Date, nullable=False) tel_prof_fix = db.Column(db.String(30), nullable=True, default='') tel_prof_mobile = db.Column(db.String(30), nullable=True, default='') tel_priv_fix = db.Column(db.String(30), nullable=True, default='') tel_priv_mobile = db.Column(db.String(30), nullable=True, default='') mail_prof = db.Column(db.String(320), nullable=False) mail_priv = db.Column(db.String(320), nullable=True, default='') country = db.Column(db.String(75), nullable=False) state = db.Column(db.String(75), nullable=True, default='') city = db.Column(db.String(75), nullable=True, default='') post_code = db.Column(db.String(10), nullable=True, default='') street_name = db.Column(db.String(150), nullable=True, default='') street_no = db.Column(db.Integer, nullable=True, default='') upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) company = db.Column(db.Integer, db.ForeignKey('company.id'), nullable=False) role = db.Column(db.Integer, db.ForeignKey('person_role.id'), nullable=False) class Person_role(db.Model): id = db.Column(db.Integer, nullable=False, primary_key=True) name = db.Column(db.String(50), nullable=False) description = db.Column(db.String(300), nullable=False) upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) # returns a more information-rich, or official, string representation of an object # >>> Company_industry.query.all() # >>> [('1', 'Indsutrial'), ('2', 'Consumer')] def __repr__(self): return f"{self.name}" class Company_industry(db.Model): id = db.Column(db.Integer, nullable=False, primary_key=True) name = db.Column(db.String(50), nullable=False) description = db.Column(db.String(300), nullable=False) upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) # returns a more information-rich, or official, string representation of an object # >>> Company_industry.query.all() # >>> [('1', 'Indsutrial'), ('2', 'Consumer')] def __repr__(self): return f"{self.name}" class Company_relation(db.Model): id = db.Column(db.Integer, nullable=False, primary_key=True) name = db.Column(db.String(50), nullable=False) description = db.Column(db.String(300), nullable=False) upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) # returns a more information-rich, or official, string representation of an object # >>> Company_industry.query.all() # >>> [('1', 'Indsutrial'), ('2', 'Consumer')] def __repr__(self): return f"{self.name}" class Company_legal_entity(db.Model): id = db.Column(db.Integer, nullable=False, primary_key=True) name = db.Column(db.String(50), nullable=False) description = db.Column(db.String(300), nullable=False) upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) # returns a more information-rich, or official, string representation of an object # >>> Company_industry.query.all() # >>> [('1', 'Indsutrial'), ('2', 'Consumer')] def __repr__(self): return f"{self.name}" class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(20), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) image_file = db.Column(db.String(20), nullable=False, default='default.jpg') password = db.Column(db.String(60), nullable=False) # Additional Querry to link a post wiht an author in the sql this won't be an field posts = db.relationship('Post', backref='author', lazy=True) def get_reset_token(self, expires_sec=1800): s = Serializer(current_app.config['SECRET_KEY'], expires_sec) return s.dumps({'user_id': self.id}).decode('utf-8') @staticmethod def verify_reset_token(token): s = Serializer(current_app.config['SECRET_KEY']) try: user_id = s.loads(token)['user_id'] except: return 0 return User.query.get(user_id) # returns a more information-rich, or official, string representation of an object def __repr__(self): return f"User('{self.username}', '{self.email}', '{self.image_file}')" class Post(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100), nullable=False) date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) content = db.Column(db.Text, nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) # returns a more information-rich, or official, string representation of an object def __repr__(self): return f"User('{self.title}', '{self.date_posted}')"