Move meta-artifact code to separate folder
It is better to move all code about artifact attributes to separate folder. It helps users and devs easily to see available artifact types. Change-Id: I388a02f346c2bf94c9dfbc6f8c1bb4b9d25930b4
This commit is contained in:
parent
76cdd1a6f7
commit
b0bfe9432b
|
@ -24,7 +24,7 @@ from glare.db import artifact_api
|
||||||
from glare.i18n import _
|
from glare.i18n import _
|
||||||
from glare import locking
|
from glare import locking
|
||||||
from glare.notification import Notifier
|
from glare.notification import Notifier
|
||||||
from glare.objects import registry as glare_registry
|
from glare.objects.meta import registry as glare_registry
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
|
@ -31,10 +31,10 @@ from glare.common import utils
|
||||||
from glare.db import artifact_api
|
from glare.db import artifact_api
|
||||||
from glare import locking
|
from glare import locking
|
||||||
from glare.i18n import _, _LI
|
from glare.i18n import _, _LI
|
||||||
from glare.objects import attribute
|
from glare.objects.meta import attribute
|
||||||
from glare.objects import fields as glare_fields
|
from glare.objects.meta import fields as glare_fields
|
||||||
from glare.objects.fields import BlobFieldType as BlobStatus
|
from glare.objects.meta.fields import BlobFieldType as BlobStatus
|
||||||
from glare.objects import validators
|
from glare.objects.meta import validators
|
||||||
|
|
||||||
artifact_opts = [
|
artifact_opts = [
|
||||||
cfg.BoolOpt('delayed_blob_delete', default=False,
|
cfg.BoolOpt('delayed_blob_delete', default=False,
|
||||||
|
@ -84,45 +84,62 @@ class BaseArtifact(base.VersionedObject):
|
||||||
fields = {
|
fields = {
|
||||||
'id': Field(fields.StringField, system=True,
|
'id': Field(fields.StringField, system=True,
|
||||||
validators=[validators.UUID()], nullable=False,
|
validators=[validators.UUID()], nullable=False,
|
||||||
sortable=True),
|
sortable=True, description="Artifact UUID."),
|
||||||
'name': Field(fields.StringField, required_on_activate=False,
|
'name': Field(fields.StringField, required_on_activate=False,
|
||||||
nullable=False, sortable=True),
|
nullable=False, sortable=True,
|
||||||
|
description="Artifact Name."),
|
||||||
'owner': Field(fields.StringField, system=True,
|
'owner': Field(fields.StringField, system=True,
|
||||||
required_on_activate=False, nullable=False,
|
required_on_activate=False, nullable=False,
|
||||||
sortable=True),
|
sortable=True, description="ID of user/tenant who "
|
||||||
|
"uploaded artifact."),
|
||||||
'status': Field(glare_fields.ArtifactStatusField,
|
'status': Field(glare_fields.ArtifactStatusField,
|
||||||
default=glare_fields.ArtifactStatusField.QUEUED,
|
default=glare_fields.ArtifactStatusField.QUEUED,
|
||||||
nullable=False, sortable=True),
|
nullable=False, sortable=True,
|
||||||
|
description="Artifact status."),
|
||||||
'created_at': Field(fields.DateTimeField, system=True,
|
'created_at': Field(fields.DateTimeField, system=True,
|
||||||
filter_ops=attribute.FILTERS,
|
filter_ops=attribute.FILTERS,
|
||||||
nullable=False, sortable=True),
|
nullable=False, sortable=True,
|
||||||
|
description="Datetime when artifact has "
|
||||||
|
"been created."),
|
||||||
'updated_at': Field(fields.DateTimeField, system=True,
|
'updated_at': Field(fields.DateTimeField, system=True,
|
||||||
filter_ops=attribute.FILTERS,
|
filter_ops=attribute.FILTERS,
|
||||||
nullable=False, sortable=True),
|
nullable=False, sortable=True,
|
||||||
|
description="Datetime when artifact has "
|
||||||
|
"been updated last time."),
|
||||||
'activated_at': Field(fields.DateTimeField, system=True,
|
'activated_at': Field(fields.DateTimeField, system=True,
|
||||||
filter_ops=attribute.FILTERS,
|
filter_ops=attribute.FILTERS,
|
||||||
required_on_activate=False, sortable=True),
|
required_on_activate=False, sortable=True,
|
||||||
|
description="Datetime when artifact has became "
|
||||||
|
"active."),
|
||||||
'description': Field(fields.StringField, mutable=True,
|
'description': Field(fields.StringField, mutable=True,
|
||||||
required_on_activate=False, default="",
|
required_on_activate=False, default="",
|
||||||
validators=[validators.MaxStrLen(4096)],
|
validators=[validators.MaxStrLen(4096)],
|
||||||
filter_ops=[]),
|
filter_ops=[],
|
||||||
|
description="Artifact description."),
|
||||||
'tags': ListField(fields.String, mutable=True,
|
'tags': ListField(fields.String, mutable=True,
|
||||||
required_on_activate=False,
|
required_on_activate=False,
|
||||||
# tags are filtered without any operators
|
# tags are filtered without any operators
|
||||||
filter_ops=[],
|
filter_ops=[],
|
||||||
element_validators=[validators.ForbiddenChars(
|
element_validators=[validators.ForbiddenChars(
|
||||||
[',', '/'])]),
|
[',', '/'])],
|
||||||
|
description="List of tags added to Artifact."),
|
||||||
'metadata': DictField(fields.String, required_on_activate=False,
|
'metadata': DictField(fields.String, required_on_activate=False,
|
||||||
element_validators=[validators.MinStrLen(1)],
|
element_validators=[validators.MinStrLen(1)],
|
||||||
filter_ops=(attribute.FILTER_EQ,
|
filter_ops=(attribute.FILTER_EQ,
|
||||||
attribute.FILTER_NEQ)),
|
attribute.FILTER_NEQ),
|
||||||
|
description="Key-value dict with useful "
|
||||||
|
"information about an artifact."),
|
||||||
'visibility': Field(fields.StringField, default='private',
|
'visibility': Field(fields.StringField, default='private',
|
||||||
nullable=False, filter_ops=(attribute.FILTER_EQ,),
|
nullable=False, filter_ops=(attribute.FILTER_EQ,),
|
||||||
sortable=True),
|
sortable=True,
|
||||||
|
description="Artifact visibility that defines "
|
||||||
|
"if artifact can be available to "
|
||||||
|
"other users."),
|
||||||
'version': Field(glare_fields.VersionField, required_on_activate=False,
|
'version': Field(glare_fields.VersionField, required_on_activate=False,
|
||||||
default=DEFAULT_ARTIFACT_VERSION,
|
default=DEFAULT_ARTIFACT_VERSION,
|
||||||
filter_ops=attribute.FILTERS, nullable=False,
|
filter_ops=attribute.FILTERS, nullable=False,
|
||||||
sortable=True, validators=[validators.Version()]),
|
sortable=True, validators=[validators.Version()],
|
||||||
|
description="Artifact version(semver)."),
|
||||||
'provided_by': DictField(fields.String,
|
'provided_by': DictField(fields.String,
|
||||||
validators=[
|
validators=[
|
||||||
validators.AllowedDictKeys(
|
validators.AllowedDictKeys(
|
||||||
|
@ -131,21 +148,31 @@ class BaseArtifact(base.VersionedObject):
|
||||||
("name", "href", "company"))
|
("name", "href", "company"))
|
||||||
],
|
],
|
||||||
default=None,
|
default=None,
|
||||||
required_on_activate=False),
|
required_on_activate=False,
|
||||||
|
description="Info about artifact authors."),
|
||||||
'supported_by': DictField(fields.String,
|
'supported_by': DictField(fields.String,
|
||||||
validators=[
|
validators=[
|
||||||
validators.RequiredDictKeys(("name",))
|
validators.RequiredDictKeys(("name",))
|
||||||
],
|
],
|
||||||
default=None,
|
default=None,
|
||||||
required_on_activate=False),
|
required_on_activate=False,
|
||||||
|
description="Info about persons who "
|
||||||
|
"responsible for artifact "
|
||||||
|
"support"),
|
||||||
'release': ListField(fields.String,
|
'release': ListField(fields.String,
|
||||||
validators=[validators.Unique()],
|
validators=[validators.Unique()],
|
||||||
required_on_activate=False),
|
required_on_activate=False,
|
||||||
'icon': Blob(required_on_activate=False),
|
description="Target Openstack release "
|
||||||
|
"for artifact. It is usually the same"
|
||||||
|
" when artifact was uploaded."),
|
||||||
|
'icon': Blob(required_on_activate=False,
|
||||||
|
description="Artifact icon."),
|
||||||
'license': Field(fields.StringField,
|
'license': Field(fields.StringField,
|
||||||
required_on_activate=False),
|
required_on_activate=False,
|
||||||
|
description="Artifact license type."),
|
||||||
'license_url': Field(fields.StringField,
|
'license_url': Field(fields.StringField,
|
||||||
required_on_activate=False),
|
required_on_activate=False,
|
||||||
|
description="URL to artifact license."),
|
||||||
}
|
}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
|
@ -17,8 +17,8 @@ import six
|
||||||
from oslo_versionedobjects import fields
|
from oslo_versionedobjects import fields
|
||||||
|
|
||||||
from glare.common import exception as exc
|
from glare.common import exception as exc
|
||||||
from glare.objects import fields as glare_fields
|
from glare.objects.meta import fields as glare_fields
|
||||||
from glare.objects import validators as val_lib
|
from glare.objects.meta import validators as val_lib
|
||||||
|
|
||||||
FILTERS = (
|
FILTERS = (
|
||||||
FILTER_EQ, FILTER_NEQ, FILTER_IN, FILTER_GT, FILTER_GTE, FILTER_LT,
|
FILTER_EQ, FILTER_NEQ, FILTER_IN, FILTER_GT, FILTER_GTE, FILTER_LT,
|
||||||
|
@ -28,7 +28,7 @@ FILTERS = (
|
||||||
class Attribute(object):
|
class Attribute(object):
|
||||||
def __init__(self, field_class, mutable=False, required_on_activate=True,
|
def __init__(self, field_class, mutable=False, required_on_activate=True,
|
||||||
system=False, validators=None, nullable=True, default=None,
|
system=False, validators=None, nullable=True, default=None,
|
||||||
sortable=False, filter_ops=None):
|
sortable=False, filter_ops=None, description=""):
|
||||||
"""Init and validate attribute"""
|
"""Init and validate attribute"""
|
||||||
if not issubclass(field_class, fields.AutoTypedField):
|
if not issubclass(field_class, fields.AutoTypedField):
|
||||||
raise exc.IncorrectArtifactType(
|
raise exc.IncorrectArtifactType(
|
||||||
|
@ -63,7 +63,8 @@ class Attribute(object):
|
||||||
"Cannot specify filters for blobs")
|
"Cannot specify filters for blobs")
|
||||||
self.filter_ops = []
|
self.filter_ops = []
|
||||||
self.field_attrs = ['mutable', 'required_on_activate', 'system',
|
self.field_attrs = ['mutable', 'required_on_activate', 'system',
|
||||||
'sortable', 'filter_ops']
|
'sortable', 'filter_ops', 'description']
|
||||||
|
self.description = description
|
||||||
|
|
||||||
def get_default_validators(self):
|
def get_default_validators(self):
|
||||||
default = []
|
default = []
|
|
@ -20,7 +20,7 @@ from oslo_utils import encodeutils
|
||||||
from oslo_versionedobjects import fields
|
from oslo_versionedobjects import fields
|
||||||
|
|
||||||
from glare.i18n import _
|
from glare.i18n import _
|
||||||
from glare.objects import fields as glare_fields
|
from glare.objects.meta import fields as glare_fields
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
|
@ -17,10 +17,10 @@
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
from oslo_versionedobjects import fields
|
from oslo_versionedobjects import fields
|
||||||
|
|
||||||
from glare.objects import attribute
|
|
||||||
from glare.objects import base as base_artifact
|
from glare.objects import base as base_artifact
|
||||||
from glare.objects import fields as glare_fields
|
from glare.objects.meta import attribute
|
||||||
from glare.objects import validators
|
from glare.objects.meta import fields as glare_fields
|
||||||
|
from glare.objects.meta import validators
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue