class Project(db.Document): project = db.StringField(verbose_name="Project", max_length=255, unique=True, required=True) description = db.StringField(verbose_name="Description") dateofcreation = db.DateTimeField(default=datetime.datetime.now) url = db.StringField(max_length=255, unique=True, required=True) tasks = db.ListField(db.EmbeddedDocumentField('Task')) @property def completed(self): projectDetails = Project.objects().get(url=self.url) count = 0 for i in projectDetails.tasks: if i.completed == True: count += 1 return count @property def remaining(self): projectDetails = Project.objects().get(url=self.url) count = 0 for i in projectDetails.tasks: if i.completed == False: count += 1 return count
class Show(db.Document): slug = db.StringField(required=True) title = db.StringField(required=True) artists_slug = db.ListField(StringField()) attendance_count = db.IntField(min_value=0, required=False, default=0) cover_image = db.StringField(required=False) description = db.StringField(required=False) datetime_usa = db.StringField(required=False) location = db.ReferenceField(Location, required=False, dbref=False) website = db.StringField(required=False) artists_list = None @property def artists(self): if not self.artists_list is None: return self.artists_list return Band.objects.filter(slug__in=self.artists_slug) @property def datetime(self): return datetime.strftime( datetime.strptime(self.datetime_usa[:19], "%Y-%m-%d %H:%M:%S"), '%d/%m') def __eq__(self, other): return self.slug == other.slug def __unicode__(self): return self.title
class User(UserMixin, db.Document): meta = {"collection": "users"} id = db.StringField(default=lambda: str(uuid.uuid4()), primary_key=True) active = db.BooleanField(default=True) # User authentication information email = db.EmailField() password = db.StringField() # User information username = db.StringField(default="") # User image image = db.StringField(default="default.jpg") # Relationships posts = db.ListField(db.StringField(), default=[]) def get_reset_token(self, expires_sec=1800): s = Serializer(app.config["SECRET_KEY"], expires_sec) return s.dumps({"user_id": self.id}).decode("utf-8") @staticmethod def verify_reset_token(token): s = Serializer(app.config["SECRET_KEY"]) try: user_id = s.loads(token)["user_id"] except: return None return User.objects.get(id=user_id)
class Question(db.Document): slug = db.StringField(required=True) question = db.StringField(required=True) answers = db.ListField(EmbeddedDocumentField(Answer)) def __eq__(self, other): return self.slug == other.slug def __unicode__(self): return self.question
class Band(db.Document): slug = db.StringField(required=True) name = db.StringField(required=True) aliases = db.ListField(StringField(required=True)) users = db.ListField(ReferenceField(User, dbref=False)) shows = db.ListField(ReferenceField(Show, dbref=False)) musicians = db.ListField(ReferenceField(User, dbref=False)) products = db.ListField(ReferenceField(Product, dbref=False)) photo_url = db.StringField(required=False) tags_list = db.ListField(StringField()) similares_slug = db.ListField(StringField()) history_content = db.StringField(required=False) @property def similares(self): if len(self.similares_slug) == 0: self.update_data() return Band.objects.filter(slug__in=self.similares_slug) @property def tags(self): if len(self.tags_list) == 0: self.update_data() return self.tags_list @property def photo(self): if not self.photo_url: self.update_data() return self.photo_url @property def history(self): if not self.history_content: self.update_data() read_more_on_position = self.history_content.find("Read more") if read_more_on_position == -1: return self.history_content.strip() return self.history_content[:read_more_on_position].strip() def update_data(self): lastfm_module = get_lastfm_module() controller = get_controllers_module() band_data = lastfm_module.get_band_data(band=self) self.photo_url = band_data["image"][3]['#text'] if type(band_data["tags"]) is dict: tags = band_data["tags"]["tag"] if not type(tags) is list: tags = [tags] self.tags_list = [tag["name"] for tag in tags] if type(band_data["similar"]) is dict: similares = band_data["similar"]["artist"] if not type(similares) is list: similares = [similares] for similar_band in similares: band = controller.get_or_create_band( {"name": similar_band["name"]}) self.similares_slug.append(band.slug) self.history_content = re.sub('<[^>]*>', '', band_data["bio"]["content"]) self.save() def timeline_as_dict(self): return { "headline": unicode(self.name), "type": "default", "text": u"<p>%s</p>" % self.history, "asset": { "media": self.photo }, "date": [{ "startDate": "%s" % str(datetime.now().date()).replace("-", ","), "headline": "Contribua", "text": u"<p>Clique no botão acima escrito 'Contribua com a timeline' e escreva os acontecimentos que você mais gosta sobre a banda.</p>", "tag": u"%s, Contribua" % self.name, "classname": "contribua", "asset": { "media": self.photo } }] } def __eq__(self, other): return self.slug == other.slug def __unicode__(self): return self.name
class Prediction(db.Document): meta = {'collection': 'predictions'} predictionResults = db.ListField(required=True) rawPredictionResults = db.ListField(required=True) date = db.DateTimeField(required=True)