Ejemplo n.º 1
0
class TrelloTemporaryToken(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    token = db.Column(db.String(256), index=True, unique=True, nullable=False)
    secret = db.Column(db.String(256), nullable=False)
    expires = db.Column(db.DateTime, nullable=True)

    user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)
    user = db.relationship("User")

    def __init__(self, token=None, secret=None, user=None, expires=None):
        self.token = token
        self.secret = secret
        self.user = user
        self.expires = expires

    def get_raw_session(self, **kwargs):
        client_key = current_app.config["TRELLO_API_KEY"]
        client_secret = current_app.config["TRELLO_API_SECRET"]

        return OAuth1Session(
            client_key=client_key,
            client_secret=client_secret,
            resource_owner_key=self.token,
            resource_owner_secret=self.secret,
            **kwargs
        )

    @classmethod
    def create(cls, trello_oauth_token):
        db.session.add(trello_oauth_token)
        db.session.commit()

    @classmethod
    def get_by_token(cls, token):
        return cls.query.filter_by(token=token).first()
Ejemplo n.º 2
0
class Trello(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    token = db.Column(db.String(256), index=True, unique=True, nullable=False)
    secret = db.Column(db.String(256), nullable=False)
    username = db.Column(db.String(256))

    user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)
    user = db.relationship("User", backref="trellos")

    def __init__(self, token, secret, user, username=None):
        self.token = token
        self.secret = secret
        self.user = user
        self.username = username

    def get_raw_session(self, **kwargs):
        client_key = current_app.config["TRELLO_API_KEY"]
        client_secret = current_app.config["TRELLO_API_SECRET"]

        return OAuth1Session(
            client_key=client_key,
            client_secret=client_secret,
            resource_owner_key=self.token,
            resource_owner_secret=self.secret,
            **kwargs
        )

    def get_session(self):
        return TrelloAPISession(self.get_raw_session())

    def __str__(self):
        return f"{self.username}@Trello"

    @classmethod
    def create(cls, trello):
        db.session.add(trello)
        db.session.commit()

    @classmethod
    def remove(cls, trello):
        from life_scheduler.board.models import QuestSource
        sources = QuestSource.query.filter_by(backend_type="trello", backend_id=trello.id).all()
        for source in sources:
            db.session.delete(source)

        db.session.delete(trello)
        db.session.commit()

    @classmethod
    def get_by_token(cls, token):
        return cls.query.filter_by(token=token).first()

    @classmethod
    def get_by_id(cls, i):
        return cls.query.get(i)
Ejemplo n.º 3
0
class Google(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    token = db.Column(db.JSON, nullable=False)
    email = db.Column(db.String(256))

    user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)
    user = db.relationship("User", backref="googles")

    def __init__(self, token=None, email=None, user=None):
        self.token = token
        self.email = email

        self.user = user

    def __str__(self):
        return f"{self.email}@Google"

    def get_raw_session(self, **kwargs):
        client_id = current_app.config["GOOGLE_CLIENT_ID"]
        client_secret = current_app.config["GOOGLE_CLIENT_SECRET"]
        refresh_url = "https://oauth2.googleapis.com/token"

        refresh_kwargs = {
            "client_id": client_id,
            "client_secret": client_secret,
        }

        return OAuth2Session(client_id=client_id,
                             token=self.token,
                             token_updater=self.update_token,
                             auto_refresh_url=refresh_url,
                             auto_refresh_kwargs=refresh_kwargs,
                             **kwargs)

    def update_token(self, token):
        self.token = token
        db.session.commit()

    def get_session(self):
        return GoogleAPISession(self.get_raw_session())

    @classmethod
    def create(cls, google):
        db.session.add(google)
        db.session.commit()

    @classmethod
    def remove(cls, google):
        from life_scheduler.board.models import QuestSource
        sources = QuestSource.query.filter_by(backend_type="google",
                                              backend_id=google.id).all()
        for source in sources:
            db.session.delete(source)

        db.session.delete(google)
        db.session.commit()

    @classmethod
    def get_by_id(cls, i):
        return cls.query.get(i)
Ejemplo n.º 4
0
class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(120), unique=True)
    name = db.Column(db.String(120))
    given_name = db.Column(db.String(120))
    family_name = db.Column(db.String(120))
    picture = db.Column(db.String(120))

    timezone = db.Column(db.String(120))

    is_approved = db.Column(db.Boolean, default=False)

    def __init__(self,
                 email=None,
                 name=None,
                 given_name=None,
                 family_name=None,
                 picture=None):
        self.email = email
        self.name = name
        self.given_name = given_name
        self.family_name = family_name
        self.picture = picture

    def set_approved(self, value):
        self.is_approved = value
        db.session.commit()

    def __repr__(self):
        return f"<User {self.email}>"

    @property
    def tz(self):
        return get_timezone(self.timezone)

    def time_from_iso_format(self, iso_string):
        t = time.fromisoformat(iso_string)
        return time.replace(t, tzinfo=self.tz)

    def datetime_from_iso_format(self, iso_string):
        dt = datetime.fromisoformat(iso_string)
        return datetime.replace(dt, tzinfo=self.tz)

    def datetime_now(self):
        return datetime.now(tz=self.tz)

    @classmethod
    def get_or_create(cls, user_dict):
        result = cls.get_by_email(user_dict["email"])

        if not result:
            user = User(**user_dict)
            db.session.add(user)
            db.session.commit()
            result = user

        return result

    @classmethod
    def get_by_email(cls, email):
        result = cls.query.filter_by(email=email).first()

        return result

    @classmethod
    def get_all(cls):
        result = cls.query.all()

        return result