Ejemplo n.º 1
0
class OOHMediaSource(MediaSource):
    """
    Out of house advertising media type.
    """
    type = 'ooh'
    point = GeoPointField()
    # Uniquely identify OOH instance
    # by location
    location_hash = StringField()

    # Basic attributes
    street_name = StringField()
    city = StringField()
    state = StringField()
    country = StringField()
    pin = StringField()

    # Other attributes
    # 40,30
    size = ListField(default=[])
    lighting_type = StringField()
    ooh_type = StringField()
    area = FloatField()
    min_booking_days = FloatField(default=15.0)

    # Pricing
    pricing = ReferenceField('Pricing', required=False)
    # Bookings
    booking = ReferenceField('Booking', required=False)
    # Advanced parameters
    image_url = StringField()
    primary_image_content = ReferenceField('JpegImageContent')

    def get_absolute_url(self):
        return "/mediasource/ooh/%i/" % self.id
Ejemplo n.º 2
0
class AmenityExtension(Document):
    """
    Each Mediaaggregate instance can be supplemented using
    different extension. And it is purely based on the
    choice of the Mediaaggregate owner.
    For example, adding or listing brands in a shopping mall.
    or listing the retail extensions in a Shopping mall.
    """
    ex_name = StringField()
    ex_type = StringField()
    userref = ReferenceField('MediaUser')
    amenityref = ReferenceField('MediaAggregate')
    common_name = StringField(required=True)
    image_url = StringField(required=False)
    image = ReferenceField('JpegImageContent', required=False)
    valid_from = DateTimeField(default=datetime.now())
    category = StringField(required=False)
    tagwords = StringField(required=False)
    # Contact details
    phone_numbers = ListField()
    email = StringField()
    # Exact location where the services are offered. (optional)
    point = GeoPointField(required=False)
    # meta
    meta = {'allow_inheritance': True}

    class Meta:
        abstract = True
Ejemplo n.º 3
0
class Sensor(MediaSource):
    name = StringField(required=True)
    uuid = StringField(required=True, unique=True)
    # beacon, wifi, gps etc.
    type = "sensor"
    range = FloatField(default=10.0)
    #     zone_name = StringField(required=False)
    #     zone_id = StringField(required=True)

    # vendor info - nikaza, nearby, google
    vendor = StringField(default='nearby', required=False)
    # Mac Addr
    mac_address = StringField(required=True)

    # Every sensor can be associated with
    # an optional [lat,lng] fields.
    location = GeoPointField(required=False)
    # reference to the venue
    venue = ReferenceField('Venue', required=False)
    # vendor metadata
    # for e.g. Nikaza {zoneId: "", zoneName: ""}
    sensor_meta = DictField(default={}, required=False)

    meta = {'allow_inheritance': True}

    class Meta:
        abstract = True

    def get_absolute_url(self):
        return "/mediasource/sensor/%s/" % (self.id)
Ejemplo n.º 4
0
class Area(Document):
    meta = {
        "strict": False,
        "auto_create_index": False,
        "collection": "noc.gis.areas"
    }

    name = StringField()
    is_active = BooleanField(default=True)
    min_zoom = IntField(default=0)
    max_zoom = IntField(default=18)
    # (EPSG:4326) coordinates
    SW = GeoPointField()
    NE = GeoPointField()
    description = StringField(required=False)

    def __str__(self):
        return self.name
Ejemplo n.º 5
0
class DigitalMediaSource(MediaSource):
    """
    Digital media inside home/mall advertising media type.
    For example, retail outlets,  etc.
    """
    type = 'digital'
    source_internet_settings = DictField(required=True)
    category = StringField(required=True)
    point = GeoPointField()

    def get_absolute_url(self):
        return "/mediasource/digital/%i/" % self.id
