示例#1
0
class Service(jsl.Document):
    class Options(object):
        definition_id = "service"
        title = "Service Specification"

    type = jsl.StringField(description="Type of chute service.",
                           enum=["light", "normal", "image"])
    source = jsl.StringField(description="Source directory for this service.")
    image = jsl.StringField(
        description=
        "Image specification for services that pull a Docker image.", )
    command = jsl.AnyOfField(
        [jsl.StringField(),
         jsl.ArrayField(items=jsl.StringField())])

    dns = jsl.ArrayField(
        description="List of DNS servers to be used within the container.",
        items=jsl.StringField())
    environment = jsl.DictField(description="Environment variables.")
    interfaces = jsl.DictField(
        pattern_properties={
            "\w{1,16}":
            jsl.DocumentField(Interface, as_ref=True, title="ChuteInterface")
        },
        description="Network interfaces to be connected.")
    requests = jsl.DocumentField(
        ChuteRequests,
        description="Extra features and privileges requested for the service.")
示例#2
0
class hReview(Microformat):
    type = type_of('h-review')
    properties = jsl.DictField(
        required=True,
        properties={
            'name':
            string_array,
            'item':
            jsl.ArrayField(
                jsl.OneOfField([
                    jsl.StringField(),
                    jsl.DocumentField(hCard, as_ref=True),
                    jsl.DocumentField(hItem, as_ref=True),
                    jsl.DocumentField(hProduct, as_ref=True),
                    jsl.DocumentField(hEvent, as_ref=True),
                    jsl.DocumentField(hAdr, as_ref=True),
                    jsl.DocumentField(hGeo, as_ref=True),
                ])),
            'author':
            jsl.ArrayField(
                jsl.OneOfField(
                    [jsl.StringField(),
                     jsl.DocumentField(hCard, as_ref=True)])),
            'published':
            datetime_array,
            'rating':
            jsl.ArrayField(jsl.StringField()),
            'category':
            string_array,
            'url':
            uri_array,
            'content':
            content_array,
        },
    )
示例#3
0
class TodoSchema(jsl.Document):
    """
    A Todo schema

    Attributes:
        id (int):
            A unique id for the todo.
        description (str):
            A text description of the todo.
        items (array):
            An array of sub-todos of this todo.
        skip_if (array):
            An array of conditions to skip this todo. If any of the
            condition is true, the todo is skipped. Each condition is a
            dictionary of attributes and predicates which get ANDed together.
        remove_if (array):
            An array of conditions to remove this todo. If any of the
            condition is true, the todo is removed. Each condition is a
            dictionary of attributes and predicates which get ANDed together.
    """
    id = jsl.IntField(required=True)
    description = jsl.StringField(required=True)
    items = jsl.ArrayField(jsl.DocumentField('TodoSchema'))
    skip_if = jsl.ArrayField(
        jsl.DictField(
            pattern_properties={'.*': jsl.DocumentField('PredicateSchema')}))
    remove_if = jsl.ArrayField(
        jsl.DictField(
            pattern_properties={'.*': jsl.DocumentField('PredicateSchema')}))
示例#4
0
class StackAnalysisResponse(JSLSchemaBase):
    """Class with the schema definition based on JSL domain specific language."""
    class Options:
        """A container for options."""

        description = "Stack analysis"
        definition_id = "stack_analysis"

    with jsl.Scope(lambda v: v < ROLE_v2_0_1) as before_v2_0_1:
        before_v2_0_1.status = jsl.StringField(
            enum=["FINISHED", "FAILED", "INPROGRESS"], required=True)
    with jsl.Scope(lambda v: v >= ROLE_v2_0_1) as since_v2_0_1:
        since_v2_0_1.status = jsl.StringField(enum=["success"], required=True)
    submitted_at = jsl.DateTimeField(required=True)
    started_at = jsl.DateTimeField(required=True)
    finished_at = jsl.DateTimeField(required=True)
    request_id = jsl.StringField(required=True)
    with jsl.Scope(lambda v: v < ROLE_v2_1_0) as removed_in_v2_1_0:
        removed_in_v2_1_0.analyses_result = jsl.ArrayField(jsl.StringField(),
                                                           required=True)
    with jsl.Scope(lambda v: v == ROLE_v1_0_0 or v == ROLE_v1_1_0 or v ==
                   ROLE_v1_2_0) as upto_v1_2_0:
        upto_v1_2_0.result = jsl.DocumentField(StackAnalysisResult,
                                               required=True)
    with jsl.Scope(lambda v: v >= ROLE_v2_0_0) as added_in_v2_0_0:
        added_in_v2_0_0.result = jsl.ArrayField(jsl.DocumentField(
            StackAnalysisReport, as_ref=True),
                                                required=True)
