class Range(IIIFModel): # PROPERTIES FOR INTERNAL USE identifier = fields.StringField( required=True, unique_with='name', regex=valid_name, help_text=("The identifier this Range belongs to.")) name = fields.StringField(required=True, unique_with='identifier', regex=valid_name, help_text=("The name of this IIIF Range.")) # TECHNICAL PROPERTIES ATtype = fields.StringField( required=True, default='sc:Range', regex=valid_type, help_text=("The type of this IIIF resource. Must be: sc:Range.")) viewingDirection = fields.StringField( null=True, help_text= ("The direction that a range of canvases should be displayed to the user. A manifest may have exactly one viewing direction, and if so, it applies to all of its ranges unless the range specifies its own viewing direction." )) # LINKING PROPERTIES startCanvas = fields.URLField( null=True, help_text= ("A link from a range or range to a canvas that is contained within the range." )) contentLayer = fields.URLField( null=True, help_text= ("Ranges may also link to a layer, that has the content of the range using the contentLayer linking property. This allows, for example, the range representing a newspaper article that is split across multiple pages to be linked with the text of the article." ))
class Place(gj.Document): title = fields.StringField(required=True, max_length=70, unique_with='address') main_category = fields.StringField(max_length=30, choices=src.categories) categories = fields.ListField(fields.StringField(max_length=30, choices=src.categories), default=[]) main_cuisine = fields.StringField(max_length=30, choices=src.cuisines) cuisines = fields.ListField(fields.StringField(max_length=30, choices=src.cuisines), default=[]) additional_services = fields.ListField(fields.StringField( max_length=30, choices=src.additional_services), default=[]) description = fields.StringField(max_length=3000) phone = fields.StringField(required=True, max_length=20, unique=True) instagram = fields.URLField() website = fields.URLField() timezone = fields.StringField(required=True) opening_hours = fields.ListField(field=fields.ListField( field=fields.DateTimeField(default=datetime.utcnow), max_length=2), max_length=7, default=[[None, None]] * 7) address = fields.EmbeddedDocumentField(Address, required=True) main_photo = fields.ReferenceField(Image, reverse_delete_rule=NULLIFY) photos = fields.ListField(fields.ReferenceField(Image, reverse_delete_rule=PULL), default=[]) general_review = fields.ReferenceField(GeneralReview, reverse_delete_rule=NULLIFY, unique=True) configuration = fields.EmbeddedDocumentField(Configuration) is_active = fields.BooleanField(default=False)
class Media(Document): tag = fields.StringField() date = fields.DateTimeField(required=True) url = fields.URLField(required=True) type = fields.StringField(required=True, choices=('photo', 'video')) thumbnail_url = fields.URLField() instagram = fields.EmbeddedDocumentField(Instagram) meta = {'ordering': ['-date']}
class Piloto(Document): #id=fields.ObjectId nombre = fields.StringField(required=False) pais = fields.StringField(required=False) wiki_piloto = fields.URLField(required=False) #Wikipedia foto_piloto = fields.URLField(required=False) #Wikipedia num_campeonatos_ganados = fields.StringField(required=False) datos_anuales = fields.ListField( required=False ) #Año, V Media, Moto Usada, Posicion Campeonato, Carreras Ganadas
class Recipe(Document): """ Ingredients and instructions to prepare one dish """ name = fields.StringField() url = fields.StringField(unique=True) importedFrom = fields.URLField() author = fields.StringField(default="Cory Dodt") image = fields.URLField() prepTime = fields.StringField() cookTime = fields.StringField() recipeYield = fields.StringField() tags = fields.ListField(fields.StringField()) calories = fields.IntField() ingredients = fields.ListField(fields.StringField()) instructions = fields.ListField(fields.StringField()) @classmethod def fromLoadedData(cls, jsonData): """ Load data from the simple datastructure extracted by recipeschema """ props = jsonData['properties'] name = props['name'][0] url = urlifyName(name) self, created = cls.objects.get_or_create(url=url) self.name = name self.url = urlifyName(self.name) self.image = props.get('image', [None])[0] self.author = props.get('author', [None])[0] self.recipeYield = props.get('recipeYield', [None])[0] keys = props.keys() if 'ingredients' in keys and 'recipeInstructions' in keys and 'importedFromURL' in keys: self.ingredients = [] for i in props['ingredients']: ings = filter(None, [x.strip() for x in i.split(ITEM_SEPARATOR)]) self.ingredients.extend(ings) self.instructions = [] for ii in props['recipeInstructions']: inses = filter(None, [x.strip() for x in ii.split(ITEM_SEPARATOR)]) self.instructions.extend(inses) self.importedFrom = props['importedFromURL'] return self else: return None
class Usuario(Document): usuario = fields.StringField(required=True, max_length=30) email = fields.EmailField(required=True, max_length=150) nombre = fields.StringField(max_length=50) password = fields.StringField(required=True, min_length=8) imagen = fields.URLField(required=False) descripcion = fields.StringField(max_length=500) listaSeguidores = fields.ListField(fields.ReferenceField('Usuario')) listaSeguidos = fields.ListField(fields.ReferenceField('Usuario')) listaPublicaciones = fields.ListField(fields.ReferenceField('Publicacion')) listaComentariosPublicaciones = fields.ListField( fields.ReferenceField('Publicacion')) listaGraffitisPublicaciones = fields.ListField( fields.ReferenceField('Publicacion')) def delete(self, *args, **kwargs): for publicacion in self.listaComentariosPublicaciones: comentarios = publicacion.listaComentarios for comentario in comentarios: if comentario.autor == self: publicacion.__class__.objects.update( pull__listaComentarios=comentario) for publicacion in self.listaGraffitisPublicaciones: graffitis = publicacion.listaGraffitis for graffiti in graffitis: if graffiti.autor == self: publicacion.__class__.objects.update( pull__listaGraffitis=graffiti) super().delete()
class RegularModel(Document): """ A model class for testing regular flat fields. """ str_field = fields.StringField() str_regex_field = fields.StringField(regex="^valid_regex") url_field = fields.URLField() email_field = fields.EmailField() int_field = fields.IntField() long_field = fields.LongField() float_field = fields.FloatField() boolean_field = fields.BooleanField() nullboolean_field = fields.BooleanField(null=True) date_field = fields.DateTimeField() complexdate_field = fields.ComplexDateTimeField() uuid_field = fields.UUIDField() id_field = fields.ObjectIdField() decimal_field = fields.DecimalField() custom_field = CustomField() # TODO # dynamic_field = fields.DynamicField() # bin_field = fields.BinaryField() # file_field = fields.FileField() # image_field = fields.ImageField() def method(self): return 'method'
class ChargeStation(Document): meta = { "indexes": [ 'network', 'locationId', ] } id = fields.IntField(required=True, primary_key=True) network = fields.ReferenceField(Network) locationId = fields.IntField(required=True) name = fields.StringField(required=True, max_length=200) #0 = Unknown #1 = Free #2 = Fee cost = fields.IntField() cost_description = fields.StringField(max_length=1000) address = fields.StringField(max_length=300) available = fields.IntField(required=True) hours = fields.StringField(max_length=400) geoLocation = fields.PointField(auto_index=True) score = fields.FloatField(min_value=0, max_value=10.0, required=True) images = fields.ListField(fields.URLField()) chargePoints = fields.ListField(fields.ReferenceField(ChargePoint)) created_at = fields.DateTimeField() modified_at = fields.DateTimeField(default=datetime.datetime.utcnow())
class Category(Document): name = fields.MapField(fields.StringField()) description = fields.MapField(fields.StringField()) icon_url = fields.URLField(max_length=200, required=True, default=HOME_ICON) has_questions = fields.BooleanField(required=True, default=False)
class Sequence(IIIFModel): # PROPERTIES FOR INTERNAL USE identifier = fields.StringField( required=True, unique_with='name', regex=valid_name, help_text=("The identifier this Sequence belongs to.")) name = fields.StringField(required=True, unique_with='identifier', regex=valid_name, help_text=("The name of this IIIF Sequence.")) # TECHNICAL PROPERTIES ATtype = fields.StringField( required=True, default='sc:Sequence', regex=valid_type, help_text=("The type of this IIIF resource. Must be: sc:Sequence.")) viewingDirection = fields.StringField( null=True, help_text= ("The direction that a sequence of canvases should be displayed to the user. A manifest may have exactly one viewing direction, and if so, it applies to all of its sequences unless the sequence specifies its own viewing direction." )) # LINKING PROPERTIES startCanvas = fields.URLField( null=True, help_text= ("A link from a sequence or range to a canvas that is contained within the sequence." ))
class Graffiti(EmbeddedDocument): _id = fields.ObjectIdField(required=True, default=lambda: fields.ObjectId()) imagen = fields.URLField(required=True) estado = fields.StringField(required=True) #poner enumerado fechaCaptura = fields.DateField(required=True) autor = fields.ReferenceField(Usuario, required=True)
class Receta(Document): contenido = fields.StringField() imagen = fields.URLField() me_gusta = fields.ListField(fields.DynamicField()) nombre = fields.StringField() autor = fields.ReferenceField(Autor, reverse_delete_rule=2) ingredientes = fields.EmbeddedDocumentListField(Ingrediente)
class Recipe(Document): title = f.StringField(required=True, unique=True) image = f.FileField(required=False) content = f.StringField(required=False) redirect = f.URLField(required=False) favorite = f.BooleanField(default=False) type_recipe = f.StringField(required=True, choices=['starter', 'main', 'dessert'])
class User(Document): email = fields.EmailField(unique=True) password = fields.StringField() name = fields.StringField() profile = fields.URLField() acquisition_date = fields.DateTimeField() last_login = fields.DateTimeField() boards = fields.ListField(fields.LazyReferenceField('Board'))
class PLO(Document): numero = fields.StringField(required=True, null=False) autor = fields.StringField(required=False, null=True) ementa = fields.StringField(required=True, null=False) em_tramitacao = fields.BooleanField(required=True, null=False) eh_polemico = fields.BooleanField(required=True, null=False) apelido = fields.StringField(required=False, null=True) tramites = fields.StringField(required=False, null=True) texto_integral = fields.URLField(required=False, null=True)
class Shop(Document): name = fields.StringField() picture = fields.URLField() email = fields.EmailField() city = fields.StringField() location = fields.PointField() def __str__(self): return self.name
class JobOffer(JobPosition): title = fields.StringField() company = fields.StringField(max_length=100) languages = fields.ListField(fields.StringField()) offer_link = fields.URLField() source_page = fields.StringField(max_length=100) active = fields.BooleanField(default=True) offer_hash = fields.StringField(max_length=62) def __str__(self): return f'Title: {self.title}' + f'\nCompany: {self.company}' + f'\nCompany Size: {self.company_size}' + f'\nAddress: {self.location.address}' + f'\nExperience Level: {self.experience_level}' + f'\nCompany Size: {self.company_size}' + f'\nTechnologies: {self.technologies}' + f'\nLanguages: {self.languages}' + f'\nContracts: {self.finances.contracts}' + f'\nSalary b2b: {self.finances.salary.b2b}' + f'\nSalary uop: {self.finances.salary.uop}' + f'\nDate: {self.date}' + f'\nSource Page: {self.source_page}' + f'\nIs Active: {self.active}' + f'\nOffer hash: {self.offer_hash}'
class Shops(Document): meta = {'db_alias': 'shops', 'collection': 'shops'} name = fields.StringField() picture = fields.URLField() email = fields.EmailField() city = fields.StringField() location = fields.PointField() def __str__(self): return self.name
class SimpleDoc(Document): f_str = fields.StringField() f_url = fields.URLField() f_eml = fields.EmailField() f_int = fields.IntField() f_lng = fields.LongField() f_flt = fields.FloatField() f_dec = fields.DecimalField() f_bool = fields.BooleanField() f_dt = fields.DateTimeField() f_oid = fields.ObjectIdField() f_uuid = fields.UUIDField()
class URL(Document): meta = {'strict': False, 'collection': 'urls'} url = fields.URLField(required=True, unique=True) title = fields.StringField() lang = fields.StringField() imageUrls = fields.ListField(fields.StringField()) words = fields.ListField(fields.StringField()) words_len = fields.IntField() lastmod = fields.StringField() requestId = fields.StringField() passage = fields.StringField() user_meta = fields.DictField()
class TestDocument(Document): string_field = fields.StringField( verbose_name='A string', regex=r'[\w]+', max_length=100, min_length=10, help_text='Fill in a string', ) url_field = fields.URLField( verbose_name='An URL', help_text='Fill in an URL', ) email_field = fields.EmailField( verbose_name='An e-mail address', regex=r'.*', max_length=101, min_length=11, help_text='Fill in an e-mail address', ) int_field = fields.IntField( verbose_name='An int', min_value=1, max_value=102, help_text='Fill in an int', ) float_field = fields.FloatField( verbose_name='A float', min_value=2, max_value=103, help_text='Fill in a float', ) decimal_field = fields.DecimalField( verbose_name='A decimal', min_value=3, max_value=104, help_text='Fill in a decimal', ) datetime_field = fields.DateTimeField( verbose_name='A datetime', help_text='Fill in a datetime', ) boolean_field = fields.BooleanField( verbose_name='A bool', help_text='Yes or no?', )
class User(Document): name = fields.StringField(required=True) profession = fields.StringField() email = fields.EmailField() phone = fields.StringField() website = fields.URLField() github = fields.StringField() summary = fields.StringField() skills = fields.ListField(fields.StringField()) career = fields.ListField(fields.EmbeddedDocumentField(Job)) education = fields.ListField(fields.EmbeddedDocumentField(Degree)) def __str__(self): return self.name
class Article(DynamicDocument): title = fields.StringField(verbose_name="title") cover = fields.StringField(blank=True) content = fields.StringField() origin_link = fields.URLField(verbose_name="origin_link") published_at = fields.DateTimeField() tags = fields.ListField(blank=True) type = fields.StringField(verbose_name="type") scrapy_mongodb = fields.DictField(db_field="scrapy-mongodb") meta = { "collection": "bitcoin", "ordering": ["-published_at"], "indexes": ["$title", { "fields": ["published_at"] }], "index_background": True, }
class User(AbstractUser): """ VERSION ISSUES: In Mongoengine <= 0.9 there is a mongoengine.django subpackage, which implements mongoengine User document and its integration with django authentication system. In Mongoengine >= 0.10 mongoengine.django was extracted from Mongoengine codebase and moved into a separate repository - django-mongoengine. That repository contains an AbstractBaseUser class, so that you can just inherit your User model from it, instead of copy-pasting the following 200 lines of boilerplate code from mongoengine.django.auth.User. """ about = fields.StringField(max_length=1000, blank=True) website = fields.URLField(blank=True) # For email validation email_is_valid = fields.BooleanField(default=False)
class NewsItem(Document): """ News Items from Crawler """ id = fields.ObjectIdField(required=False, db_field='_id') url = fields.URLField(required=True) headline = fields.StringField(required=False, null=True) body = fields.DynamicField(required=False, null=True) meta = { 'indexes': [{ 'fields': ['$headline', "$body"], 'default_language': 'english', 'weights': { 'headline': 10, 'body': 2 } }] }
class Location(Document): meta = {"indexes": []} id = fields.IntField(required=True, primary_key=True) address = fields.StringField(required=True, max_length=300) name = fields.StringField(required=True, max_length=200) description = fields.StringField(max_length=8192) phone = fields.StringField(max_length=20) poi_name = fields.StringField(max_length=30) parking_type_name = fields.StringField(max_length=20) cost_description = fields.StringField(max_length=1024) open247 = fields.BooleanField() amenities = fields.ListField(fields.StringField()) stations = fields.ListField(fields.ReferenceField(ChargeStation)) hours = fields.StringField(max_length=2048) score = fields.FloatField(min_value=0.0, max_value=10.0) photos = fields.ListField(fields.URLField()) geoLocation = fields.PointField(auto_index=True) created_at = fields.DateTimeField() modified_at = fields.DateTimeField(default=datetime.datetime.utcnow())
class User(Document): name = fields.StringField(max_length=30, default="") otp = fields.StringField(max_length=4, default="1111") expiry = fields.DateTimeField() email = fields.StringField(default="", required=False) mobile = fields.StringField(max_length=10, required=True) address = fields.StringField(max_length=300, default="") user_language = fields.StringField(choices=LANGS, required=True, default='english') profile_image = fields.URLField(default=HOME_ICON) base_location = fields.StringField(max_length=500, required=False) user_type = fields.StringField(choices=USER_TYPE, default="consumer", required=False) work_radius = fields.IntField(min_value=3, max_value=10, required=False) work_category = fields.StringField(min_value=1, max_length=100, required=False) meta = {"db_alias": "default"}
class Person(Document): _id = fields.StringField() index = fields.IntField(unique=True) guid = fields.UUIDField(unique=True) has_died = fields.BooleanField() balance = fields.FloatField() picture = fields.URLField() age = fields.IntField() eyeColor = fields.StringField() name = fields.StringField() gender = fields.StringField() company_id = fields.IntField() email = fields.EmailField(unique=True) phone = fields.StringField() address = fields.MultiLineStringField() about = fields.MultiLineStringField() registered = fields.DateTimeField() tags = fields.ListField(fields.StringField()) friends = fields.ListField(fields.DictField()) greeting = fields.MultiLineStringField() favouriteFood = fields.ListField(fields.StringField()) # this field will require splitting into fruit and vegetables favouriteFruits = fields.ListField(fields.StringField()) favouriteVegetables = fields.ListField(fields.StringField()) KNOWN_FRUITS = ['apple', 'orange', 'banana', 'strawberry', 'cucumber'] KNOWN_VEGGIES = ['beetroot', 'carrot', 'celery'] @staticmethod def split_foods_into_fruits_and_vegetables(foods): """ Take a list of foods and split into a list of fruits and a list of veggies. :param foods: list of foods :return: tuple containing list of ruits first, then veggies """ fruits = [f for f in foods if f in Person.KNOWN_FRUITS] veggies = [f for f in foods if f in Person.KNOWN_VEGGIES] return (fruits, veggies)
class Chatbox(Document): title = fields.StringField(required=True) live_status = fields.BooleanField(default=False) owner_id = fields.IntField(required=False) created_on = fields.DateTimeField(default=datetime.datetime.now) updated_on = fields.DateTimeField(default=datetime.datetime.now) WIDGET_PUBLISH = { 'UCS': 'Chatbox Under Constructions', 'PUB': 'Chatbox Published', } publish_status = fields.StringField(max_length=3, choices=WIDGET_PUBLISH.keys(), default='UCS') preview_url = fields.URLField(required=False) components = fields.ListField( fields.EmbeddedDocumentField(ChatboxComponent), required=False) @property def chatbox_publish_status(self): return self.codes(self.publish_status) @classmethod def pre_save(cls, sender, document, **kwargs): document.updated_on = datetime.datetime.now()
class JobItem(DynamicDocument): spider = fields.StringField(max_length=200, required=True) job = fields.StringField(max_length=200, required=True) url = fields.URLField() time = fields.DateTimeField()