Example #1
0
class IncomingMessage(db.Model):
    __tablename__ = 'incoming_messages'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    message_id = db.Column(db.Integer, db.ForeignKey('messages.id'), nullable=False)
    from_id = db.Column(db.Integer, db.ForeignKey('vk_users.vk_id'), nullable=False)
    message = db.relationship('Message', backref='inc_message', uselist=False)

    def save(self, message):
        send_date = datetime.strptime(
            time.ctime(message['date']),
            '%a %b %d %H:%M:%S %Y'
        )
        msg_obj = Message(
            datetime = send_date,
            random_id = message['random_id'],
            text = message['text']
        )
        msg_obj.save()

        self.message_id = msg_obj.id
        self.from_id = message['from_id']
        db.session.add(self)
        db.session.commit()

    def get_text(self):
        return self.message.get_text()
Example #2
0
class TaskResult(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    task_id = db.Column(db.Integer,
                        db.ForeignKey('task.id',
                                      name='task_result_fk',
                                      ondelete='SET NULL'),
                        nullable=False)
    owner_id = db.Column(db.Integer,
                         db.ForeignKey('users.id',
                                       name='task_fk',
                                       ondelete='CASCADE'),
                         nullable=False)
    started = db.Column(db.DateTime, server_default=func.now())
    finished = db.Column(db.DateTime)
    host_results = db.relationship('HostResult',
                                   backref='task',
                                   lazy='dynamic',
                                   cascade='all, delete-orphan')

    @property
    def duration(self) -> Optional[datetime]:
        if self.finished is None:
            return

        return self.finished - self.started

    def finish(self):
        self.finished = datetime.utcnow()

    def __repr__(self):
        return f'TaskResult(started="{self.started.isoformat()}")'
Example #3
0
class Teacher(db.Model):
    __tablename__ = 'teachers'
    person_id = db.Column(db.Integer, db.ForeignKey('persons.id'), primary_key=True)
    department_id = db.Column(db.Integer, db.ForeignKey('departments.id'), nullable=False)

    subjects = db.relationship('Subject', backref='teacher', uselist=True)

    def save(self):
        db.session.add(self)
        db.session.commit()

    def get_subject(self, name):
        name = name.lower()
        filtered = filter(lambda s: s.name.lower() == name, self.subjects)
        filtered = list(filtered)
        if len(filtered) > 1:
            raise SubjectIsNotUniqueException('More than one subject for a teacher with definite name')
        elif len(filtered) == 1:
            return filtered[0]
        else:
            return None

    def get_subject_by_part(self, name):
        name = name.lower()
        filtered = filter(lambda s: name in s.name.lower(), self.subjects)
        return list(filtered)

    @staticmethod
    def get_all():
        return Teacher.query.all()
Example #4
0
class OutgoingMessage(db.Model):
    __tablename__ = 'outgoing_messages'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    message_id = db.Column(db.Integer, db.ForeignKey('messages.id'), nullable=False)
    to_id = db.Column(db.Integer, db.ForeignKey('vk_users.vk_id'), nullable=False)
    message = db.relationship('Message', backref='out_message', uselist=False)

    def __init__(self, to_id, text):
        self.to_id = to_id
        self.text = text

    def send(self):
        random_id = VK.send_message(text=self.text, user_id=self.to_id)
        if random_id is None:
            return False
        message = Message(
            datetime = datetime.utcnow(),
            random_id = random_id,
            text = self.text
        )
        message.save()
        self.message_id = message.id
        db.session.add(self)
        db.session.commit()
        return True
Example #5
0
class Lesson(db.Model):
    __tablename__ = 'lessons'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    group_id = db.Column(db.Integer, db.ForeignKey('study_groups.id'), nullable=False)
    subject_id = db.Column(db.Integer, db.ForeignKey('subjects.id'), nullable=False)
    classroom_id = db.Column(db.Integer, db.ForeignKey('classrooms.id'), nullable=False)
    start_time = db.Column(db.Time, nullable=False)
    end_time = db.Column(db.Time, nullable=False)
    week_day = db.Column(db.Integer, nullable=False)
    on_even_week = db.Column(db.String(1), nullable=False)

    def save(self):
        db.session.add(self)
        db.session.commit()

    def formatted_output(self):
        return '{since}—{till}: {subject}, {teacher}, {place} ({edu_org})'.format(
            since = format_time(self.start_time),
            till = format_time(self.end_time),
            subject = self.subject.name,
            teacher = self.subject.teacher.pd.short_name(),
            place = self.classroom.get_name(),
            edu_org = self.classroom.edu_org.short_name
        )

    def get_week_day(self):
        return WEEK_DAYS[self.week_day].capitalize()

    def is_on_even_week(self):
        if self.on_even_week == 'e':
            return True
        elif self.on_even_week == 'o':
            return False
        else:
            return None
Example #6
0
class TickerSubscription(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    ticker_id = db.Column(db.Integer, db.ForeignKey('ticker.id'))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __repr__(self):
        return '<Ticker {}>'.format(self.ticker_id)
Example #7
0
class UserRoles(db.Model):
    __tablename__ = 'user_roles'
    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id', ondelete='CASCADE'))
    user = db.relationship('User')
    role_id = db.Column(db.Integer(), db.ForeignKey('role.id', ondelete='CASCADE'))
    user = db.relationship('Role')
Example #8
0
class Articles(db.Model):
    __tablename__ = 'articles'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(255), nullable=False)
    body = db.Column(db.Text(), nullable=False)
    summary = db.Column(db.String(150),nullable=False)
    img_url = db.Column(db.String(255),nullable=False)
    insert_date = db.Column(db.DateTime, nullable=False)
    insert_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
    update_date = db.Column(db.DateTime, nullable=True)
    update_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=True)
    delete_flg = db .Column(db.Boolean, nullable=False, default=False)
    version = db.Column(db.Integer, nullable=True)
    __mapper_args__ = {'version_id_col': version}
    
    def __init__(self,title,body,summary,img_url,insert_date,insert_id,version=0,update_date=None,update_id=None):
        self.title = title
        self.body = body
        self.summary = summary
        self.img_url = img_url
        self.insert_date = insert_date
        self.insert_id = insert_id
        self.version = version
        self.update_date = update_date
        self.update_id = update_id
