HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //proc/1233/root/home/arjun/projects/buyercall/buyercall/blueprints/sources/models.py
import uuid
from requests import request
from sqlalchemy.dialects.postgresql import UUID, JSON
from sqlalchemy.orm import backref
from buyercall.extensions import db
from buyercall.lib.util_sqlalchemy import ResourceMixin
from flask_login import current_user


class Source(ResourceMixin, db.Model):
    __tablename__ = 'source'

    id = db.Column(db.Integer, primary_key=True)

    sid = db.Column(UUID(as_uuid=True), unique=True, default=uuid.uuid4, index=True)

    name = db.Column(db.String(36), nullable=False)

    description = db.Column(db.String(300), nullable=False)

    partnership_id = db.Column(db.Integer, db.ForeignKey('partnerships.id',
                                                         onupdate='CASCADE',
                                                         ondelete='CASCADE'),
                               index=True, nullable=True)

    partnership_account_id = db.Column(db.Integer, db.ForeignKey('partnership_accounts.id',
                                                                 onupdate='CASCADE',
                                                                 ondelete='CASCADE'),
                                       index=True, nullable=True)

    workflows = db.Column(JSON, nullable=False, server_default='{}')

    created_by = db.Column(db.Integer, db.ForeignKey('users.id', onupdate='CASCADE',
                           ondelete='CASCADE'), index=True, nullable=True)

    updated_by = db.Column(db.Integer, db.ForeignKey('users.id', onupdate='CASCADE',
                           ondelete='CASCADE'), index=True, nullable=True)

    def __str__(self):
        return self.name or self.sid

    @classmethod
    def check_name_exists(cls, name):
        """  Called before source is created """
        if name:
            if cls.query.filter(cls.name == name).first():
                return True
            else:
                return False
        else:
            return True

    def is_name_exists(self, name):
        """ Called before source is updated """
        if name:
            sources = Source.query.filter(Source.name == name)
            for source in sources:
                if source != self:
                    return True
            return False
        return True

    @classmethod
    def update(cls, sid, **data):
        obj = cls.query.filter(cls.sid == sid).first()
        obj.name = data.get('name')
        obj.description = data.get('description')
        obj.workflows = data.get('workflows')
        obj.updated_by = current_user.id
        obj.save()
        return obj

    @classmethod
    def get_by_partnership_account(cls, paid):
        return cls.query.filter(cls.partnership_account_id == paid).first()

    @classmethod
    def get_all_by_partnership_account(cls, paid):
        return cls.query.filter(cls.partnership_account_id == paid).all()

    @classmethod
    def get_by_name(cls, name):
        return True if cls.query.filter(cls.name == name).first() else False

    @classmethod
    def create(cls, **params):
        if not cls.check_name_exists(params.get('name', '')):
            obj = cls(**params)
            obj.save()
            return obj
        else:
            return