class Goods(Document, EmbeddedDocument): name = StringField(max_length=140) description = StringField() price = FloatField() picture1 = ImageField() picture2 = ImageField() picture3 = ImageField()
class LocationInStore(BaseRecord): department = StringField( required=True, unique_with=['aisle', 'bay', 'tower', 'fkStoreNumber']) aisle = StringField(required=True) bay = StringField(required=True) tower = StringField(required=True) level = StringField(required=False, allow_null=True, allow_blank=True, blank=True, null=True) other = StringField( required=False) # only for customers besides home deopt plumbingInLocation = BooleanField(default=False) plumbingPicturePath = ImageField(default=None) plumbingPicturePath2 = ImageField(default=None) electricalInLocation = BooleanField(default=False) electricalPicturePath = ImageField(default=None) electricalPicturePath2 = ImageField(default=None) fkMaterialItems = ListField(ReferenceField( MaterialItem, dbref=False)) # should be a series of drop downs # where the there are no duplicate references fkStoreNumber = ReferenceField(document_type=Store, required=True, dbref=False) meta = {'collection': 'LocationInStore'} def __str__(self): return f'Dept:{self.department} - Bay:{self.bay} - Tower:{self.tower} - Level: {self.level}'
class ScopeOfWork(BaseRecord): GB_Counter = IntField(default=0, min_value=0) GB_CounterBillable = IntField(default=0, min_value=0) SOWPicturePath = ImageField(required=True) wrongLocation = BooleanField(default=False) ConcretePatchNeeded = BooleanField(default=False) fkRightSOWID = ReferenceField('self', default=None, dbref=False) # pop-up to fill out blank form fkStatusID = ReferenceField(ScopeOfWorkStatus, required=True, dbref=False) materialsOrderByInspector = StringField() # multiline completedPicturePath = ImageField(default=None) dateFieldEditedStatus = DateField(default=None) timeFieldEditedStatus = DateTimeField(default=None) approvedBilling = BooleanField(default=False) fkInstallerID = ReferenceField(Employee, default=None, dbref=False) fkRequireMaterials = ReferenceField( OrderMaterial, default=None, dbref=False) # should also update the material list in store location fkLocationInStoreID = ReferenceField(LocationInStore, default=None, dbref=False) fkLocationInStoreChangedID = ReferenceField(LocationInStore, default=None, dbref=False) fkWorkOrderID = ReferenceField(WorkOrder, required=True, dbref=False) fkInitialLaborID = ReferenceField(LaborItem, required=True, dbref=False) fkExtraLaborID = ReferenceField(LaborItem, default=None, dbref=False) fkCorrectLaborID = ReferenceField(LaborItem, default=None, dbref=False) meta = {'collection': 'ScopeOfWork'} def __str__(self): return f'{self.fkInitialLaborID.description} x {self.fkInitialLaborID.quantity} {self.fkStatusID}'
class Unlimited_Coupons(Document): company_id = StringField(max_length=200) coupon_code = StringField(max_length=200) created_date = DateTimeField() created_user = ObjectIdField() banner_image = ImageField() discription = StringField(max_length=1000)
class Events(Document): creator = ReferenceField('Users') participants = ListField(ReferenceField('Users')) nbrParticipantsMax = IntField(required=True) title = StringField(required=True) thumbnail = ImageField() start_date = DateTimeField(required=True) end_date = DateTimeField(required=True) address = EmbeddedDocumentField('Address') creation_date = DateTimeField(default=datetime.datetime.now()) price = FloatField() categories = ListField(EmbeddedDocumentField('Categories')) eventStatus = EmbeddedDocumentField('EventStatus') tags = ListField(ReferenceField('Tags')) level = ReferenceField('Level') is_active = BooleanField(default=True) priv_or_pub = StringField(default="PRIVATE") description = StringField() def get_ref_date(self): return self.creation_date def get_thumbnail(self): if self.thumbnail: picture = base64.b64encode(self.thumbnail.read()) return picture else: return None def add_participant(self, userAdded): self.participants.append(userAdded) self.save()
class Posts(Document): title = StringField(required=True) image = ImageField(required=True, thumbnail_size=(400, 400, True)) posted_datetime = DateTimeField(default=datetime.utcnow) author = ReferenceField('Users', reverse_delete_rule=CASCADE) comments = EmbeddedDocumentListField('Comments') rating = EmbeddedDocumentField('Ratings') def to_json(self): return { 'id': str(self.id), 'title': self.title, 'posted_on': str(self.posted_datetime.replace(microsecond=0)), 'author': self.author.name, 'comment_count': len(self.comments), 'rating': self.rating.score } meta = { 'db_alias': 'core', 'collection': 'posts', 'indexes': ['title'], 'ordering': ['-posted_datetime'] }
class Limited_Offer(Document): company_id = StringField(max_length=200) created_date = DateTimeField() created_user = ObjectIdField() offer_count = IntField() banner_image = ImageField() coupons = ListField(ObjectIdField())
class TemplateImage(DynamicDocument): """ Vulture's portal template image. """ name = StringField(required=True, help_text=_('The name of the image')) content = ImageField(required=True, help_text=_('Image you can use in the portal templates')) uid = StringField(required=False, help_text=_('A unique identifier to get the image from portal')) def get_image_uri(self): """ Return the URI of the image. :return: String containing the URI of the image. """ try: url = 'portal_statics/{}'.format(self.uid) except: return None return url def get_as_html(self): """ Return a pre-formatted html containing the image. :return: A string with pre-formatted html for the image """ return "<img src='data:image/{};base64,{}'/>".format(self.content.format.lower(), base64.b64encode(self.content.read())) def create_preview_html(self): """ Return a pre-formatted html containing the image. :return: A string with pre-formatted html for the image """ return "data:image/{};base64,{}".format(self.content.format.lower(), base64.b64encode(self.content.read()))
class Reports(db.Document): title = StringField() report_type = StringField() description = StringField() issued_by_org = StringField() issued_date = DateTimeField(default=datetime.utcnow) Image = ImageField() report_of = ReferenceField('Patient')
class LocationData(Document): author = ReferenceField(User, reverse_delete_rule=CASCADE) name = StringField() desc = StringField() createdate = DateTimeField(default=d.datetime.utcnow) image = ImageField() longitude = IntField() latitude = IntField()
class News(Document): author = ReferenceField(Account, reverse_delete_rule=CASCADE) discription = StringField(max_length=140) picture = ImageField() voice = FileField() comments = ListField(EmbeddedDocumentField(Comment)) good = ReferenceField(Goods) time = DateTimeField(default=datetime.datetime.now)
class LaborItem(BaseRecord): quantity = IntField(min_value=1) extraLaborPhoto = ImageField() fkArticleNumberState = ReferenceField(ArticleNumberState, dbref=False) meta = {'collection': 'LaborItem'} def __str__(self): description = ' - '.join(self.fkArticleNumberState.fkArticleNumber.description) return f' {description} x {self.quantity} = {self.quantity * self.fkArticleNumberState.price}'
class Server(Document): name = StringField(required=True) description = StringField() public = BooleanField(required=True, default=False) server_id = StringField(required=True, unique=True, regex=r'^[^:]+$') # Not containing colons server_image = ImageField(size=(610, 610, True)) revisions = ListField(EmbeddedDocumentField(ServerRevision), required=True) @classmethod def verify_fid(cls, fid): if fid.count(":") is not 1: return False split = fid.split(":") if len(split[0]) < 1 or len(split[1]) < 1: return False if not Server.server_id.validate( split[0]) or not ServerRevision.validate(split[1]): return False return True @classmethod def get_server(cls, fid): return cls.objects(server_id=fid.split(":")[0]).first() @classmethod def get_server_revision(cls, fid): return cls.get_server(fid).get_revision(fid) def get_revision(self, fid): rev_id = fid.split(":")[1] for revision in self.revisions: if revision.rev_id == rev_id: revision.server = self return revision return None def validate(self, *args, **kwargs): super(Server, self).validate(*args, **kwargs) rev_ids = [] for revision in self.revisions: if revision.rev_id in rev_ids: raise ValidationError( "Duplicate revision id in Server db document") rev_ids += revision.rev_id def __str__(self): return self.server_id
class Patient(db.Document): username = StringField() password = StringField() name = StringField() surname = StringField() email = EmailField() phone = StringField() gender = StringField() image = ImageField() signup_date = DateTimeField(default=datetime.utcnow) online = BooleanField(default=False) address = EmbeddedDocumentField(Address)
class Model1(Document): field_string = StringField(unique=True, required=True) field_integer = IntField() field_float = FloatField() field_date = DateTimeField() field_file = FileField() field_image = ImageField() def __repr__(self): return str(self.field_string) def __unicode__(self): return self.field_string
class Club(Document): """This class takes 7 arguments and writes them to the Clubs Collection """ club_id = StringField(required=True) client_id = StringField() competition_id = ListField(required=True) club_name_long = StringField(required=True) club_name_short = StringField(required=True) club_logo = ImageField(required=True, thumbnail_size=(300, 300, False)) club_primary_color = StringField(required=True) club_secondary_color = StringField(required=True) club_teritary_color = StringField(required=False, default="")
class DDocuments(db.Document): owner = ReferenceField('Doctor') owner_name = StringField() title = StringField(max_length=255) document_type = StringField(max_length=64) description = StringField(max_length=255) issued_by_org = StringField(max_length=255) issued_date = DateTimeField(default=datetime.utcnow) image = ImageField() verification_status = StringField(default='Pending') verified_by = ReferenceField('Operator') verification_date = DateTimeField() rejection_cause = StringField()
class Preferences(EmbeddedDocument): display_weeshes = BooleanField(default=True) display_events = BooleanField(default=True) search_distance = IntField(default=50) search_string = StringField(default='') selected_network = StringField(default='PUBLIC') background_picture = ImageField() def get_background_picture(self): if self.background_picture: picture = base64.b64encode(self.background_picture.read()) return picture else: return None
class ReferenceImage(Document): keypoints = ListField(ListField(), required=True) descriptors = ListField(ListField(FloatField()), required=True) #descriptors = ListField(BinaryField(), required=True) width = IntField(required=True) height = IntField(required=True) metadata = DynamicField() thumbnail = ImageField(size=(800, 600, True), collection_name='reference_thumbnails') def to_opencv_description(self): ocv_kp = [cv2.KeyPoint(o[0], o[1], o[2]) for o in self.keypoints] ocv_des = np.array(self.descriptors, dtype=np.float32) # For BRISK descriptors #ocv_des = np.asarray([np.fromstring(d, dtype=np.uint8) for d in self.descriptors]) return [ocv_kp, ocv_des, self.id, self.width, self.height]
class Contact(Document): name = StringField(max_length=60, required=True, unique=True) address = StringField(max_length=60) birthday = DateTimeField() personal_phone = StringField(max_length=20) personal_celphone = StringField(max_length=20) contact_group = ReferenceField(ContactGroup, required=True) gender = ReferenceField(Gender, required=True) tags = ListField(ReferenceField(Tags)) file = FileField() image = ImageField(size=(350, 250, True), thumbnail_size=(30, 30, True)) def month_year(self): date = self.birthday or mindate return datetime.datetime(date.year, date.month, 1) or mindate def year(self): date = self.birthday or mindate return datetime.datetime(date.year, 1, 1) def __repr__(self): return "%s : %s\n" % (self.name, self.contact_group) def file_show(self): if self.file: return Markup( '<a href="' + url_for('ContactModelView.mongo_download', pk=str(self.id)) + '">Download {0}</a>'.format(self.file.name)) else: return Markup('') def image_show(self): if self.image: return Markup('<a href="' + url_for('ContactModelView.show',pk=str(self.id)) + \ '" class="thumbnail"><img src="' + url_for('ContactModelView.img', pk=str(self.id)) + \ '" alt="Photo" class="img-rounded img-responsive"></a>') else: return Markup('') def image_thumb_show(self): print self.image, self.id if self.image: return Markup('<a href="' + url_for('ContactModelView.show',pk=str(self.id)) + \ '" class="thumbnail"><img src="' + url_for('ContactModelView.img_thumb', pk=str(self.id)) + \ '" alt="Photo" class="img-rounded img-responsive"></a>') else: return Markup('')
class Photo(Document): community_id: int = IntField(required=True) post_id: int = IntField(required=True) photo_id: int = IntField(required=True, unique_with=['post_id', 'community_id']) likes_count: int = IntField(required=True) views_count: int = IntField(required=True) avg_batch_likes_count: float = FloatField(required=True) avg_batch_views_count: float = FloatField(required=True) image = ImageField(required=True) dt_created: datetime = DateTimeField(required=True, default=datetime.utcnow) dt_updated: datetime = DateTimeField(required=True, default=datetime.utcnow)
class Product(Document): title = StringField(max_length=255) description = StringField(max_length=1024) price = IntField(min_value=0) new_prise = IntField(min_value=0) is_discount = BooleanField(default=False) properties = EmbeddedDocumentField(Properties) category = ReferenceField(Category) photo_product = ImageField() @property def get_price(self): if self.is_discount: return str(self.new_prise / 100) return str(self.price / 100) @classmethod def get_discount_products(cls, **kwargs): return cls.objects(is_discount=True)
class Users(Document): """ Template for a mongoengine document, which represents a user. Password is automatically hashed before saving. :param email: unique required email-string value :param password: required string value, longer than 6 characters :param name: option unique string username :param phone: optional string phone-number, must be valid via regex :param roles: Roles object .. seealso:: :class:`Roles`, :class:`Phone` """ email = EmailField(required=True, unique=True) password = StringField(required=True, min_length=6, regex=None) name = StringField() phone = PhoneField() image = ImageField(thumbnail_size=(128, 128, True)) # default user is a student default_roles = { 'student': True, 'instructor': False, 'organization': False, 'admin': False } roles = EmbeddedDocumentField(Roles, default=Roles(**default_roles)) def generate_pw_hash(self): self.password = generate_password_hash( password=self.password).decode('utf-8') # Use documentation from BCrypt for password hashing generate_pw_hash.__doc__ = generate_password_hash.__doc__ def check_pw_hash(self, password: str) -> bool: return check_password_hash(pw_hash=self.password, password=password) # Use documentation from BCrypt for password hashing check_pw_hash.__doc__ = check_password_hash.__doc__
class Events(Document): user_id = ReferenceField('Users') interested = ListField(ReferenceField('Users')) name = StringField(required=True) thumbnail = ImageField() start_date = DateTimeField(required=True) end_date = DateTimeField(required=True) address = EmbeddedDocumentField('Address') creation_date = DateTimeField(default=datetime.datetime.now()) price = FloatField() categories = ListField(EmbeddedDocumentField('Categories')) eventStatus = EmbeddedDocumentField('EventStatus') tags = ListField(ReferenceField('Tags')) is_active = BooleanField(default=True) coordinates = EmbeddedDocumentField('Coordinates') def get_ref_date(self): return self.creation_date def get_picture(self): thumbnail = base64.b64encode(self.thumbnail.read()) return thumbnail
class Artist(Document): name = StringField(required=True, unique=True, max_length=100) image = ImageField(required=False) created_at = DateTimeField(default=datetime.now()) meta = {'queryset_class': CustomQuerySet} def to_json(self, *args, **kwargs): media = kwargs.pop('media', '') data = self.to_mongo() if media: artist_name = '-'.join(re.split("[, \-!?:]+", self.name)) file_name = os.path.join( IMAGE, '{}-{}.{}'.format(artist_name, DATE, 'jpg')) with open(file_name, 'wb') as image_file: image_file.write(self.image.read()) data['image'] = file_name else: data.pop('image') data['created_at'] = data['created_at'].strftime(TIME_FORMAT) data.pop('_id') return json_util.dumps(data, *args, **kwargs)
class Doctor(db.Document): name = StringField(max_length=255) surname = StringField(max_length=255) email = EmailField() username = StringField() password = StringField() tags = ListField(StringField()) # List of String TAGS phone = StringField(max_length=255) gender = StringField(max_length=32) address = EmbeddedDocumentField(Address) image = ImageField() signup_date = DateTimeField(default=datetime.utcnow) online = BooleanField(default=False) specialization = StringField(max_length=255) about = StringField(max_length=255) experience = StringField() pmdc_verified = BooleanField(default=False) pmdc_reg_num = StringField() verification_status = StringField(default='Pending') verified_by = ReferenceField('Operator') verification_date = DateTimeField() meta = {'indexes': ['$name']}
class Bicycle(Document): ''' Clase que define el modelo bicicleta ''' name = StringField(required=True) price = FloatField(required=True) colors = ListField(StringField(), required=True) stock = IntField(default=1) use = StringField(default="General") image = ImageField(thumbnail_size=(320, 240, False)) def json(self): ''' Metodo que devuelve los atributos de la clase en formato json ''' bicycle_dict = { 'id': str(self.pk), "name": self.name, "price": self.price, "stock": self.stock, "colors": self.colors, "use": self.use, "img": str(base64.b64encode(self.image.read()), 'utf-8'), "thumbnail": str(base64.b64encode(self.image.thumbnail.read()), 'utf-8') } return bicycle_dict meta = {"indexes": ["name"]}
class Menu(UserMixin, Document): meta = {'collection': 'Menu', 'queryset_class': BaseQuerySet} menu_name = StringField(max_length=50, required=True) menu_image = ImageField(max_length=20, required=True) menu_description = StringField(max_length=150, required=True)
class Users(Document): """ Main class representing the Users entities. This is the class in which everything is embedded. """ user_id = ObjectIdField(default=ObjectId) user = EmbeddedDocumentField('User') picture = ImageField() preferences = EmbeddedDocumentField('Preferences') date_created = DateTimeField(default=datetime.datetime.now()) current_coordinates = EmbeddedDocumentField('Coordinates') #friends = ListField(ReferenceField('UsersRelationships')) #wishes = ListField(ReferenceField('Wishes')) #logs = ListField(ReferenceField('Logs')) #messages = ListField(EmbeddedDocumentField('Messages')) #categories_Selected = ListField(EmbeddedDocumentField('Categories')) #medias = ListField(ReferenceField('Medias')) #events_Owned = ListField(ReferenceField('Events')) #interested_in = ListField(ReferenceField('Wishes')) def get_position(self): """ Return formatted position #{ "lat" : 46.1954229 , "lng" : 6.1552161 } :return: """ return "{'lat': " + str( self.current_coordinates.lat) + ", 'lng':" + str( self.current_coordinates.lat) + "}" def date_joined(self): """ Get the date when the user has registered. :return: datetime.datetime """ return self.user.date_joined def relate_to_user(self, user): """ Method used to relate to another user, i.e follow a user. :param user: instance of Users class :return: self """ rel = UsersRelationships(from_user=self, to_user=user, accepted=False, blocked=False) rel.save() return self def accept_follower(self, _users): """ Method used to activate a relationship, i.e accept a follower :param user: :return: """ self.save() return self def add_friend(self, _users): """ :return: """ relation = UsersRelationships(from_user=self, to_user=_users, accepted=False) relation.save() return self def create_wish(self, _title): """ Method used to create a wish :param _title: :param _creation_date: :return: self """ wish = Wishes(user_id=self.id, title=_title, creation_date=datetime.datetime.now()) splitTitle = _title.split(' ') for word in splitTitle: if word.startswith('#'): tag = Tags.objects.get_or_create(title=word) wish.tags.append(tag[0]) wish.save() #Connect and send message to the queue # Use plain credentials for authentication #myrabbit = rabbitmq() #myrabbit.create_connection() #myrabbit.publish_newweesh(wish.id,wish.user_id.user.username) # # myrabbit.close() return wish def create_event(self, **kwargs): if 'thumbnail' in kwargs: event = Events(user_id=self.id, name=kwargs['eventName'], start_date=kwargs['start_date'], end_date=kwargs['end_date'], thumbnail=kwargs['thumbnail'], creation_date=datetime.datetime.now()) else: event = Events(user_id=self.id, name=kwargs['eventName'], start_date=kwargs['start_date'], end_date=kwargs['end_date'], creation_date=datetime.datetime.now()) splitTitle = kwargs['eventName'].split(' ') for word in splitTitle: if word.startswith('#'): tag = Tags.objects.get_or_create(title=word) event.tags.append(tag[0]) event.save() #Connect and send message to the queue # Use plain credentials for authentication myrabbit = rabbitmq() myrabbit.create_connection() myrabbit.publish_newevent(event.id, event.user_id.user.username) myrabbit.close() #mqueue.publish_message('coco', 'New weesh created', channel, 'amq_fanout') #mqueue.close(connection) return event def interests_to_wish(self, _user, _wish): user = Users.objects.get(id=_user.id) wish = next((w for w in user.wishes if w.id == _wish.id), None) wish.add_interested(self) self.interested_in.append(wish) self.save() user.save() return self def add_media(self, _binaryMedia, _label, _event): media = Medias() self.medias.append(media) self.save() return self def my_wishes(self): return self.wishes def get_picture(self): picture = base64.b64encode(self.picture.read()) return picture
class Preferences(EmbeddedDocument): display_weeshes = BooleanField(default=True) display_events = BooleanField(default=True) search_distance = IntField(default=50) selected_network = StringField(default='PUBLIC') background_picture = ImageField()