class LockedDependency(jsl.Document):
    class Options(object):
        definition_id = "metadata_locked_dependency"
        description = "Locked dependency description"

    name = jsl.StringField()
    version = jsl.StringField()
    specification = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    resolved = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    dependencies = jsl.ArrayField(
        jsl.DocumentField(jsl.RECURSIVE_REFERENCE_CONSTANT, as_ref=True))
Пример #2
0
class TargetInfo(jsl.Document):
    docker = jsl.ArrayField([
        jsl.StringField(),
        jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    ])
    rsync = jsl.ArrayField([
        jsl.StringField(),
        jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    ])
    containers = jsl.ArrayField(
        [jsl.StringField(),
         jsl.ArrayField(jsl.StringField())])
class ComponentAnalysis(JSLSchemaBaseWithRelease):
    class Options(object):
        definition_id = "component_analysis"
        description = "Software component analysis"

    ecosystem = jsl.StringField(
        description="Language ecosystem providing the component",
        required=True)
    package = jsl.StringField(description="Component name", required=True)
    version = jsl.StringField(description="Component version", required=True)
    latest_version = jsl.OneOfField(
        [jsl.StringField(), jsl.NullField()],
        description=
        "Latest version available of this component (null if unknown)",
        required=True)
    started_at = jsl.DateTimeField(
        description="Date/time component analysis was started", required=True)
    finished_at = jsl.DateTimeField(
        description="Date/time component analysis was finished", required=True)
    access_count = jsl.NumberField(
        description="Number of times this component has been queried",
        required=True)
    dependents_count = jsl.Var({
        lambda v: v >= ROLE_v1_1_0:
        jsl.NumberField(description="Number of dependent GitHub projects",
                        required=True)
    })

    analyses = jsl.DocumentField(AnalysisSet, as_ref=True, required=True)
    package_info = jsl.DictField(
        description="Additional information related to the package",
        additional_properties=True,
        required=False)
Пример #4
0
 class StackRecommendations(jsl.Document):
     class Options:
         description = "Stack Recommendations"
         definition_id = "stack_recommendations"
     #TODO: Get more details about component_level. Current example responses have this field as Null
     component_level = jsl.NullField(required=True)
     similar_stacks = jsl.ArrayField(jsl.DocumentField(SimilarStacks, as_ref=True), required=True)
Пример #5
0
class ComponentInfo(jsl.Document):
    class Options:
        description = "Information about a single component"
        definition_id = "component_info"

    blackduck_details = jsl.DocumentField(BlackduckDetails, as_ref=True, required=True)
    cve_details = jsl.ArrayField(jsl.DocumentField(CVEDetail, as_ref=True), required=True)
    ecosystem = jsl.StringField(required=True)
    github_details = jsl.DocumentField(GithubDetails, as_ref=True, required=True)
    id = jsl.StringField(required=True)
    latest_version = jsl.OneOfField([jsl.StringField(), jsl.NullField()], required=True)
    licenses = jsl.ArrayField(jsl.StringField(), required=True)
    name = jsl.StringField(required=True)
    package_dependents_count = jsl.NumberField(required=True)
    version = jsl.StringField(required=True)

    with jsl.Scope(lambda v: v >= ROLE_v1_1_0) as added_in_v1_1_0:
        added_in_v1_1_0.dependents_count = jsl.NumberField(required=True)

    with jsl.Scope(lambda v: v >= ROLE_v1_2_0) as added_in_v1_2_0:
        added_in_v1_2_0.relative_usage = jsl.StringField(required=True)

    with jsl.Scope(lambda v: v >= ROLE_v2_0_0) as added_in_v2_0_0:
        added_in_v2_0_0.redhat_usage = jsl.DocumentField(RedHatUsage, as_ref=True, required=True)

    with jsl.Scope(lambda v: v >= ROLE_v2_0_3) as added_in_v2_0_3:
        added_in_v2_0_3.metadata = jsl.DocumentField(ComponentMetadata, as_ref=True, required=True)
Пример #6
0
class AugeasLensProperties(jsl.Document):
    class Options(object):
        definition_id = 'AugeasLensProperties'

    name = jsl.StringField(required=True)
    value = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    properties = jsl.ArrayField(
        jsl.DocumentField(jsl.RECURSIVE_REFERENCE_CONSTANT))
