Esempio n. 1
0
class Version(Model):
    name = CharField(max_length=128)
    description = CharField(max_length=1024, blank=True)
    number = PositiveIntegerField()
    project = ForeignKey(Project, on_delete=CASCADE)
    created_datetime = DateTimeField(auto_now_add=True, null=True, blank=True)
    created_by = ForeignKey(User,
                            on_delete=SET_NULL,
                            null=True,
                            blank=True,
                            related_name='version_created_by')
    show_empty = BooleanField(default=True)
    """ Tells the UI to show this version even if the current media does not
        have any annotations.
    """
    bases = ManyToManyField('self', symmetrical=False, blank=True)
    """ This version is a patch to an existing version. A use-case here is using one version
        for each generation of a state-based inference algorithm; all referencing localizations
        in another layer.
    """
    def __str__(self):
        out = f"{self.name}"
        if self.description:
            out += f" | {self.description}"
        return out
Esempio n. 2
0
class Bookmark(Model):
    """ Stores a link saved by a user.
    """
    project = ForeignKey(Project, on_delete=CASCADE, db_column='project')
    user = ForeignKey(User, on_delete=CASCADE, db_column='user')
    name = CharField(max_length=128)
    uri = CharField(max_length=1024)
Esempio n. 3
0
class Membership(Model):
    """Stores a user and their access level for a project.
    """
    project = ForeignKey(Project, on_delete=CASCADE)
    user = ForeignKey(User, on_delete=CASCADE)
    permission = EnumField(Permission, max_length=1, default=Permission.CAN_EDIT)
    def __str__(self):
        return f'{self.user} | {self.permission} | {self.project}'
Esempio n. 4
0
class Favorite(Model):
    """ Stores an annotation saved by a user.
    """
    project = ForeignKey(Project, on_delete=CASCADE, db_column='project')
    user = ForeignKey(User, on_delete=CASCADE, db_column='user')
    meta = ForeignKey(LocalizationType, on_delete=CASCADE, db_column='meta')
    name = CharField(max_length=128)
    page = PositiveIntegerField(default=1)
    values = JSONField()
Esempio n. 5
0
class Analysis2D(AnalysisBase):
    data_type = ForeignKey(EntityTypeBase, on_delete=CASCADE)
    data_filter = JSONField(null=True, blank=True)
    attribute_x = ForeignKey(AttributeTypeBase,
                             on_delete=CASCADE,
                             related_name='attribute_x')
    attribute_y = ForeignKey(AttributeTypeBase,
                             on_delete=CASCADE,
                             related_name='attribute_y')
    plot_type = EnumField(TwoDPlotType)
Esempio n. 6
0
class EntityLocalizationBase(EntityBase):
    user = ForeignKey(User, on_delete=PROTECT)
    media = ForeignKey(EntityMediaBase, on_delete=CASCADE)
    frame = PositiveIntegerField(null=True)
    thumbnail_image = ForeignKey(EntityMediaImage, on_delete=SET_NULL,
                                 null=True,blank=True,
                                 related_name='thumbnail_image')

    def selectOnMedia(media_id):
        return EntityLocalizationBase.objects.filter(media=media_id)
Esempio n. 7
0
class Affiliation(Model):
    """Stores a user and their permissions in an organization.
    """
    organization = ForeignKey(Organization, on_delete=CASCADE)
    user = ForeignKey(User, on_delete=CASCADE)
    permission = CharField(max_length=16,
                           choices=[('Member', 'Member'), ('Admin', 'Admin')],
                           default='Member')

    def __str__(self):
        return f'{self.user} | {self.organization}'
Esempio n. 8
0
class EntityBase(PolymorphicModel):
    project = ForeignKey(Project, on_delete=CASCADE, null=True, blank=True)
    meta = ForeignKey(EntityTypeBase, on_delete=CASCADE)
    """ Meta points to the defintion of the attribute field. That is
        a handful of AttributeTypes are associated to a given EntityType
        that is pointed to by this value. That set describes the `attribute`
        field of this structure. """
    attributes = JSONField(null=True, blank=True)
    """ The attributes related to this entity, see `meta` for column
        definitions """
    related_media = ForeignKey('EntityBase', on_delete=SET_NULL, null=True, blank=True)