Example #9
0
class EventType(db.Model, BaseModel):

    __bind_key__ = 'term'
    __tablename__ = 'event_type'

    id = db.Column(db.Integer, primary_key=True)
    term_type = db.Column(db.Integer, db.ForeignKey('term.id'))
    term = db.relationship('Term')
    event_id = db.Column(db.Integer, db.ForeignKey('event.id'))
    event = db.relationship('Event')

    @staticmethod
    def get_types(term_type=False):
        if isinstance(term_type, (bool)):
            return EventType.query.all()

        return EventType.query.filter_by(term_type=term_type).all()

    @staticmethod
    def get_dict(term_type=False):
        from models.event import Event

        types = EventType.get_types(term_type)
        events = Event.get_dict()
        result = {}
        for row in types:
            result[row.event_id] = events[row.event_id]
        return result
Example #10
0
class Friends(db.Model,UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    Date = db.Column(db.DateTime,nullable=False) # default to datetime.today()
    From_id = db.Column(db.Integer,db.ForeignKey('user.id',ondelete="CASCADE"),nullable=True) # if any one of these (From_id and To_id) are deleted, the entire row will be deleted.
    To_id = db.Column(db.Integer,db.ForeignKey('user.id',ondelete='CASCADE'),nullable=True)
    Status = db.Column(db.Integer, nullable=False) # 0 -> Pending, 1 -> Accepted, 2 -> Rejected
    Friend_of_id = db.Column(db.Integer,nullable=False) # friend of id of someone in user table # if not a friend yet, then this value is 0
    Priviledged = db.Column(db.Integer,nullable=False) # if someone is priviledged, then the From_id (in this table) can edit the To_id's shopping list # Priviledged 0 is just friends and 1 means priviledged
Example #11
0
class AlarmStack(db.Model, BaseModel):

    __bind_key__ = 'stack'
    __tablename__ = 'alarm_stack'

    DEFAULT_COUNT = 1
    DEFAULT_INTERVAL = 86400

    LOCK_FREE = 0
    LOCK_SET = 1

    id = db.Column(db.Integer, primary_key=True)
    firm_id = db.Column(db.Integer, db.ForeignKey('firm.id'))
    firm = db.relationship('Firm')
    term_id = db.Column(db.Integer, db.ForeignKey('term.id'))
    term = db.relationship('Term')
    emails = db.Column(db.Text, nullable=False)
    interval = db.Column(db.Integer, nullable=False)
    count = db.Column(db.Integer, nullable=False)
    lock = db.Column(db.Integer, index=True, nullable=False)

    def __init__(self, firm_id=None, term_id=None):
        self.lock = self.LOCK_FREE
        self.interval = self.DEFAULT_INTERVAL
        self.count = self.DEFAULT_COUNT
        self.term_id = term_id
        self.firm_id = firm_id

    def get_term_alarm(self):
        alarm = AlarmStack.query.filter_by(term_id=self.term_id,
                                           firm_id=self.firm_id).first()
        if not alarm:
            alarm = self

        m, s = divmod(alarm.interval, 60)
        h, m = divmod(m, 60)
        alarm.interval = "%d:%02d" % (h, m)

        return alarm

    @staticmethod
    def reset_count(term_id):
        result = False
        alarm = AlarmStack.query.filter_by(term_id=term_id).first()
        if not alarm:
            return result

        alarm.count = AlarmStack.DEFAULT_COUNT
        if alarm.save():
            result = True

        return result

    def save(self):
        self.emails = self.encode_field(self.emails)

        return BaseModel.save(self)
Example #12
0
class StudyGroup(db.Model):
    __tablename__ = 'study_groups'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    start_date = db.Column(db.Date, nullable=False)
    end_date = db.Column(db.Date, nullable=False)
    name_format = db.Column(db.String(6), nullable=False)
    elder_id = db.Column(db.Integer, db.ForeignKey('students.person_id'))
    department_id = db.Column(db.Integer, db.ForeignKey('departments.id'), nullable=False)

    students = db.relationship('Student', foreign_keys='Student.group_id', backref='group', uselist=True)
    lessons = db.relationship('Lesson', backref='group', uselist=True)

    def save(self):
        db.session.add(self)
        db.session.commit()

    def format_name(self):
        now = date.today()
        if now < self.end_date:
            return self.name_format.replace('*', str(now.year - self.start_date.year + 1))
        else:
            return '—'

    def get_elder(self):
        if self.elder_id is None:
            return None
        return Student.get(id=self.elder_id)

    def get_lessons(self, week_day=None, is_week_even=None):
        if week_day is None and is_week_even is None:
            return sorted(self.lessons, key=lambda l: (l.week_day, l.start_time))
        else:
            lessons = self.lessons
            if week_day is not None:
                lessons = [l for l in lessons if l.week_day == week_day]
            if is_week_even is not None:
                lessons = [l for l in lessons if (l.on_even_week == 'u') or (l.on_even_week == is_week_even)]
            return sorted(lessons, key=lambda l: (l.week_day, l.start_time))

    @staticmethod
    def get_all():
        return StudyGroup.query.all()

    @staticmethod
    def get_by_name(name):
        all = StudyGroup.query.all()
        filtered = filter(lambda group: name == group.format_name(), all)
        return list(filtered)

    @staticmethod
    def get(id=None, name_format=None, department_id=None):
        if id is not None:
            return StudyGroup.query.filter_by(id=id).first()
        if name_format is not None:
            return StudyGroup.query.filter_by(name_format=name_format).first()
        if id is not None:
            return StudyGroup.query.filter_by(department_id=department_id).all()
class TermUserFirm(db.Model, BaseModel):

    __bind_key__ = 'term'
    __tablename__ = 'user_firm'

    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('term_user.id'))
    user = db.relationship(
        'TermUser',
        primaryjoin="TermUser.id==TermUserFirm.user_id")
    firm_id = db.Column(db.Integer, db.ForeignKey('firm.id'))
    firm = db.relationship('Firm', primaryjoin="Firm.id==TermUserFirm.firm_id")
