Ejemplo n.º 1
0
class EmployeeModel(Document):
    name = fields.StringField(required=True)
    name_lower = fields.StringField(required=True)
    email = fields.EmailField(required=True)
    age = fields.IntegerField(required=True)
    company = fields.StringField(required=True)
    company_lower = fields.StringField(required=True)
    join_date = fields.DateTimeField(required=True)
    job_title = fields.StringField(required=True)
    job_title_lower = fields.StringField(required=True)
    gender = fields.StringField(required=True)
    salary = fields.IntegerField(required=True)

    class Meta:
        collection_name = 'employee'
        indexes = ('name_lower', 'age', 'company_lower', 'job_title_lower',
                   'gender', ('$name', '$company', '$job_title'))

    @classmethod
    def serialize(cls, dct):
        return {
            key: value
            for key, value in dct.items()
            if key != '_id' and not key.endswith('_lower')
        }
Ejemplo n.º 2
0
class User(Document):
    username = fields.StrField(required=True, unique=True)
    email = fields.EmailField(required=True, unique=True)
    firstname = fields.StrField()
    lastname = fields.StrField()
    # birthday = fields.DateTimeField()
    birthday = fields.DateTimeField(validate=validate.Range(min=datetime.datetime(1900, 1, 1)))
    password = fields.StrField(required=True)  # Don't store it in clear in real life !
    date_created = fields.DateTimeField(default=datetime.datetime.now())
    date_modified = fields.DateTimeField(default=datetime.datetime.now())
    # authored_docs = fields.ListField(fields.ReferenceField("Paper"))

    def update(self, *args, **kwargs):
        if not self.date_created:
            self.date_created = datetime.datetime.now()
        self.date_modified = datetime.datetime.now()
        return super(User, self).update(*args, **kwargs)

    class Meta:
        # collection = db.users
        collection_name = 'users'

    def get_thread_karma(self):
        """
        fetch the number of votes this user has had on his/her threads

        1.) Get id's of all threads by this user

        2.) See how many of those threads also were upvoted but not by
        the person him/her self.
        """
        # thread_ids = [t.id for t in self.threads]
        # select = thread_upvotes.select(db.and_(
        #         thread_upvotes.c.thread_id.in_(thread_ids),
        #         thread_upvotes.c.user_id != self.id
        #     )
        # )
        # rs = db.engine.execute(select)
        # return rs.rowcount
        # TODO

        return Thread.find({"user_id":self.id}).count()

    def get_comment_karma(self):
        """
        fetch the number of votes this user has had on his/her comments

        """
        # TODO

        return Comment.find({'user_id': self.id}).count()

    def threads(self):
        app.logger.debug(Thread.find({"user_id":self.id})[:])
        return list(Thread.find({"user_id":self.id}))

    def comments(self):
        app.logger.debug(list(Comment.find({"user_id":self.id})))
        return list(Comment.find({"user_id":self.id}))
Ejemplo n.º 3
0
class GetInviteCodeRequest(Document):
    email = fields.EmailField(unique=True, required=True)
    code = fields.StrField(unique=True,
                           required=False,
                           validate=validate.Length(equal=INVITE_CODE_LENGTH))
    state = fields.StrField(required=True,
                            validate=validate.OneOf(GET_INVITE_CODE_STATE))
    created = fields.DateTimeField(missing=datetime.now())
Ejemplo n.º 4
0
class User(Document):
    email = fields.EmailField(required=True, unique=True)
    birthday = fields.DateTimeField(
        validate=validate.Range(min=datetime(1900, 1, 1)))
    friends = fields.ListField(fields.ReferenceField("User"))

    class Meta:
        collection = db.user
Ejemplo n.º 5
0
        class User(Document):
            name = fields.StringField(required=True, unique=True)
            password = fields.StringField(required=True)
            age = fields.IntegerField(required=True)
            email = fields.EmailField(required=False)

            class Meta:
                collection = db.user