Esempio n. 9
0
class UserFavoriteLayer(Model):
    """
    Created when a layer is "starred" and destroyed when that layer
    is "un-starred".

    Users may "star" their own layers or published layers.
    """
    user = ForeignKey(User)
    layer = ForeignKey(Layer, related_name='favorites')
    created_at = DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return '{0} -> {1}'.format(self.user.username, self.layer.name)
Esempio n. 10
0
class AlgorithmResult(Model):
    algorithm = ForeignKey(Algorithm, on_delete=CASCADE)
    user = ForeignKey(User, on_delete=CASCADE)
    media = ManyToManyField(EntityMediaBase)
    started = DateTimeField()
    stopped = DateTimeField()
    result = EnumField(JobResult)
    message = CharField(max_length=128)
    setup_log = FileField(null=True, blank=True)
    algorithm_log = FileField(null=True, blank=True)
    teardown_log = FileField(null=True, blank=True)

    def __str__(self):
        return f"{self.algorithm.name}, {self.result}, started {self.started}"
Esempio n. 11
0
class AttributeTypeBase(PolymorphicModel):
    """ Generic entity in a JSON-B field.  """
    name = CharField(max_length=64)
    """ Name refers to the key in the JSON structure """
    description = CharField(max_length=256, blank=True)
    """ Human readable description of the column """
    applies_to = ForeignKey(EntityTypeBase, on_delete=CASCADE)
    """ Pointer to the owner of this type description. Either a media,
        state or sequence 'owns' this type and combines it into a set
        with other AttributeTypes to describe an AttributeSet """
    project = ForeignKey(Project, on_delete=CASCADE)
    order = IntegerField(default=0)
    """ Controls order (lower numbers first, negative is hide) """
    def __str__(self):
        return self.name
Esempio n. 12
0
class TemporaryFile(Model):
    """ Represents a temporary file in the system, can be used for algorithm results or temporary outputs """
    name = CharField(max_length=128)
    """ Human readable name for display purposes """
    project = ForeignKey(Project, on_delete=CASCADE)
    """ Project the temporary file resides in """
    user = ForeignKey(User, on_delete=PROTECT)
    """ User who created the temporary file """
    path = FilePathField(path=settings.MEDIA_ROOT, null=True, blank=True)
    """ Path to file on storage """
    lookup = SlugField(max_length=32)
    """ unique lookup (md5sum of something useful) """
    created_datetime = DateTimeField()
    """ Time that the file was created """
    eol_datetime = DateTimeField()
    """ Time the file expires (reaches EoL) """
    def expire(self):
        """ Set a given temporary file as expired """
        past = datetime.datetime.utcnow() - datetime.timedelta(hours=1)
        past = pytz.timezone("UTC").localize(past)
        self.eol_datetime = past
        self.save()

    def from_local(path, name, project, user, lookup, hours, is_upload=False):
        """ Given a local file create a temporary file storage object
        :returns A saved TemporaryFile:
        """
        extension = os.path.splitext(name)[-1]
        destination_fp = os.path.join(settings.MEDIA_ROOT, f"{project.id}",
                                      f"{uuid.uuid1()}{extension}")
        os.makedirs(os.path.dirname(destination_fp), exist_ok=True)
        if is_upload:
            download_uploaded_file(path, user, destination_fp)
        else:
            shutil.copyfile(path, destination_fp)

        now = datetime.datetime.utcnow()
        eol = now + datetime.timedelta(hours=hours)

        temp_file = TemporaryFile(name=name,
                                  project=project,
                                  user=user,
                                  path=destination_fp,
                                  lookup=lookup,
                                  created_datetime=now,
                                  eol_datetime=eol)
        temp_file.save()
        return temp_file