Ejemplo n.º 6
0
class MediaAggregate(Document):
    """
    Location specific amenities.
    Every MediaAggregate could could contain one or more
    Media sources
    """
    # Type
    typespec = ReferenceField('MediaAggregateType', required=False)
    # Demographic properties
    name = StringField()
    display_name = StringField()
    description = StringField()
    survey_name = StringField()
    address1 = StringField()
    address2 = StringField()
    city = StringField()
    state = StringField()
    country = StringField()
    # Creation attributes
    owner = ReferenceField('MediaUser', required=False)
    created_time = DateTimeField(default=datetime.now())
    updated_time = DateTimeField(required=False)
    # Control
    enabled = BooleanField(required=False, default=False)
    # geo-enabled properties
    location = GeoPointField()
    poi_marker_data = DictField(required=False)
    # IoT properties
    internet_settings = DictField(required=False)
    # Image properties
    icon_image_url = StringField(default="")
    icon_content = ReferenceField('JpegImageContent', required=False)
    image_url = StringField(default="")
    image_content = ReferenceField('JpegImageContent', required=False)
    # e.g. Mall as the media-source
    inhouse_source = ReferenceField('DigitalMediaSource', required=False)
    # retail sources inside a MediaAggregate
    digital_sourcelist = ListField(ReferenceField('DigitalMediaSource'),
                                   default=[],
                                   required=False)
    # OOH advertisement source for MediaAggregate
    ooh_sourcelist = ListField(ReferenceField('OOHMediaSource'),
                               default=[],
                               required=False)
    # Radio advertisement source for MediaAggregate
    radio_sourcelist = ListField(ReferenceField('RadioMediaSource'),
                                 default=[],
                                 required=False)

    def get_absolute_url(self):
        return "/mediaaggregates/%i/" % self.id
Ejemplo n.º 7
0
class FloatingMediaSource(MediaSource):
    """
    Floating media source represents a physical source that can be
    moved along a path with a floating range of coverage with respect
    to its current location.
    For example, moving bus ,  etc.
    """
    type = 'floating'
    category = StringField(required=True)
    # Latest Geo location reported
    point = GeoPointField()
    # Radius in KMs
    coverage_area = FloatField(default=0.5)

    def get_absolute_url(self):
        return "/mediasource/floating/%i/" % self.id
Ejemplo n.º 8
0
class Ad(Document):
    """
    Advertisement impression on Users mobile device.
    Represents the base class for possible advertisement
    impression types.
    """
    url = StringField(required=False)
    display_url = StringField(required=False)

    # TBD (Sonu): Collection of product urls
    final_urls = StringField(required=False)
    mobile_urls = StringField(required=False)
    app_urls = StringField(required=False)

    # Customer trusted tracking
    thirdparty_tracking_url = StringField(required=False)

    # AdWise tracking
    adwise_tracking_url = StringField(required=False)

    # Location tag
    # TBD: Make tags very generic by nature.
    # For example, tags should be search'able- location,
    # genre, keywords etc.
    ad_location_tag = GeoPointField(required=False)

    # Meta
    ad_type = StringField(required=False)
    custom_parameters = DictField(required=False)
    device_preference = IntegerField(required=False)

    # Campaign this Ad refers to.
    campaign = ReferenceField('Campaign', required=False)
    # List of extension
    offerex = ListField(ReferenceField('OfferExtension'), required=False)
    socialex = ListField(ReferenceField('SocialExtension'), required=False)
    # reference - DRF field
    url = fields.URLField(source='get_absolute_url', read_only=False)

    # meta
    meta = {'allow_inheritance': True}

    class Meta:
        abstract = True

    def get_absolute_url(self):
        return "/mediacontent/ads/%i/" % self.id
Ejemplo n.º 9
0
class Amenity(Document):
    """
    Unique amenity
    """
    node_id = StringField(required=True)
    # lat/lon
    point = GeoPointField(required=True)
    # type from OSM
    type = StringField(required=True)
    name = StringField(required=True)
    # tags returned by OSM native APIs
    tags = DictField()
    # book keeping entries
    creation_date = DateTimeField(default=datetime.now())
    updation_date = DateTimeField(default=datetime.now())

    def get_absolute_url(self):
        return "/mediasource/nearby/amenity/%i/" % self.id
