Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
oyaji / oyaji / places / models.py
Size: Mime:
# -*- coding: utf-8 -*-
# Python


# Third

from bson.objectid import ObjectId
from mongoengine import (
    Document,
    EmbeddedDocument,
    EmbeddedDocumentListField,
    EmbeddedDocumentField,
    ListField,
    FloatField,
    StringField,
    BooleanField,
    IntField,
    ObjectIdField,
)


# Apps
from oyaji.core.models import Description
from oyaji.cities.models import City
from oyaji.places.consts import PROVIDERS_VIDEOS, PROVIDER_YOUTUBE


class ArticlesRelated(EmbeddedDocument):
    key = StringField(required=True)
    spotlight = BooleanField(default=False)
    title = StringField(required=True)
    url = StringField(required=False)


class VideosRelated(EmbeddedDocument):
    key = StringField(required=True)
    spotlight = BooleanField(default=False)
    title = StringField(required=True)
    provider = StringField(
        required=False, choices=PROVIDERS_VIDEOS, default=PROVIDER_YOUTUBE
    )
    url = StringField(required=False)
    video_id = StringField(required=False)


class Location(EmbeddedDocument):
    latitude = StringField(required=True)
    longitude = StringField(required=True)


class NameMixin:
    name = StringField(required=True)
    slug = StringField(required=True, unique=True)

    name_en = StringField()
    slug_en = StringField()

    name_es = StringField()
    slug_es = StringField()


class RelatedPlaceLocation(EmbeddedDocument):
    key = StringField(required=True)
    name = StringField(required=True)
    slug = StringField(required=True)

    name_en = StringField()
    slug_en = StringField()

    name_es = StringField()
    slug_es = StringField()

    latitude = StringField(required=True)
    longitude = StringField(required=True)


class PlaceAbstract(NameMixin):

    meta = {"abstract": True, "collection": "places"}

    description = EmbeddedDocumentField(Description, required=True, default=Description)

    description_en = EmbeddedDocumentField(
        Description, required=False, default=Description
    )

    description_es = EmbeddedDocumentField(
        Description, required=False, default=Description
    )

    types = ListField(StringField, default=[])
    rating = FloatField(deafault=0)
    likes = IntField(default=0)
    views = IntField(default=0)

    city = EmbeddedDocumentField(City, required=True, default=City)
    location = EmbeddedDocumentField(Location, required=False)

    articles_related = EmbeddedDocumentListField(ArticlesRelated, default=[])
    videos_related = EmbeddedDocumentListField(VideosRelated, default=[])
    places_related = EmbeddedDocumentListField(RelatedPlaceLocation, default=[])

    created_elastic_search_index = BooleanField(default=False)


class Place(Document, PlaceAbstract):
    pass