Esempio n. 13
0
class Project(Model):
    name = CharField(max_length=128)
    creator = ForeignKey(User,
                         on_delete=PROTECT,
                         related_name='creator',
                         db_column='creator')
    organization = ForeignKey(Organization,
                              on_delete=SET_NULL,
                              null=True,
                              blank=True,
                              db_column='organization')
    created = DateTimeField(auto_now_add=True)
    size = BigIntegerField(default=0)
    """Size of all media in project in bytes.
    """
    num_files = IntegerField(default=0)
    duration = BigIntegerField(default=0)
    """ Duration of all videos in this project.
    """
    summary = CharField(max_length=1024)
    filter_autocomplete = JSONField(null=True, blank=True)
    attribute_type_uuids = JSONField(default=dict, null=True, blank=True)
    enable_downloads = BooleanField(default=True)
    thumb = CharField(max_length=1024, null=True, blank=True)
    usernames = ArrayField(CharField(max_length=256), default=list)
    """ Mapping between attribute type names and UUIDs. Used internally for 
        maintaining elasticsearch field aliases.
    """
    def has_user(self, user_id):
        return self.membership_set.filter(user_id=user_id).exists()

    def user_permission(self, user_id):
        permission = None
        qs = self.membership_set.filter(user_id=user_id)
        if qs.exists():
            permission = qs[0].permission
        return permission

    def __str__(self):
        return self.name

    def delete(self, *args, **kwargs):
        Version.objects.filter(project=self).delete()
        MediaType.objects.filter(project=self).delete()
        LocalizationType.objects.filter(project=self).delete()
        StateType.objects.filter(project=self).delete()
        LeafType.objects.filter(project=self).delete()
        super().delete(*args, **kwargs)
Esempio n. 14
0
class TreeLeaf(EntityBase):
    parent=ForeignKey('self', on_delete=SET_NULL, blank=True, null=True)
    path=PathField(unique=True)
    name = CharField(max_length=255)

    class Meta:
        verbose_name_plural = "TreeLeaves"

    def __str__(self):
        return str(self.path)

    def depth(self):
        return TreeLeaf.objects.annotate(depth=Depth('path')).get(pk=self.pk).depth

    def subcategories(self, minLevel=1):
        return TreeLeaf.objects.select_related('parent').filter(
            path__descendants=self.path,
            path__depth__gte=self.depth()+minLevel
        )

    def computePath(self):
        """ Returns the string representing the path element """
        pathStr=self.name.replace(" ","_").replace("-","_").replace("(","_").replace(")","_")
        if self.parent:
            pathStr=self.parent.computePath()+"."+pathStr
        elif self.project:
            projName=self.project.name.replace(" ","_").replace("-","_").replace("(","_").replace(")","_")
            pathStr=projName+"."+pathStr
        return pathStr
Esempio n. 15
0
class EntityState(EntityBase):
    """
    A State is an event that occurs, potentially independent, from that of
    a media element. It is associated with 0 (1 to be useful) or more media
    elements. If a frame is supplied it was collected at that time point.
    """
    association = ForeignKey(AssociationType, on_delete=CASCADE)
    version = ForeignKey(Version, on_delete=CASCADE, null=True, blank=True)
    modified = BooleanField(null=True, blank=True)
    """ Indicates whether an annotation is original or modified.
        null: Original upload, no modifications.
        false: Original upload, but was modified or deleted.
        true: Modified since upload or created via web interface.
    """
    def selectOnMedia(media_id):
        return AssociationType.states(media_id)
Esempio n. 16
0
class EntityTypeBase(PolymorphicModel):
    project = ForeignKey(Project, on_delete=CASCADE, null=True, blank=True)
    name = CharField(max_length=64)
    description = CharField(max_length=256, blank=True)
    visible=BooleanField(default=True)
    def __str__(self):
        return f'{self.name} | {self.project}'