Ejemplo n.º 10
0
class OnlineMediaSource(MediaSource):
    """
    Online media source represents a virtual source that can be
    specified with a floating range of coverage.
    Cloud media source have multiple locations to deliver ads in, 
    all simultaneously.
    For example, online ,  etc.
    """
    type = 'online'
    home_url = StringField(required=True)
    verification_url = StringField(required=True)
    category = StringField(required=True)

    # geo-fences
    fence = GeoPointField(required=True)
    radius = IntegerField(default=100)

    def get_absolute_url(self):
        return "/mediasource/online/%i/" % self.id
Ejemplo n.º 11
0
class LocationExtension(AdExtension):
    """
    This extension add locations to the advertisement
    impression.
    """
    locationName = StringField()
    locationCode = StringField()
    locationPrimaryPhone = StringField()
    locationPrimaryCategory = StringField()
    locationtWebsiteUrl = URLField()
    locationAddresslines = ListField()
    locationAddressLocality = StringField()
    locationAdministrativeArea = StringField()
    locationCountry = StringField()
    locationPostalCode = StringField()
    # optional
    locationcode = GeoPointField()

    def get_absolute_url(self):
        return "/mediacontent/ads/extension/location/%i/" % self.id
Ejemplo n.º 12
0
class Restaurant(Document):
    # Restaurant documents are saved in the collection 'restaurants'
    meta = {'collection': 'restaurants'}

    # General required values for a restaurant document
    restaurantName = StringField(required=True)
    restaurantTags = ListField(StringField(max_length=50), default=[])
    description = StringField(required=True, max_length=2500)
    dateOpen = DateTimeField(required=True)

    # Referenced values for a restaurant document
    # If the owner of the restaurant is deleted, then the restaurant is also deleted. The
    # restaurant being deleted deletes all associated reviews, whose are then pulled from their
    # associated users.
    ownerid = LazyReferenceField('Owner',
                                 required=True,
                                 reverse_delete_rule=CASCADE)
    reviews = ListField(LazyReferenceField('Review'), default=list)

    # Location values for a restaurant document
    address = StringField(required=True)
    address2 = StringField()

    city = StringField(required=True)
    zipcode = StringField(required=True)
    state = StringField(required=True)
    location = GeoPointField(required=True)

    # Details about the restaurant, such as hours open and other miscellaneous details
    hours = EmbeddedDocumentField(Hours, required=True, default=DEFAULT_HOURS)
    details = EmbeddedDocumentField(Details)

    # Website link, list of menus, and list of images
    # Menu and images contain a list of urls used to access images via S3 Bucket
    website = StringField()
    menu = ListField(StringField())
    images = ListField(StringField())

    # Limelight condition to display specific restaurant discount
    limelightCondition = StringField(default="")
Ejemplo n.º 13
0
class Venue(Document):
    """
    A venue that is relevant to a visitor.
    For example, a retail outlet can have multiple
    venues.

    Typically a venue represents an information
    source. A visitor can extract some information
    being near to the venue.

    A visitor can be in vicitnity of many venues at
    any given point in time.

    Venue forms the grouping of sensors.
    Venue forms the object for reporting.
    """
    # Which source
    source = ReferenceField('MediaSource', required=False)
    # venue properties
    venue_name = StringField(unique=True)
    #     venue_id = StringField(required=False)

    #     zone_name = StringField(required=False)
    #     zone_id = StringField(required=False)

    venue_address = StringField()
    venue_type = StringField()
    point = GeoPointField()

    # vendor specific meta by vendor name
    # for e.g. {"nikaza": {venueId:""}, "nearby": {}}
    venue_meta = DictField(default={}, required=False)
    # created
    created_time = DateTimeField(default=datetime.now(), required=False)

    sensors = ListField(ReferenceField('Sensor'))

    def get_absolute_url(self):
        return "/mediacontent/venue/%s/" % (self.id)