Ejemplo n.º 6
0
class User(Document):
    id = fields.ObjectIdField()
    full_name = fields.StrField()
    email = fields.EmailField(unique=True)
    username = fields.StrField(unique=True)
    hashed_password = fields.StrField()
    last_password_updated_at = fields.DateTimeField()
    scopes = fields.ListField(fields.StrField(), default=[])

    created_at = fields.DateTimeField(default=datetime.now())
    updated_at = fields.DateTimeField(default=datetime.now())

    class Meta:
        collection_name = 'user'
        collection = db.user

    @classmethod
    async def get(cls, id: str):
        if not ObjectId.is_valid(id):
            return None
        user = await cls.find_one({'_id': ObjectId(id)})
        return user

    def check_password(self, password: str):
        if self.hashed_password:
            return PWD_CONTEXT.verify(password, self.hashed_password)

    def set_password(self, password: str):
        self.hashed_password = PWD_CONTEXT.hash(password)
        self.last_password_updated_at = datetime.now()

    def create_access_token(self, expires_delta: timedelta = None):
        now = datetime.utcnow()
        if expires_delta:
            expire = now + expires_delta
        else:
            expire = now + timedelta(minutes=15)
        to_encode = {
            'exp': expire,
            'iat': now,
            'sub': str(self.id),
            'scope': ' '.join(self.scopes) if self.scopes else ''
        }
        encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
        return encoded_jwt

    @classmethod
    async def get_by_username(cls, username: str):
        return await cls.find_one({'username': username})

    @classmethod
    async def register_new_user(cls, email: str, full_name: str, username: str,
                                password: str):
        user = cls(email=email, full_name=full_name, username=username)
        user.set_password(password)
        await user.commit()
        return user
Ejemplo n.º 7
0
class User(UsersMixin):
    def _validate_industries(field, value):
        for industry in value:
            yield from industry.industry.fetch(no_data=True)

    def _validate_invited_by(field, value):
        from models.utils import is_valid_invited_by
        if not (yield from is_valid_invited_by(value)):
            raise ValidationError('There is no such user or group code.')

    fullname = fields.StrField(required=True)
    email = fields.EmailField(unique=True, required=True)
    nickname = fields.StrField(unique=True,
                               required=True,
                               validate=validate.Regexp(r'[\w\d]+'))
    birthday = fields.DateTimeField(required=True, format=DATE_FORMAT)
    phone_numbers = fields.ListField(
        fields.StrField(validate=validate.Regexp(r'[+][\w\d]+')),
        required=True)
    photo = fields.StrField(required=True)
    bio = fields.StrField(required=False, validate=validate.Length(max=320))
    organizations = fields.StrField(required=False,
                                    validate=validate.Length(max=320))
    education = fields.StrField(required=False,
                                validate=validate.Length(max=320))
    personal_invite_code = fields.StrField(
        unique=True,
        required=True,
        validate=validate.Length(equal=INVITE_CODE_LENGTH))

    social_links = fields.ListField(fields.EmbeddedField(SocialLink))
    current_location = fields.EmbeddedField(Location)
    preferred_ways_to_meet = fields.ListField(
        fields.StrField(validate=validate.OneOf(PREFERRED_WAYS_TO_MEET)),
        unique=True)

    join_date = fields.DateTimeField(missing=datetime.utcnow())
    is_active = fields.BoolField(missing=False)
    is_deleted = fields.BoolField()
    date_deleted = fields.DateTimeField()
    is_notifications_enabled = fields.BoolField(missing=True)

    skills = fields.ListField(fields.ReferenceField(Tag), required=True)
    interests = fields.ListField(fields.ReferenceField(Tag))
    industries = fields.ListField(fields.EmbeddedField(Industry),
                                  required=True,
                                  io_validate=_validate_industries)
    languages = fields.ListField(fields.EmbeddedField(Language))

    looking_for = fields.ListField(fields.ReferenceField(LookingFor))
    bubbles = fields.ListField(fields.EmbeddedField(Bubble))

    invited_type = fields.StrField(required=True,
                                   validate=validate.OneOf(INVITE_TYPE))
    invited_by = fields.StrField(required=True,
                                 io_validate=_validate_invited_by)
Ejemplo n.º 8
0
 class MySchema(Schema):
     string = fields.StringField()
     uuid = fields.UUIDField()
     number = fields.NumberField()
     integer = fields.IntegerField()
     decimal = fields.DecimalField()
     boolean = fields.BooleanField()
     float = fields.FloatField()
     url = fields.UrlField()
     email = fields.EmailField()
     constant = fields.ConstantField("const")
Ejemplo n.º 9
0
class User(Document):

    name = fields.StringField(required=True)
    email = fields.EmailField(required=True, unique=True)
    password = fields.StringField()
    confirm_code = fields.StringField()
    reset_code = fields.StringField(default="")
    is_admin = fields.BooleanField(default=False)
    is_math_basic = fields.BooleanField(default=True)

    class Meta:
        collection = db.user
Ejemplo n.º 10
0
 class MySchema(EmbeddedSchema):
     string = fields.StringField()
     uuid = fields.UUIDField()
     number = fields.NumberField()
     integer = fields.IntegerField()
     decimal = fields.DecimalField()
     boolean = fields.BooleanField()
     formattedstring = fields.FormattedStringField('Hello {to_format}')
     float = fields.FloatField()
     # localdatetime = fields.LocalDateTimeField()
     url = fields.UrlField()
     email = fields.EmailField()
     constant = fields.ConstantField("const")