示例#5
0
class BlackduckDetails(jsl.Document):
    class Options:
        description = "Blackduck information for a single component"
        definition_id = "component_blackduck_info"

    license = jsl.ArrayField(jsl.DocumentField(BlackduckLicenseDetails, as_ref=True))
    security = jsl.ArrayField(jsl.DocumentField(BlackduckSecurityDetails, as_ref=True))
示例#6
0
class GithubDetail(jsl.Document):
    """JSL schema for Github worker results details."""
    class Options(object):
        """JSL schema for Github worker results details."""

        definition_id = "github_extracted_details"
        description = "Details of Github inspection"

    # we don't mandate any of these fields, because they may not be present
    forks_count = jsl.IntField()
    last_year_commits = jsl.DocumentField(GithubLastYearCommits, as_ref=True)
    open_issues_count = jsl.IntField()
    stargazers_count = jsl.IntField()
    subscribers_count = jsl.IntField()
    with removed_in(ROLE_v2_0_0) as until_v2_0_0:
        until_v2_0_0.updated_issues = jsl.DocumentField(GithubUpdatedIssues,
                                                        as_ref=True)
        until_v2_0_0.updated_pull_requests = jsl.DocumentField(
            GithubUpdatedPullRequests, as_ref=True)
    with added_in(ROLE_v1_0_2) as since_v1_0_2:
        since_v1_0_2.contributors_count = jsl.IntField()
    with jsl.Scope(ROLE_v1_0_3) as v1_0_3:
        v1_0_3.topics = jsl.ArrayField(jsl.StringField(), required=True)
    with added_in(ROLE_v1_0_4) as since_v1_0_4:
        since_v1_0_4.topics = jsl.ArrayField(jsl.StringField())
    with added_in(ROLE_v2_0_1) as since_v2_0_1:
        since_v2_0_1.license = jsl.DictField()
    with added_in(ROLE_v2_0_2) as since_v2_0_2:
        since_v2_0_2.updated_on = jsl.StringField(required=True)
示例#7
0
class StackAnalysisReport(jsl.Document):
    """Class with the schema definition based on JSL domain specific language."""
    class Options:
        """A container for options."""

        description = "Stack analysis report with aggregated data"
        definition_id = "stack_analysis_report"

    with jsl.Scope(lambda v: v >= ROLE_v2_0_0) as v2_0_0:
        v2_0_0.manifest_name = jsl.StringField(required=True)
        v2_0_0.ecosystem = jsl.StringField(required=True)
        v2_0_0.cvss = jsl.NumberField(required=True)
        v2_0_0.popularity = jsl.DocumentField(Popularity,
                                              as_ref=True,
                                              Required=True)
        v2_0_0.usage = jsl.DocumentField(Usage, as_ref=True, Required=True)
    with jsl.Scope(lambda v: v >= ROLE_v2_0_2) as v2_0_2:
        v2_0_2.recommendation = jsl.DocumentField(Recommendation, as_ref=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(Metadata,
                                                     as_ref=True,
                                                     required=True)

    analyzed_components = jsl.NumberField(required=True)
    total_security_issues = jsl.NumberField(required=True)
    total_licenses = jsl.NumberField(required=True)
    components_with_security_issues = jsl.ArrayField(jsl.StringField(),
                                                     required=True)
    distinct_licenses = jsl.ArrayField(jsl.StringField(), required=True)
    components = jsl.ArrayField(jsl.DocumentField(ComponentInfo, as_ref=True),
                                required=True)
示例#8
0
class TomlMetadata(GenericSchema):
    """Schema for siem rule toml metadata."""

    creation_date = jsl.StringField(required=True,
                                    pattern=DATE_PATTERN,
                                    default=time.strftime('%Y/%m/%d'))

    # rule validated against each ecs schema contained
    beats_version = jsl.StringField(pattern=VERSION_PATTERN, required=False)
    ecs_versions = jsl.ArrayField(jsl.StringField(pattern=VERSION_PATTERN,
                                                  required=True),
                                  required=False)
    maturity = jsl.StringField(enum=MATURITY_LEVELS,
                               default='development',
                               required=True)

    os_type_list = jsl.ArrayField(jsl.StringField(enum=OS_OPTIONS),
                                  required=False)
    related_endpoint_rules = jsl.ArrayField(jsl.ArrayField(jsl.StringField(),
                                                           min_items=2,
                                                           max_items=2),
                                            required=False)
    updated_date = jsl.StringField(required=True,
                                   pattern=DATE_PATTERN,
                                   default=time.strftime('%Y/%m/%d'))
    query_schema_validation = jsl.BooleanField(required=False)
示例#9
0
class LicenseScanDetails(jsl.Document):
    class Options(object):
        definition_id = "license_scan_details"
        additional_properties = True

    with removed_in(ROLE_v3_0_0) as removed_in_v3_0_0:
        removed_in_v3_0_0.files = jsl.ArrayField(
            jsl.DocumentField(FileDetails, as_ref=True))
        removed_in_v3_0_0.license_stats = jsl.ArrayField(
            jsl.DocumentField(LicenseDetailsPre30, as_ref=True))
        removed_in_v3_0_0.oslc_stats = jsl.DocumentField(OSLCStats,
                                                         as_ref=True)

    with added_in(ROLE_v3_0_0) as added_in_v3_0_0:
        added_in_v3_0_0.files_count = jsl.IntField(required=True)
        added_in_v3_0_0.licenses = jsl.DictField(pattern_properties=jsl.Var({
            'role': {
                '*': jsl.DocumentField(LicenseDetails,
                                       as_ref=True,
                                       required=True),
            }
        }),
                                                 required=True)
        added_in_v3_0_0.scancode_notice = jsl.StringField(required=True)
        added_in_v3_0_0.scancode_version = jsl.StringField(required=True)
示例#10
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)
示例#11
0
class ToolchainResponses(jsl.Document):
    class Options(object):
        definition_id = "toolchain_responses"

    # These fields are optional, as this spec currently covers error responses
    # in addition to successful toolchain queries.
    # They can change to being required once the "standard error schema" RFE
    # is implemented: https://github.com/baytemp/worker/issues/109

    redhat_anitya = jsl.DocumentField(
        AnityaResponse,
        description="Results from Red Hat's internal Anitya instance",
        required=False,
        as_ref=True
    )
    brew = jsl.ArrayField(jsl.DocumentField(
        DownstreamPatchset,
        description="Results from Brew, Red Hat's internal Koji instance",
        required=False,
        as_ref=True
    ))
    # The Pulp CDN details field became an array in v2-1-0
    _pulp_document_ref = jsl.DocumentField(
            PulpCDNResponse,
            description="Results from the Pulp CDN backing RPM delivery",
            required=False,
            as_ref=True
    )
    with removed_in(ROLE_v2_1_0) as before_v2_1:
        before_v2_1.pulp_cdn = _pulp_document_ref
    with added_in(ROLE_v2_1_0) as since_v2_1:
        since_v2_1.pulp_cdn = jsl.ArrayField(_pulp_document_ref)
    del _pulp_document_ref