Esempio n. 17
0
class CalendarDate(CompanyBoundModel):
    """This is an exception for Calendar
    """
    EXCEPTION_TYPES = (
        ('1', 'Add to service'),
        ('2', 'Remove from service'),
    )
    service = ForeignKey(Calendar)
    date = DateField('Date')
    exception_type = CharField('Exception Type',
                               max_length=1,
                               default='2',
                               choices=EXCEPTION_TYPES)

    class Meta:
        verbose_name_plural = "Calendar Dates"

    def __str__(self):
        return '%s-%s' % (self.pk, self.date)

    @property
    def gtfs_header(self):
        return 'service_id,date,exception_type'

    def gtfs_format(self):
        data = [
            ('service_id', self.service.service_id),
            ('date', self.date.strftime('%Y-%m-%d')),
            ('exception_type', self.exception_type),
        ]
        return OrderedDict(data)
Esempio n. 18
0
class Project(Model):
    name = CharField(max_length=128)
    creator = ForeignKey(User, on_delete=PROTECT, related_name='creator')
    created = DateTimeField(auto_now_add=True)
    size = BigIntegerField(default=0)
    """Size of all media in project in bytes.
    """
    num_files = IntegerField(default=0)
    summary = CharField(max_length=1024)
    filter_autocomplete = JSONField(null=True, blank=True)
    section_order = ArrayField(CharField(max_length=128), default=list)
    def has_user(self, user_id):
        return self.membership_set.filter(user_id=user_id).exists()
    def user_permission(self, user_id):
        permission = None
        qs = self.membership_set.filter(user_id=user_id)
        if qs.exists():
            permission = qs[0].permission
        return permission
    def __str__(self):
        return self.name

    def delete(self, *args, **kwargs):
        # Delete attribute types
        AttributeTypeBase.objects.filter(project=self).delete()
        # Delete entities
        qs = EntityBase.objects.filter(project=self)
        delete_polymorphic_qs(qs)
        # Delete entity types
        qs = EntityTypeBase.objects.filter(project=self)
        delete_polymorphic_qs(qs)
        super().delete(*args, **kwargs)