Ejemplo n.º 11
0
class Users(Document, metaclass=MetaBaseTemplate):
    __collection__ = "users"
    email = fields.EmailField(required=True, unique=True)
    guid = fields.UUIDField(missing=uuid.uuid4)
    name = fields.StringField(validate=validate.Length(max=50), required=True)
    picture = fields.UrlField()
    password = fields.StringField(load_only=True)

    class Meta:
        pass
        # indexes = ("email",)

    @classmethod
    def create_password(cls, passwd):
        m = hashlib.sha256()
        m.update(passwd)
        return m.hexdigest()
Ejemplo n.º 12
0
class UserModel(Document):
    fullname = fields.StringField(allow_none=True)
    username = fields.StringField(required=True)
    email = fields.EmailField(allow_none=True)
    phone_number = fields.StringField(allow_none=True)
    password = fields.StringField(required=True, load_only=True)
    birth_date = fields.StringField(required=False)
    auth_token = fields.StringField()
    auth_provider = fields.StringField(load_only=True)
    random_seed = fields.StringField(load_only=True)
    auth_nonce = fields.StringField()
    created_at = fields.DateTimeField(default=datetime.utcnow(),
                                      missing=datetime.utcnow(),
                                      load_only=True)
    modified_at = fields.DateTimeField(default=datetime.utcnow(),
                                       missing=datetime.utcnow(),
                                       load_only=True)

    class Meta:
        collection = db.user
Ejemplo n.º 13
0
class User(Document):  # pylint: disable=abstract-method
    """
    A user in the private database.
    """
    token = fields.StrField(required=True,
                            unique=True,
                            validate=validate.Length(equal=64))

    # The following 4 values could be unconfigured
    # Since the server only updates these after it validates credentials,
    # if both login and password exist, they're guaranteed to be valid credentials
    login = fields.StrField(required=False,
                            unique=True,
                            validate=validate.Regexp(r"\d+"))
    password = BinaryField(required=False)
    # Populated when credentials are set/updated
    # A value of null indicates either credentials are unset,
    # or the courses are in the process of being populated
    # An empty array indicates no courses found
    courses = fields.ListField(fields.ObjectIdField(),
                               required=False,
                               allow_none=True)
    # Should be set as soon as valid credentials are detected
    email = fields.EmailField(required=False, allow_none=True)

    active = fields.BoolField(default=True)
    errors = fields.ListField(fields.EmbeddedField(LockboxFailure), default=[])
    last_fill_form_result = fields.EmbeddedField(FillFormResult,
                                                 default=None,
                                                 allow_none=True)
    grade = fields.IntField(required=False, allow_none=True, default=None)
    first_name = fields.StrField(required=False,
                                 allow_none=True,
                                 default=None,
                                 validate=lambda s: s is None or len(s))
    last_name = fields.StrField(required=False,
                                allow_none=True,
                                default=None,
                                validate=lambda s: s is None or len(s))
Ejemplo n.º 14
0
class User(Document):
    '''
    Represents user of bot
    '''
    chat_id = fields.IntField(required=True, unique=True)
    username = fields.StrField(required=True)
    email = fields.EmailField(required=True)
    track = fields.DictField()
    current_survey = fields.DictField(default={})
    current_question_number = fields.IntField(default=-1)
    answers = fields.ListField(fields.ListField(
        fields.StringField(default='')))

    def update(self, **attrs) -> Union[UpdateResult, InsertOneResult]:
        for attr in attrs:
            self[attr] = attrs[attr]
        return self.commit()

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

    class Meta:
        collection_name = 'users'
Ejemplo n.º 15
0
class MongoUser(BaseDocument):
    uid = umo_fields.StrField(attribute='_id')
    username = umo_fields.StringField(required=True)
    email = umo_fields.EmailField(required=True, unique=True)
Ejemplo n.º 16
0
class User(Document):
    email = fields.EmailField(primary_key=True, required=True)
    username = fields.StrField(required=True)
Ejemplo n.º 17
0
class User(Document):
    email = fields.EmailField(required=True)
    login = fields.StringField(required=True, unique=True)
    password = fields.StringField(required=True)
Ejemplo n.º 18
0
class UserTempl(Document):
    email = fields.EmailField(required=True, unique=True)
    birthday = fields.DateTimeField(validate=validate.Range(
        min=datetime(1900, 1, 1)))
    friend = fields.ReferenceField("UserTempl")
Ejemplo n.º 19
0
class User(Document):
    name = fields.StringField(required=True, unique=False)
    email = fields.EmailField(required=True, unique=False)