示例#12
0
class SiemRuleTomlMetadata(jsl.Document):
    """Schema for siem rule toml metadata."""

    creation_date = jsl.StringField(required=True,
                                    pattern=DATE_PATTERN,
                                    default=time.strftime('%Y/%m/%d'))

    # added to query with rule.optimize()
    # rule validated against each ecs schema contained
    ecs_version = jsl.ArrayField(jsl.StringField(
        pattern=VERSION_PATTERN, required=True, default=ecs.get_max_version()),
                                 required=True)
    maturity = jsl.StringField(enum=MATURITY_LEVELS,
                               default='development',
                               required=True)

    # if present, add to query
    os_type_list = jsl.ArrayField(jsl.StringField(enum=OS_OPTIONS),
                                  required=False)
    related_endpoint_rules = jsl.ArrayField(jsl.ArrayField(jsl.StringField(),
                                                           min_items=2,
                                                           max_items=2),
                                            required=False)
    updated_date = jsl.StringField(required=True,
                                   pattern=DATE_PATTERN,
                                   default=time.strftime('%Y/%m/%d'))
示例#13
0
class ApiSchema79(ApiSchema78):
    """Schema for siem rule in API format."""

    STACK_VERSION = "7.9"
    RULE_TYPES = ApiSchema78.RULE_TYPES + [THRESHOLD]

    author = jsl.ArrayField(jsl.StringField(default="Elastic"), required=True, min_items=1)
    building_block_type = jsl.StringField(required=False)
    exceptions_list = jsl.ArrayField(required=False)
    license = jsl.StringField(required=True, default="Elastic License")
    risk_score_mapping = jsl.ArrayField(jsl.DocumentField(RiskScoreMapping), required=False, min_items=1)
    rule_name_override = jsl.StringField(required=False)
    severity_mapping = jsl.ArrayField(jsl.DocumentField(SeverityMapping), required=False, min_items=1)
    timestamp_override = jsl.StringField(required=False)

    type = jsl.StringField(enum=RULE_TYPES, required=True)

    # there might be a bug in jsl that requires us to redefine these here
    query_scope = ApiSchema78.query_scope
    saved_id_scope = ApiSchema78.saved_id_scope
    ml_scope = ApiSchema78.ml_scope

    with jsl.Scope(THRESHOLD) as threshold_scope:
        threshold_scope.index = jsl.ArrayField(jsl.StringField(), required=False)
        # this is not required per the API but we will enforce it here
        threshold_scope.language = jsl.StringField(enum=['kuery', 'lucene'], required=True, default='kuery')
        threshold_scope.query = jsl.StringField(required=True)
        threshold_scope.type = jsl.StringField(enum=[THRESHOLD], required=True, default=THRESHOLD)
        threshold_scope.threshold = jsl.DocumentField(ThresholdMapping, required=True)

    with jsl.Scope(jsl.DEFAULT_ROLE) as default_scope:
        default_scope.type = type
示例#14
0
 class SimilarityAnalysis(jsl.Document):
     class Options:
         description = "Stack Similarity Analysis Result"
         definition_id = "stack_similarity_analysis"
     missing_packages = jsl.ArrayField(jsl.StringField(), required=True)
     version_mismatch = jsl.ArrayField(jsl.StringField(), required=True)
     with jsl.Scope(lambda v: v >= ROLE_v2_1_4) as v2_1_4:
         v2_1_4.missing_downstream_component = jsl.ArrayField(jsl.StringField(), required=True)
示例#15
0
class BinwalkResult(JSLSchemaBaseWithRelease):
    class Options(object):
        definition_id = "binary_data"
        description = "Result of Binwalk worker"

    status = jsl.StringField(enum=["success", "error"], required=True)
    details = jsl.ArrayField(jsl.DocumentField(BinwalkDetail, as_ref=True),
                             required=True)
    summary = jsl.ArrayField(jsl.StringField(), required=True)
示例#16
0
class RSyncInfo(jsl.Document):
    path = jsl.ArrayField([
        jsl.IntField(),
        jsl.StringField()
    ])
    version = jsl.ArrayField([
        jsl.IntField(),
        jsl.StringField()
    ])