Example #14
0
class ArticleGenre(db.Model):
    __tablename__ = 'article_genre'
    id = db.Column(db.Integer, primary_key=True)
    article_id = db.Column(db.Integer,
                           db.ForeignKey('articles.id'),
                           nullable=False)
    genre_id = db.Column(db.Integer,
                         db.ForeignKey('genres.id'),
                         nullable=False)

    def __init__(self, article_id, genre_id):
        self.article_id = article_id
        self.genre_id = genre_id
Example #15
0
class RelUserProject(JsonSerializer, db.Model):

    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey("users.id"))
    project_id = db.Column(db.Integer, db.ForeignKey("projects.id"))
    created_at = db.Column(db.DateTime, default=db.func.now())
    updated_at = db.Column(db.DateTime, default=db.func.now(),
                           onupdate=db.func.now())

    user = db.relationship("Users",
                           backref=db.backref("projects", lazy="dynamic"))
    project = db.relationship("Projects",
                              backref=db.backref("users", lazy="dynamic"))
Example #16
0
class Log(db.Model):

    __tablename__ = 'log'

    id = db.Column(db.Integer, primary_key=True)
    habit_id = db.Column(db.Integer, db.ForeignKey('habit.id'))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    date = db.Column(db.DateTime)
    status = db.Column(db.Boolean, default=False)

    def __repr__(self):
        return "<Log(id={}, habit_id={}, user_id={}, date={}, status={})>".format(
            self.id, self.habit_id, self.user_id, self.date, self.status)