Esempio n. 19
0
class Section(Model):
    """ Stores either a lucene search or raw elasticsearch query.
    """
    project = ForeignKey(Project, on_delete=CASCADE, db_column='project')
    name = CharField(max_length=128)
    """ Name of the section.
    """
    lucene_search = CharField(max_length=1024, null=True, blank=True)
    """ Optional lucene query syntax search string.
    """
    media_bools = JSONField(null=True, blank=True)
    """ Optional list of elasticsearch boolean queries that should be applied
        to media. These are applied to the boolean query "filter" list.
    """
    annotation_bools = JSONField(null=True, blank=True)
    """ Optional list of elasticsearch boolean queries that should be applied
        to annotations. These are applied to the boolean query "filter" list.
    """
    tator_user_sections = CharField(max_length=128, null=True, blank=True)
    """ Identifier used to label media that is part of this section via the
        tator_user_sections attribute. If not set, this search is not scoped
        to a "folder".
    """
    visible = BooleanField(default=True)
    """ Whether this section should be displayed in the UI.
Esempio n. 20
0
class Order(Base):
    complete = BooleanField(default=False)
    duration = IntegerField(null=True) # how long it took to process the order
    edited = BooleanField(default=False) # tells you whether they opened it for editing... not whether any actual edits were made
    end = DateTimeField(null=True)
    end_user_timezone = CharField(max_length=20, null=True)
    map_format = CharField(max_length=20, null=True)
    open_source = BooleanField(default=False) #is this map open-sourced, such that it can be included in open source training data?
    start = DateTimeField(auto_now_add=True, null=True) # it will never be null, but have to do this because migration asks for default otherwise
    style = ForeignKey("MapStyle", null=True, on_delete=SET_NULL)
    token = CharField(max_length=200, null=True, unique=True) # the random string that's used to find the order in the maps
    url = URLField(null=True, max_length=1000, unique=True) # URL if started from url or iframe embeded on a webpage

    def __str__(self):
        return self.token

    def d(self):
        self.delete_map()
        self.delete()

    def delete_map(self):
        rmtree("/home/usrfd/maps/" + self.token)

    def finish(self):
        self.complete = True
        self.end = end = datetime.now().replace(tzinfo=utc)
        self.duration = (end - self.start).total_seconds()
        self.save()
Esempio n. 21
0
class Project(Model):
    name = CharField(max_length=128)
    creator = ForeignKey(User, on_delete=PROTECT, related_name='creator')
    created = DateTimeField(auto_now_add=True)
    size = BigIntegerField(default=0)
    """Size of all media in project in bytes.
    """
    num_files = IntegerField(default=0)
    summary = CharField(max_length=1024)
    filter_autocomplete = JSONField(null=True, blank=True)

    def has_user(self, user_id):
        return self.membership_set.filter(user_id=user_id).exists()

    def user_permission(self, user_id):
        permission = None
        qs = self.membership_set.filter(user_id=user_id)
        if qs.exists():
            permission = qs[0].permission
        return permission

    def __str__(self):
        return self.name

    def delete(self, *args, **kwargs):
        Version.objects.filter(project=self).delete()
        MediaType.objects.filter(project=self).delete()
        LocalizationType.objects.filter(project=self).delete()
        StateType.objects.filter(project=self).delete()
        LeafType.objects.filter(project=self).delete()
        super().delete(*args, **kwargs)
Esempio n. 22
0
class Analysis(Model):
    project = ForeignKey(Project, on_delete=CASCADE, db_column='project')
    name = CharField(max_length=64)
    data_query = CharField(max_length=1024, default='*')

    def __str__(self):
        return f"{self.project} | {self.name}"
Esempio n. 23
0
class BaseOfferModel(BaseModel):
    agent = ForeignKey(UserProfile, on_delete=SET_NULL, null=True)
    is_published = BooleanField('publicat?', default=False)
    address = PointField('adresă', max_length=200, null=True)
    hide_address_on_imobiliare = BooleanField('ascunde adresa în imobiliare.ro', default=False)
    county = ForeignKey(County, related_name='%(class)ss', related_query_name='%(class)s', on_delete=SET_NULL,
                        null=True, verbose_name='judeţ')
    locality = ForeignKey(Locality, related_name='%(class)ss', related_query_name='%(class)s', on_delete=SET_NULL,
                          null=True, verbose_name='localitate')
    sector = CharField('sectorul', max_length=2, blank=True, default=None, choices=Sector.choices)
    hide_exact_location_on_imobiliare = BooleanField('ascunde localizarea exactă pe imobiliare.ro', default=False)
    postal_code = CharField('cod poştal', max_length=50, blank=True, default=None)
    neighborhood = CharField('vecinătăţi', max_length=100, blank=True, default=None)
    description = TextField('descriere emoţională', default=None, blank=True)

    class Meta:
        abstract = True
Esempio n. 24
0
class EntityLocalizationBase(EntityBase):
    user = ForeignKey(User, on_delete=PROTECT)
    media = ForeignKey(EntityMediaBase, on_delete=CASCADE)
    frame = PositiveIntegerField(null=True)
    thumbnail_image = ForeignKey(EntityMediaImage,
                                 on_delete=SET_NULL,
                                 null=True,
                                 blank=True,
                                 related_name='thumbnail_image')
    version = ForeignKey(Version, on_delete=CASCADE, null=True, blank=True)
    modified = BooleanField(null=True, blank=True)
    """ Indicates whether an annotation is original or modified.
        null: Original upload, no modifications.
        false: Original upload, but was modified or deleted.
        true: Modified since upload or created via web interface.
    """
    def selectOnMedia(media_id):
        return EntityLocalizationBase.objects.filter(media=media_id)
Esempio n. 25
0
class MediaType(Model):
    dtype = CharField(max_length=16,
                      choices=[('image', 'image'), ('video', 'video'),
                               ('multi', 'multi')])
    project = ForeignKey(Project,
                         on_delete=CASCADE,
                         null=True,
                         blank=True,
                         db_column='project')
    name = CharField(max_length=64)
    description = CharField(max_length=256, blank=True)
    visible = BooleanField(default=True)
    """ Whether this type should be displayed in the UI."""
    editTriggers = JSONField(null=True, blank=True)
    file_format = CharField(max_length=4, null=True, blank=True, default=None)
    keep_original = BooleanField(default=True, null=True, blank=True)
    default_volume = IntegerField(default=0)
    """ Default Volume for Videos (default is muted) """
    attribute_types = JSONField(default=list, null=True, blank=True)
    """ User defined attributes.

        An array of objects, each containing the following fields:

        name: Name of the attribute.
        description: (optional) Description of the attribute.
        order: Order that the attribute should appear in web UI. Negative means
               do not display.
        dtype: Data type of the attribute. Valid values are bool, int, float,
               string, enum, datetime, geopos.
        default: (optional) Default value. Valid for all dtypes except datetime.
                 The type should correspond to the dtype (string/enum are strings,
                 int/float are numbers, geopos is a [lon, lat] list).
        minimum: (optional) Minimum value. Valid for int and float dtypes.
        maximum: (optional) Maximum value. Valid for int and float dtypes.
        choices: (optional) Available choices for enum dtype.
        labels: (optional) Labels for available choices for enum dtype.
        autocomplete: (optional) Object of the form {'serviceUrl': '<url>'} that
                      specifies URL of the autocomplete service. Valid for string
                      dtype only.
        use_current: (optional) Boolean indicating whether to use the current time
                     as the default for datetime dtype.
    """
    archive_config = JSONField(default=None, null=True, blank=True)
    streaming_config = JSONField(default=None, null=True, blank=True)
    overlay_config = JSONField(default=None, null=True, blank=True)
    """
    Overlay configuration provides text overlay on video / image based on
    configruation examples:
    Example: {"mode": "constant", "source": "name"} Overlays file name
    Time example:
             {"mode": "datetime", "locale": [locale], "options" : [options]}
            options can contain 'timeZone' which comes from the TZ database name
            https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
            Example: America/Los_Angeles or America/New_York
    """
    def __str__(self):
        return f'{self.name} | {self.project}'
Esempio n. 26
0
class CompanyBoundModel(Model):
    company = ForeignKey('people.Company')

    class Meta:
        abstract = True

    @property
    def gtfs_header(self):
        raise NotImplementedError("Please Implement this property")
Esempio n. 27
0
class Algorithm(Model):
    name = CharField(max_length=128)
    project = ForeignKey(Project, on_delete=CASCADE)
    user = ForeignKey(User, on_delete=PROTECT)
    description = CharField(max_length=1024, null=True, blank=True)
    manifest = FileField(upload_to=ProjectBasedFileLocation, null=True, blank=True)
    cluster = ForeignKey(JobCluster, null=True, blank=True, on_delete=SET_NULL)
    files_per_job = PositiveIntegerField(
        default=1,
        validators=[MinValueValidator(1),]
    )
    max_concurrent = PositiveIntegerField(
        default=1,
        validators=[MinValueValidator(1),]
    )

    def __str__(self):
        return self.name
Esempio n. 28
0
class JobCluster(Model):
    name = CharField(max_length=128)
    owner = ForeignKey(User, null=True, blank=True, on_delete=SET_NULL)
    host = CharField(max_length=1024)
    port = PositiveIntegerField()
    token = CharField(max_length=1024)
    cert = TextField(max_length=2048)

    def __str__(self):
        return self.name
Esempio n. 29
0
class LayerTag(Model):
    """
    Arbitrary value used to describe a layer which may be used
    to discover similar layers with tags in common.
    """
    layer = ForeignKey(Layer, related_name='layer_tags')
    name = CharField(max_length=24)

    def to_json(self):
        return self.name
Esempio n. 30
0
class EntityState(EntityBase):
    """
    A State is an event that occurs, potentially independent, from that of
    a media element. It is associated with 0 (1 to be useful) or more media
    elements. If a frame is supplied it was collected at that time point.
    """
    association = ForeignKey(AssociationType, on_delete=CASCADE)

    def selectOnMedia(media_id):
        return AssociationType.states(media_id)