示例#17
0
class ActorDefinition(jsl.Document):
    inputs = jsl.ArrayField(jsl.DocumentField(ChannelSpec, as_ref=True))
    output = jsl.OneOfField([
        jsl.DocumentField(ChannelSpec, as_ref=True),
        jsl.ArrayField(jsl.DocumentField(ChannelSpec, as_ref=True))
    ])
    description = jsl.StringField()
    extends = jsl.DocumentField(ExtendsDefinition, as_ref=True)
    executor = None  # This needs to be defined on runtime and needs to be a jsl.OneOfField
class LicenseScanDetails(jsl.Document):
    class Options(object):
        definition_id = "license_scan_details"
        additional_properties = True

    files = jsl.ArrayField(jsl.DocumentField(FileDetails, as_ref=True))
    license_stats = jsl.ArrayField(
        jsl.DocumentField(LicenseDetails, as_ref=True))
    oslc_stats = jsl.DocumentField(OSLCStats, as_ref=True)
示例#19
0
class LinguistResult(JSLSchemaBaseWithRelease):
    class Options(object):
        definition_id = "languages"
        description = "Result of Linguist worker"

    status = jsl.StringField(enum=["success", "error"], required=True)
    details = jsl.ArrayField(jsl.DocumentField(LinguistDetail, as_ref=True),
                             required=True)
    summary = jsl.ArrayField(jsl.StringField(), required=True)
示例#20
0
class CVECheckResult(JSLSchemaBaseWithRelease):
    class Options(object):
        definition_id = "cvecheck_results"
        description = "CVEcheck worker results"

    status = jsl.StringField(enum=["success", "error"], required=True)
    details = jsl.ArrayField(jsl.DocumentField(CVEDetail, as_ref=True),
                             required=True)
    summary = jsl.ArrayField(jsl.StringField(), required=True)
class CryptoCheckSummary(jsl.Document):
    class Options(object):
        definition_id = "cryptocheck_summary"

    content = jsl.ArrayField(jsl.DocumentField(CryptoAlgorithmRecord,
                                               as_ref=True),
                             required=True)
    filename = jsl.ArrayField(jsl.DocumentField(CryptoAlgorithmRecord,
                                                as_ref=True),
                              required=True)
示例#22
0
class AugeasInput(jsl.Document):
    class Options(object):
        definition_id = 'AugeasInput'

    load_files = jsl.ArrayField(jsl.StringField(required=False),
                                required=False)
    directives = jsl.ArrayField(jsl.StringField(required=False),
                                required=False)
    lens = jsl.StringField(required=False)
    prefix_for_relative = jsl.StringField(required=False)
示例#23
0
文件: util.py 项目: adixsyukri/morp
def dataclass_field_to_jsl_field(prop: dataclasses.Field,
                                 nullable=False) -> jsl.BaseField:
    t = dataclass_check_type(prop, date)
    if t:
        return jsl.DateTimeField(name=prop.name, required=t['required'])
    t = dataclass_check_type(prop, datetime)
    if t:
        return jsl.DateTimeField(name=prop.name, required=t['required'])
    t = dataclass_check_type(prop, str)
    if t:
        return jsl.StringField(name=prop.name, required=t['required'])
    t = dataclass_check_type(prop, int)
    if t:
        return jsl.IntField(name=prop.name, required=t['required'])
    t = dataclass_check_type(prop, float)
    if t:
        return jsl.NumberField(name=prop.name, required=t['required'])
    t = dataclass_check_type(prop, bool)
    if t:
        return jsl.BooleanField(name=prop.name, required=t['required'])
    t = dataclass_check_type(prop, dict)
    if t:
        return jsl.DictField(name=prop.name, required=t['required'])
    t = dataclass_check_type(prop, ISchema)
    if t:
        subtype = jsonobject_to_jsl(t['schema'], nullable=nullable)
        return jsl.DocumentField(name=prop.name,
                                 document_cls=subtype,
                                 required=t['required'])

    t = dataclass_check_type(prop, list)
    if t:
        return jsl.ArrayField(name=prop.name, required=t['required'])

    t = dataclass_check_type(prop, typing.List)
    if t:
        if 'schema' not in t.keys():
            return jsl.ArrayField(name=prop.name, required=t['required'])

        if issubclass(t['schema'], ISchema):
            subtype = jsl.DocumentField(
                document_cls=jsonobject_to_jsl(t['schema'], nullable=nullable))
        elif t['schema'] == str:
            subtype = jsl.StringField(name=prop.name)
        elif t['schema'] == int:
            subtype = jsl.IntField(name=prop.name)
        elif t['schema'] == float:
            subtype = jsl.NumberField(name=prop.name)
        elif t['schema'] == dict:
            subtype = jsl.DictField(name=prop.name)
        else:
            raise KeyError(t['schema'])
        return jsl.ArrayField(items=subtype, required=t['required'])

    raise KeyError(prop)