Example #17
0
class TeacherSubject(db.Model):
    __tablename__ = "teacher_subject"

    subject_id = db.Column(db.Integer, db.ForeignKey('subject.subject_id', onupdate="CASCADE",
                                                     ondelete="NO ACTION"), primary_key=True)
    personnel_number = db.Column(db.Integer, db.ForeignKey('teacher.personnel_number', onupdate="CASCADE",
                                                           ondelete="CASCADE"), primary_key=True)

    teacher = db.relationship("Teacher", back_populates="teacher_subject")
    subject = db.relationship("Subject", back_populates="teacher_subject")

    def __init__(self, subject_id, personnel_number):
        self.subject_id = subject_id
        self.personnel_number = personnel_number
class Comment(db.Model):
    __tablename__ = 'Comment'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    text = db.Column(db.Text())
    video_id = db.Column(db.Text(), db.ForeignKey('Video.id'), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('User.id'), nullable=False)

    def __init__(self, text, video_id, user_id):
        self.text = text
        self.user_id = user_id
        self.video_id = video_id

    def save(self):
        db.session.add(self)
        db.session.commit()
Example #19
0
class Cart(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    product_id = db.Column(db.String(50), nullable=False)
    quantity = db.Column(db.Integer, nullable=False)
    customer_details = db.Column(db.String(50),
                                 db.ForeignKey('customer.customer_id'),
                                 nullable=False)
class Productdetail(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    cost = db.Column(db.String, nullable=False)
    text = db.Column(db.String, nullable=False)
    image = db.Column(db.String, nullable=False)
    span = db.Column(db.String, nullable=False)
    brand_id = db.Column(db.Integer, db.ForeignKey('brand.id'), nullable=False)
Example #21
0
class Vacation(db.Model):
    url = db.Column(db.String(500), primary_key=True)
    createdAt = db.Column(db.String(50), primary_key=True)
    term = db.Column(db.String(50))
    locationFrom = db.Column(db.String(50))
    food = db.Column(db.String(50))
    urlCrawled = db.Column(db.String(500))
    days = db.Column(db.String(50))
    price = db.Column(db.String(50))
    hotelId = db.Column(db.Integer, db.ForeignKey('hotel.id'))
    hotel = db.relationship('Hotel', enable_typechecks=False)

    def __init__(self, url, term, locationFrom, food, days, price, urlCrawled,
                 hotel):
        self.url = url
        self.createdAt = datetime.utcnow()
        self.term = term
        self.locationFrom = locationFrom
        self.food = food
        self.days = days
        self.price = price
        self.urlCrawled = urlCrawled
        self.hotel = hotel

    def __repr__(self):
        return 'Vacation ' + str(self.createdAt) + str(self.url)
Example #22
0
class Email(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    email = db.Column(db.String(60),nullable=False)
    contact_id = db.Column(db.Integer,db.ForeignKey("contact.id"))

    def __str__(self):
        return self.email
Example #23
0
class Classroom(db.Model):
    __tablename__ = 'classrooms'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    edu_org_id = db.Column(db.Integer, db.ForeignKey('edu_orgs.id'), nullable=False)
    number_format = db.Column(db.String(5), nullable=False)
    number = db.Column(db.Integer)

    lessons = db.relationship('Lesson', backref='classroom', uselist=True)

    def save(self):
        db.session.add(self)
        db.session.commit()

    def get_name(self):
        return self.number_format.replace('*', str(self.number))

    @staticmethod
    def get_all():
        return Classroom.query.all()

    @staticmethod
    def get(id=None, name=None):
        if id is not None:
            return Classroom.query.filter_by(id=id).first()
        if name is not None:
            classrooms = Classroom.get_all()
            name = name.lower()
            return [c for c in classrooms if c.get_name().lower() == name]
Example #24
0
class Subject(db.Model):
    __tablename__ = 'subjects'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(75), nullable=False)
    short_name = db.Column(db.String(10), nullable=False)
    teacher_id = db.Column(db.Integer, db.ForeignKey('teachers.person_id'), nullable=False)

    lessons = db.relationship('Lesson', backref='subject', uselist=True)

    def save(self):
        db.session.add(self)
        db.session.commit()

    @staticmethod
    def get_all():
        return Subject.query.all()

    @staticmethod
    def get(id=None, name=None):
        if id is not None:
            return Subject.query.filter_by(id=id).first()
        if name is not None:
            subjects = Subject.query.all()
            name = name.lower()
            return [s for s in subjects if name.lower() in s.name.lower()]
Example #25
0
class Student(db.Model):
    __tablename__ = 'students'
    person_id = db.Column(db.Integer, db.ForeignKey('persons.id'), primary_key=True)
    group_id = db.Column(db.Integer, db.ForeignKey('study_groups.id', use_alter=True), nullable=False)

    def save(self):
        db.session.add(self)
        db.session.commit()

    @staticmethod
    def get_all():
        return Student.query.all()

    @staticmethod
    def get(id):
        return Student.query.filter_by(person_id=id).first()
Example #26
0
class ScanProfile(db.Model):
    __table_args__ = (db.UniqueConstraint('name',
                                          'owner_id',
                                          name='scan_profile_uniq'), )

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    owner_id = db.Column(db.Integer,
                         db.ForeignKey('users.id',
                                       name='scan_profile_fk',
                                       ondelete='CASCADE'),
                         nullable=False)

    settings = db.relationship('ProfileSetting',
                               lazy='dynamic',
                               cascade="save-update, delete")

    def __repr__(self) -> str:
        return f'ScanProfile(name={self.name})'

    def to_dict(self) -> Dict[str, Dict[str, str]]:
        result = defaultdict(dict)
        for item in self.settings:
            if item.setting == 'credential':
                credential = AccountCredential.query.get(item.value)
                result[item.transport].update(
                    dict(username=credential.username,
                         password=credential.password))
                continue

            result[item.transport][item.setting] = item.value

        return result
Example #27
0
class PhotoThumbnails(db.Model):

    __tablename__ = 'photo_thumbnails'
    uuid = db.Column(UUID(as_uuid=True), unique=True, primary_key=True)
    photo_uuid = db.Column(UUID(as_uuid=True), db.ForeignKey('photos.uuid'))
    width = db.Column(INTEGER)
    height = db.Column(INTEGER)
    url = db.Column(TEXT())
    created_at = db.Column(DateTime)

    def __init__(self, uuid, photo_uuid, url, width, height, created_at):
        self.uuid = uuid
        self.photo_uuid = photo_uuid
        self.url = url
        self.width = width
        self.height = height
        self.created_at = created_at

    def __repr__(self):
        return ','.join([
            str(self.uuid),
            str(self.url),
            str(self.width),
            str(self.height),
            str(self.created_at)
        ])
Example #28
0
class Prev_order_products(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    product_id = db.Column(db.String(50), nullable=False)
    quantity = db.Column(db.Integer, nullable=False)
    total_price = db.Column(db.Integer, nullable=False)
    order = db.Column(db.String(50), db.ForeignKey('prev_order.order_id'),
                      nullable=False)
Example #29
0
class Productratings(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    customer_id = db.Column(db.String(50), unique=True, nullable=False)
    rating = db.Column(db.Integer, nullable=False)
    product_details = db.Column(db.String(50),
                                db.ForeignKey('products.product_id'),
                                nullable=False)
Example #30
0
class Vendor_rating(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    customer_id = db.Column(db.String(50), unique=True, nullable=False)
    rating = db.Column(db.Integer, nullable=False)
    vendor_details = db.Column(db.String(50),
                               db.ForeignKey('vendor.vendor_id'),
                               nullable=False)