Пример #7
0
class LockedDependency(jsl.Document):
    """JSL schema for locked dependency description."""
    class Options(object):
        """JSL schema for locked dependency description."""

        definition_id = "metadata_locked_dependency"
        description = "Locked dependency description"

    name = jsl.StringField()
    version = jsl.StringField()
    specification = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    resolved = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    dependencies = jsl.ArrayField(
        jsl.DocumentField(jsl.RECURSIVE_REFERENCE_CONSTANT, as_ref=True))
    with added_in(ROLE_v3_3_0) as added_in_v3_3_0:
        added_in_v3_3_0.subpackages = jsl.ArrayField(
            jsl.StringField())  # go glide
class Dependency(jsl.Document):
    class Options(object):
        definition_id = 'dependency_object'
        description = 'Dependency Object'

    ecosystem = jsl.StringField(required=True)
    name = jsl.StringField(required=True)
    version = jsl.OneOfField([jsl.StringField(), jsl.NullField()], required=True)
    declaration = jsl.StringField(required=True)
    resolved_at = jsl.StringField(required=True)
class LinguistDetail(jsl.Document):
    class Options(object):
        definition_id = "linguist_details"
        description = "Details of Linguist run on one file"

    path = jsl.StringField(required=True)
    output = jsl.OneOfField(
        [jsl.DocumentField(LinguistOutput, as_ref=True), jsl.NullField()],
        required=True
    )
    type = jsl.ArrayField(jsl.StringField(), required=True)
Пример #10
0
    class StackRecommendations(jsl.Document):
        """Class with the schema definition based on JSL domain specific language."""
        class Options:
            """A container for options."""

            description = "Stack Recommendations"
            definition_id = "stack_recommendations"

        # TODO: Get more details about component_level. Current example
        # responses have this field as Null
        component_level = jsl.NullField(required=True)
        similar_stacks = jsl.ArrayField(jsl.DocumentField(SimilarStacks,
                                                          as_ref=True),
                                        required=True)
Пример #11
0
class PredicateSchema(jsl.Document):
    """
    A predicate schema

    Attributes:
        operator (str):
            Specify the compare operator of predicate.
            Supported predicates are >, <, >=, <=, !=, and ==.
        value (number, bool, sring, or None):
            The value to compare with of the predicate.
    """
    operator = jsl.StringField(required=True, pattern='[!=><]=|[><]')
    value = jsl.AnyOfField([
        jsl.NumberField(),
        jsl.BooleanField(),
        jsl.StringField(),
        jsl.NullField()], required=True)
Пример #12
0
class MercatorResult(JSLSchemaBaseWithRelease):
    """JSL schema for Mercator worker results."""

    class Options(object):
        """JSL schema for Mercator worker results."""

        definition_id = "metadata"
        description = "Result of Mercator worker"

    # TODO: Any ideas how to reuse MetadataDict here ?
    with jsl.Scope(lambda v: v in (ROLE_v1_0_1, ROLE_v1_1_0)) as v1_0_1_v1_1_0:
        v1_0_1_v1_1_0.npm_shrinkwrap = jsl.OneOfField(
            [jsl.DocumentField(NpmShrinkwrap, as_ref=True), jsl.NullField()])
    with jsl.Scope(lambda v: v < ROLE_v1_1_0) as before_v1_1_0:
        before_v1_1_0.maintainers = jsl.OneOfField(
            [jsl.ArrayField(jsl.DocumentField(Maintainer, as_ref=True)), jsl.NullField()])
    with jsl.Scope(ROLE_v1_1_0) as v1_1_0:
        v1_1_0.contributors = jsl.OneOfField(
            [jsl.ArrayField(jsl.StringField()), jsl.NullField()])
        v1_1_0.maintainers = jsl.OneOfField(
            [jsl.ArrayField(jsl.StringField()), jsl.NullField()])
    with jsl.Scope(lambda v: v < ROLE_v2_0_0) as before_v2_0_0:
        # some of these may be missing in some ecosystem, so no required=True
        before_v2_0_0.author = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
        before_v2_0_0.bug_reporting = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
        before_v2_0_0.code_repository = jsl.OneOfField(
            [jsl.DocumentField(CodeRepository, as_ref=True), jsl.NullField()]
        )
        before_v2_0_0.declared_license = jsl.OneOfField(
            [jsl.StringField(), jsl.NullField()]
        )
        before_v2_0_0.dependencies = jsl.OneOfField(
            [jsl.ArrayField(jsl.StringField()), jsl.NullField()]
        )
        before_v2_0_0.description = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
        before_v2_0_0.devel_dependencies = jsl.OneOfField(
            [jsl.ArrayField(jsl.StringField()), jsl.NullField()]
        )
        # engines are NPM thingie and can contain lots of various keys
        # so we just allow pretty much anything in that dict
        before_v2_0_0.engines = jsl.OneOfField(
            [jsl.DictField(additional_properties=True), jsl.NullField()]
        )
        before_v2_0_0.files = jsl.OneOfField(
            [jsl.ArrayField(jsl.StringField()), jsl.NullField()]
        )
        before_v2_0_0.git_head = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
        before_v2_0_0.homepage = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
        before_v2_0_0.keywords = jsl.OneOfField(
            [jsl.ArrayField(jsl.StringField()), jsl.NullField()]
        )

        before_v2_0_0.maintainers = jsl.OneOfField(
                [jsl.ArrayField(jsl.StringField()), jsl.NullField()])

        # metadata is a rubygems thing and can contain arbitrary key/value pairs
        before_v2_0_0.metadata = jsl.OneOfField(
            [jsl.DictField(additional_properties=True), jsl.NullField()]
                )
        before_v2_0_0.name = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
        before_v2_0_0.platform = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
        before_v2_0_0.readme = jsl.OneOfField([jsl.StringField(), jsl.NullField()])

        before_v2_0_0.scripts = jsl.OneOfField(
            [jsl.DictField(additional_properties=True), jsl.NullField()]
        )
        before_v2_0_0.version = jsl.OneOfField([jsl.StringField(), jsl.NullField()])