示例#24
0
class BlackduckDetails(jsl.Document):
    """Class with the schema definition based on JSL domain specific language."""
    class Options:
        """A container for options."""

        description = "Blackduck information for a single component"
        definition_id = "component_blackduck_info"

    license = jsl.ArrayField(
        jsl.DocumentField(BlackduckLicenseDetails, as_ref=True))
    security = jsl.ArrayField(
        jsl.DocumentField(BlackduckSecurityDetails, as_ref=True))
示例#25
0
class collection(jsl.Document):
    class Options(object):
        additional_properties = True
    class init(jsl.Document):
        init = jsl.StringField()        
    # Manifest properties
    init = jsl.DocumentField(init, as_ref=True, required=True)
    publications = jsl.ArrayField(pattern='^,Publications,[a-zA-Z-_,]+,$')
    collectors = jsl.ArrayField()
    workstation = jsl.StringField()
    queryTerms = jsl.ArrayField()
    processes = jsl.ArrayField()
示例#26
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"

    details = jsl.ArrayField(jsl.DocumentField(MetadataDict, as_ref=True))

    status = jsl.StringField(enum=["success", "error"], required=True)
    summary = jsl.ArrayField(jsl.StringField(), required=True)
示例#27
0
class ExtendsDefinition(jsl.Document):
    inputs = jsl.ArrayField(
        jsl.OneOfField([
            jsl.DocumentField(ExtendsChannelValue, as_ref=True),
            jsl.DocumentField(ExtendsChannelInputRef, as_ref=True)
        ]))
    outputs = jsl.ArrayField(
        jsl.OneOfField([
            jsl.DocumentField(ExtendsChannelValue, as_ref=True),
            jsl.DocumentField(ExtendsChannelOutputRef, as_ref=True)
        ]))
    name = jsl.StringField(required=True)
示例#28
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())])
示例#29
0
class DigesterResult(JSLSchemaBaseWithRelease):
    """JSL schema for Digester worker results."""
    class Options(object):
        """JSL schema for Digester worker results."""

        definition_id = "digests"
        description = "Result of Digester worker"

    status = jsl.StringField(enum=["success", "error"], required=True)
    details = jsl.ArrayField(jsl.DocumentField(DigesterDetail, as_ref=True),
                             required=True)
    summary = jsl.ArrayField(jsl.StringField(), required=True)
示例#30
0
    class SimilarityAnalysis(jsl.Document):
        """Class with the schema definition based on JSL domain specific language."""
        class Options:
            """A container for options."""

            description = "Stack Similarity Analysis Result"
            definition_id = "stack_similarity_analysis"

        missing_packages = jsl.ArrayField(jsl.StringField(), required=True)
        version_mismatch = jsl.ArrayField(jsl.StringField(), required=True)
        with jsl.Scope(lambda v: v >= ROLE_v2_1_4) as v2_1_4:
            v2_1_4.missing_downstream_component = jsl.ArrayField(
                jsl.StringField(), required=True)