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:
kairat_kushaev 2016-09-02 15:28:19 +03:00
parent 76cdd1a6f7
commit b0bfe9432b
8 changed files with 59 additions and 31 deletions

View File

@ -24,7 +24,7 @@ from glare.db import artifact_api
from glare.i18n import _
from glare import locking
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__)

View File

@ -31,10 +31,10 @@ from glare.common import utils
from glare.db import artifact_api
from glare import locking
from glare.i18n import _, _LI
from glare.objects import attribute
from glare.objects import fields as glare_fields
from glare.objects.fields import BlobFieldType as BlobStatus
from glare.objects import validators
from glare.objects.meta import attribute
from glare.objects.meta import fields as glare_fields
from glare.objects.meta.fields import BlobFieldType as BlobStatus
from glare.objects.meta import validators
artifact_opts = [
cfg.BoolOpt('delayed_blob_delete', default=False,
@ -84,45 +84,62 @@ class BaseArtifact(base.VersionedObject):
fields = {
'id': Field(fields.StringField, system=True,
validators=[validators.UUID()], nullable=False,
sortable=True),
sortable=True, description="Artifact UUID."),
'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,
required_on_activate=False, nullable=False,
sortable=True),
sortable=True, description="ID of user/tenant who "
"uploaded artifact."),
'status': Field(glare_fields.ArtifactStatusField,
default=glare_fields.ArtifactStatusField.QUEUED,
nullable=False, sortable=True),
nullable=False, sortable=True,
description="Artifact status."),
'created_at': Field(fields.DateTimeField, system=True,
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,
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,
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,
required_on_activate=False, default="",
validators=[validators.MaxStrLen(4096)],
filter_ops=[]),
filter_ops=[],
description="Artifact description."),
'tags': ListField(fields.String, mutable=True,
required_on_activate=False,
# tags are filtered without any operators
filter_ops=[],
element_validators=[validators.ForbiddenChars(
[',', '/'])]),
[',', '/'])],
description="List of tags added to Artifact."),
'metadata': DictField(fields.String, required_on_activate=False,
element_validators=[validators.MinStrLen(1)],
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',
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,
default=DEFAULT_ARTIFACT_VERSION,
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,
validators=[
validators.AllowedDictKeys(
@ -131,21 +148,31 @@ class BaseArtifact(base.VersionedObject):
("name", "href", "company"))
],
default=None,
required_on_activate=False),
required_on_activate=False,
description="Info about artifact authors."),
'supported_by': DictField(fields.String,
validators=[
validators.RequiredDictKeys(("name",))
],
default=None,
required_on_activate=False),
required_on_activate=False,
description="Info about persons who "
"responsible for artifact "
"support"),
'release': ListField(fields.String,
validators=[validators.Unique()],
required_on_activate=False),
'icon': Blob(required_on_activate=False),
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,
required_on_activate=False),
required_on_activate=False,
description="Artifact license type."),
'license_url': Field(fields.StringField,
required_on_activate=False),
required_on_activate=False,
description="URL to artifact license."),
}
@classmethod

View File

View File

@ -17,8 +17,8 @@ import six
from oslo_versionedobjects import fields
from glare.common import exception as exc
from glare.objects import fields as glare_fields
from glare.objects import validators as val_lib
from glare.objects.meta import fields as glare_fields
from glare.objects.meta import validators as val_lib
FILTERS = (
FILTER_EQ, FILTER_NEQ, FILTER_IN, FILTER_GT, FILTER_GTE, FILTER_LT,
@ -28,7 +28,7 @@ FILTERS = (
class Attribute(object):
def __init__(self, field_class, mutable=False, required_on_activate=True,
system=False, validators=None, nullable=True, default=None,
sortable=False, filter_ops=None):
sortable=False, filter_ops=None, description=""):
"""Init and validate attribute"""
if not issubclass(field_class, fields.AutoTypedField):
raise exc.IncorrectArtifactType(
@ -63,7 +63,8 @@ class Attribute(object):
"Cannot specify filters for blobs")
self.filter_ops = []
self.field_attrs = ['mutable', 'required_on_activate', 'system',
'sortable', 'filter_ops']
'sortable', 'filter_ops', 'description']
self.description = description
def get_default_validators(self):
default = []

View File

@ -20,7 +20,7 @@ from oslo_utils import encodeutils
from oslo_versionedobjects import fields
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__)

View File

@ -17,10 +17,10 @@
from oslo_log import log as logging
from oslo_versionedobjects import fields
from glare.objects import attribute
from glare.objects import base as base_artifact
from glare.objects import fields as glare_fields
from glare.objects import validators
from glare.objects.meta import attribute
from glare.objects.meta import fields as glare_fields
from glare.objects.meta import validators
LOG = logging.getLogger(__name__)