# 2.0.0

    with jsl.Scope(ROLE_v2_0_0) as v2_0_0:
        v2_0_0.details = jsl.ArrayField(jsl.OneOfField(
            [jsl.DocumentField(MetadataDict, as_ref=True),
             jsl.DocumentField(NpmShrinkwrap, as_ref=True)]
        ))

# 2.1.0
    with added_in(ROLE_v2_1_0) as since_v2_1_0:
        since_v2_1_0.details = jsl.ArrayField(jsl.DocumentField(MetadataDict, as_ref=True))

# 3.1.0
    with added_in(ROLE_v3_1_0) as since_v3_1:
        since_v3_1.status = jsl.StringField(enum=["success", "error"], required=True)
        since_v3_1.summary = jsl.ArrayField(jsl.StringField(), required=True)
Пример #13
0
class MetadataDict(jsl.Document):
    """JSL schema for generic metadata dict in details list."""

    class Options(object):
        """JSL schema for generic metadata dict in details list."""

        definition_id = "details_metadata"
        description = "generic metadata dict in details list"

    # some of these may be missing in some ecosystem, so no required=True
    author = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    bug_reporting = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    code_repository = jsl.OneOfField(
        [jsl.DocumentField(CodeRepository, as_ref=True), jsl.NullField()]
    )

    with removed_in(ROLE_v3_2_0) as removed_in_v3_2_0:
        removed_in_v3_2_0.declared_license = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    with added_in(ROLE_v3_2_0) as added_in_v3_2_0:
        added_in_v3_2_0.declared_licenses = jsl.OneOfField([jsl.ArrayField(jsl.StringField()),
                                                            jsl.NullField()])

    dependencies = jsl.OneOfField(
        [jsl.ArrayField(jsl.StringField()), jsl.NullField()]
    )
    description = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    devel_dependencies = jsl.OneOfField(
        [jsl.ArrayField(jsl.StringField()), jsl.NullField()]
    )
    # engines are NPM thingie and can contain lots of various keys
    # so we just allow pretty much anything in that dict
    engines = jsl.OneOfField(
        [jsl.DictField(additional_properties=True), jsl.NullField()]
    )
    files = jsl.OneOfField(
        [jsl.ArrayField(jsl.StringField()), jsl.NullField()]
    )
    git_head = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    homepage = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    keywords = jsl.OneOfField(
        [jsl.ArrayField(jsl.StringField()), jsl.NullField()]
    )

    # metadata is a rubygems thing and can contain arbitrary key/value pairs
    metadata = jsl.OneOfField(
        [jsl.DictField(additional_properties=True), jsl.NullField()]
    )
    name = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    platform = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    readme = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    scripts = jsl.OneOfField(
        [jsl.DictField(additional_properties=True), jsl.NullField()]
    )
    version = jsl.OneOfField([jsl.StringField(), jsl.NullField()])

    with jsl.Scope(lambda v: v in (ROLE_v1_0_1, ROLE_v1_1_0)) as v1_0_1_v1_1_0:
        v1_0_1_v1_1_0.npm_shrinkwrap = jsl.OneOfField(
            [jsl.DocumentField(NpmShrinkwrap, as_ref=True), jsl.NullField()])
    with jsl.Scope(lambda v: v < ROLE_v1_1_0) as before_v1_1_0:
        before_v1_1_0.maintainers = jsl.OneOfField(
                    [jsl.ArrayField(jsl.DocumentField(Maintainer, as_ref=True)), jsl.NullField()])
    with added_in(ROLE_v1_1_0) as since_v1_1_0:
        since_v1_1_0.contributors = jsl.OneOfField(
                    [jsl.ArrayField(jsl.StringField()), jsl.NullField()])
        since_v1_1_0.maintainers = jsl.OneOfField(
                    [jsl.ArrayField(jsl.StringField()), jsl.NullField()])
    with jsl.Scope(ROLE_v2_0_0) as v2_0_0:
        v2_0_0._system = jsl.StringField()
    with jsl.Scope(lambda v: ROLE_v2_1_0 <= v < ROLE_v3_0_0) as since_v2_1_0:
        since_v2_1_0._bayesian_dependency_tree_lock = jsl.OneOfField([
            jsl.DocumentField(LockFile, as_ref=True), jsl.NullField()
        ])
    with added_in(ROLE_v2_1_1) as since_v2_1_1:
        since_v2_1_1._tests_implemented = jsl.BooleanField()
    with added_in(ROLE_v3_0_0) as since_v3_0_0:
        since_v3_0_0.ecosystem = jsl.StringField()
        since_v3_0_0._dependency_tree_lock = jsl.OneOfField([
            jsl.DocumentField(LockFile, as_ref=True), jsl.NullField()
        ])
    with added_in(ROLE_v3_1_1) as since_v3_1_1:
        since_v3_1_1.path = jsl.OneOfField(
            [jsl.StringField(), jsl.NullField()],
            required=False
        )
