class UserProfile(db.EmbeddedDocument): updated = db.IntField(default=0) first_name = db.StringField(max_length=50) last_name = db.StringField(max_length=50) public_name = db.StringField(max_length=50) gender = db.StringField(max_length=1) currency = db.StringField(min_length=3, max_length=3) timezone = db.StringField(min_length=3, max_length=3) date_of_birth = db.DateTimeField() avatar = db.ImageField(size=(300, 300, True)) interests = db.ListField() addresses = db.EmbeddedDocumentListField(Address) billing = db.ReferenceField(Billing)
class Image(db.Document): iid = db.StringField(primary_key=True, unique=True) image = db.ImageField(thumbnail_size=(180, 160, True)) title = db.StringField() description = db.StringField() user = db.ReferenceField(User) pub_date = db.DateTimeField(default=datetime.now) view_count = db.IntField(default=0) likes = db.IntField(default=0) dislikes = db.IntField(default=0) tags = db.ListField(db.StringField(max_length=30)) gallery = db.ListField(db.ReferenceField(Gallery)) def __unicode__(self): return self.title
class album(db.Document): id = db.UUIDField() albumtitle = db.StringField(required=False, unique=True) albumartist = db.ReferenceField(artist) musicbrainz_albumartistid = db.StringField() musicbrainz_albumid = db.StringField() coverimage = db.ImageField() def get_coverart_url(self): path = "app/static/media/" filename = "%s.jpg" % self.id if not self.coverimage.size: raise NameError("No image in DB") imgdata = self.coverimage.read() if not imgdata: raise NameError("No image in DB") b_imagedata = bytes(imgdata) output = open("%s%s" % (path, filename), "wb") output.write(b_imagedata) return filename
class Parts(db.Document): part_name = db.StringField(max_length=50) part_price = db.DecimalField(precision=2) stock = db.IntField() image = db.ImageField()
class Team(db.Document): name = db.StringField(max_length=80, unique=True, verbose_name="Team name", help_text="Basically, who are you?") type = db.StringField( choices=TEAM_TYPE, required=True, verbose_name="Type of team", help_text="This will give you differents options after.") description = db.StringField(max_length=255, verbose_name="Description", help_text="What is the purpose of your team?") admin = db.ReferenceField(User, required=True, verbose_name="Administrator", help_text="Who is the boss?") date = db.DateTimeField( default=datetime.now, required=True, verbose_name="Creation date", help_text="Automatic field", ) members = db.EmbeddedDocumentListField('Member', verbose_name="Team's Members", help_text="Who is in?") photo = db.ImageField(thumbnail_size=(100, 100, True)) renderfields = ("name", "type", "description", "admin") renderfieldsaslist = ("members") actions = OrderedDict((("view", "View"), ("edit", "Edit"), ("member/invite", "Invite"), ("delete", "Delete"))) badge = "members" @property def iseditable(self): return self.admin == current_user @property def editurl(self): return url_for("team") def addmember(self, usertoadd): if usertoadd: m = Member(user=usertoadd) self.members.append(m) self.save() def removemember(self, usertoremove): m = self.members.filter(user=usertoremove) m.delete() m.save() @classmethod def form(cls, fields=None): if fields: Teamform = model_form(cls, only=fields) else: Teamform = model_form(cls) Teamform.photo = FileField() Teamform.submit = SubmitField('Go') return Teamform def invite(self, email): u = User.objects(email=email).first() if u: if self.members.filter(user=u).count() == 0: self.addmember(u) flash("User added", "success") else: flash("User allready in the team", "error") else: u = User(email=email).save() self.addmember(u) flash("Email sent", "success") return True def __str__(self): return ("%s" % self.name)
class Users(UserMixin, db.Document): username = db.StringField(db_field='un', required=True, unique=True, verbose_name='Nume utilizator') avatar = db.ImageField(db_field='ig', verbose_name='Avatar', size=(640, 480, True)) pswd = db.StringField(db_field='ps', required=True) joindate = db.DateTimeField(db_field='jd', verbose_name='Data inregistrare', default=datetime.datetime.now) email = db.StringField(db_field='em', required=True, unique=True, verbose_name='Email utilizator') status = db.BooleanField(db_field='st', verbose_name='Status', default=True) permissions = db.StringField(db_field='pm', required=True, verbose_name='Drepturi', default='user') specialties = db.ListField(field=db.StringField(), db_field='sp', verbose_name='Specializari') interests = db.ListField(field=db.StringField(), db_field='in', verbose_name='Interese') projects = db.ListField(field=db.ObjectIdField(), db_field='pj', verbose_name='Proiecte') mail_confirmed = db.BooleanField(db_field='mc', default=False) @property def password(self): raise AttributeError('password is not a readable attribute') @password.setter def password(self, passwd): self.pswd = generate_password_hash(passwd) def verify_password(self, passwd): return check_password_hash(self.pswd, passwd) def is_admin(self): return self.permissions == 'full' def is_active(self): return self.status def generate_confirmation_token(self, expiration=7200): s = Serializer(current_app.config['SECRET_KEY'], expiration) return s.dumps({'confirm': unicode(self.id)}) def confirm(self, token): s = Serializer(current_app.config['SECRET_KEY']) try: data = s.loads(token) except: return False if data.get('confirm') != unicode(self.id): return False self.mail_confirmed = True self.save() return True def generate_reset_token(self, expiration=7200): s = Serializer(current_app.config['SECRET_KEY'], expiration) return s.dumps({'reset': unicode(self.id)}) def resetpass(self, token): s = Serializer(current_app.config['SECRET_KEY']) try: data = s.loads(token) except: return None if data.get('reset') != unicode(self.id): return None return self.id