Пример #14
0
def _set_nullable(prop):
    if not prop.required:
        return jsl.OneOfField([prop, jsl.NullField(name=prop.name)])
    return prop
Пример #15
0
class MetadataDict(jsl.Document):
    """JSL schema for generic metadata dict in details list."""
    class Options(object):
        """JSL schema for generic metadata dict in details list."""

        definition_id = "details_metadata"
        description = "generic metadata dict in details list"

    # some of these may be missing in some ecosystem, so no required=True

    # 'author' should have been list of 'authors', but it's too late now
    author = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    bug_reporting = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    code_repository = jsl.OneOfField(
        [jsl.DocumentField(CodeRepository, as_ref=True),
         jsl.NullField()])

    declared_licenses = jsl.OneOfField(
        [jsl.ArrayField(jsl.StringField()),
         jsl.NullField()])

    dependencies = jsl.OneOfField(
        [jsl.ArrayField(jsl.StringField()),
         jsl.NullField()])
    description = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    devel_dependencies = jsl.OneOfField(
        [jsl.ArrayField(jsl.StringField()),
         jsl.NullField()])
    # engines are NPM thingie and can contain lots of various keys
    # so we just allow pretty much anything in that dict
    engines = jsl.OneOfField(
        [jsl.DictField(additional_properties=True),
         jsl.NullField()])
    files = jsl.OneOfField(
        [jsl.ArrayField(jsl.StringField()),
         jsl.NullField()])
    git_head = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    homepage = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    keywords = jsl.OneOfField(
        [jsl.ArrayField(jsl.StringField()),
         jsl.NullField()])

    # metadata is a rubygems thing and can contain arbitrary key/value pairs
    metadata = jsl.OneOfField(
        [jsl.DictField(additional_properties=True),
         jsl.NullField()])
    name = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    platform = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    readme = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    scripts = jsl.OneOfField(
        [jsl.DictField(additional_properties=True),
         jsl.NullField()])
    version = jsl.OneOfField([jsl.StringField(), jsl.NullField()])

    contributors = jsl.OneOfField(
        [jsl.ArrayField(jsl.StringField()),
         jsl.NullField()])
    maintainers = jsl.OneOfField(
        [jsl.ArrayField(jsl.StringField()),
         jsl.NullField()])
    _tests_implemented = jsl.BooleanField()
    ecosystem = jsl.StringField()
    _dependency_tree_lock = jsl.OneOfField(
        [jsl.DocumentField(LockFile, as_ref=True),
         jsl.NullField()])
    path = jsl.OneOfField([jsl.StringField(), jsl.NullField()], required=False)