class ResultData(JSLSchemaBase):
    class Options(object):
        definition_id = "result_data"
        description = "Result data"

    package = jsl.DictField(additional_properties=True)
    version = jsl.DictField(additional_properties=True)
예제 #2
0
 class FilterQuery(jsl.Document):
     match = jsl.DictField({
         'event.action': jsl.DictField(properties={
             'query': jsl.StringField(),
             'type': jsl.StringField()
         })
     })
예제 #3
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.")
예제 #4
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')}))
class VersionResolutionDetail(JSLSchemaBase):
    class Options:
        description = "Version range resolver_detail"
        definition_id = "version_range_resolver_detail"

    difference = jsl.ArrayField(required=True)
    analysed = jsl.DictField(required=True)
    upstream = jsl.DictField(required=True)
예제 #6
0
class FailedLicenseScan(JSLSchemaBaseWithRelease):
    class Options(object):
        definition_id = "failed_license_scan"
        description = "Failed automated software copyright license scan"

    status = jsl.StringField(enum=["error"], required=True)
    summary = jsl.DictField(required=True, additional_properties=True)
    details = jsl.DictField(required=True, additional_properties=True)
class PackageKeywordsTaggingDetails(jsl.Document):
    class Options(object):
        definition_id = "package_keywords_tagging_details"
        description = "Details computed by PackageKeywordsTagging worker"

    README = jsl.DictField(required=False, dditional_properties=True)
    package_name = jsl.DictField(required=False, additional_properties=True)
    repository_description = jsl.DictField(required=False, additional_properties=True)
    gh_topics = jsl.ArrayField(jsl.StringField(), required=False)
예제 #8
0
class ResultData(JSLSchemaBase):
    """Class with the schema definition based on JSL domain specific language."""
    class Options(object):
        """A container for options."""

        definition_id = "result_data"
        description = "Result data"

    package = jsl.DictField(additional_properties=True)
    version = jsl.DictField(additional_properties=True)
예제 #9
0
class FilterQuery(jsl.Document):
    """Base class for siem rule query filters."""

    match = jsl.DictField({
        'event.action':
        jsl.DictField(properties={
            'query': jsl.StringField(),
            'type': jsl.StringField()
        })
    })
예제 #10
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)
예제 #11
0
class VersionResolutionDetail(JSLSchemaBase):
    """Class with the schema definition based on JSL domain specific language."""
    class Options:
        """A container for options."""

        description = "Version range resolver_detail"
        definition_id = "version_range_resolver_detail"

    difference = jsl.ArrayField(required=True)
    analysed = jsl.DictField(required=True)
    upstream = jsl.DictField(required=True)
예제 #12
0
파일: util.py 프로젝트: adixsyukri/morp
def jsonobject_property_to_jsl_field(prop: jsonobject.JsonProperty,
                                     nullable=False) -> jsl.BaseField:
    if isinstance(prop, jsonobject.DateProperty):
        return jsl.DateTimeField(name=prop.name, required=prop.required)
    if isinstance(prop, jsonobject.DateTimeProperty):
        return jsl.DateTimeField(name=prop.name, required=prop.required)
    if isinstance(prop, jsonobject.StringProperty):
        return jsl.StringField(name=prop.name, required=prop.required)
    if isinstance(prop, jsonobject.IntegerProperty):
        return jsl.IntField(name=prop.name, required=prop.required)
    if isinstance(prop, jsonobject.FloatProperty):
        return jsl.NumberField(name=prop.name, required=prop.required)
    if isinstance(prop, jsonobject.BooleanProperty):
        return jsl.BooleanField(name=prop.name, required=prop.required)
    if isinstance(prop, jsonobject.DictProperty):
        if prop.item_wrapper:
            subtype = jsonobject_to_jsl(prop.item_wrapper.item_type,
                                        nullable=nullable)
            return jsl.DocumentField(name=prop.name,
                                     document_cls=subtype,
                                     required=prop.required)
        return jsl.DictField(name=prop.name, required=prop.required)
    if isinstance(prop, jsonobject.ListProperty):
        if prop.item_wrapper:
            if isinstance(prop.item_wrapper, jsonobject.ObjectProperty):
                if issubclass(prop.item_wrapper.item_type,
                              jsonobject.JsonObject):
                    subtype = jsl.DocumentField(document_cls=jsonobject_to_jsl(
                        prop.item_wrapper.item_type),
                                                nullable=nullable)
                elif isinstance(prop.item_wrapper.item_type,
                                jsonobject.JsonProperty):
                    subtype = jsonobject_property_to_jsl_field(
                        prop.item_wrapper.item_type)
                else:
                    raise KeyError(prop.item_wrapper.item_type)
            elif isinstance(prop.item_wrapper, jsonobject.StringProperty):
                subtype = jsl.StringField(name=prop.name)
            elif isinstance(prop.item_wrapper, jsonobject.IntegerProperty):
                subtype = jsl.IntField(name=prop.name)
            elif isinstance(prop.item_wrapper, jsonobject.FloatProperty):
                subtype = jsl.NumberField(name=prop.name)
            elif isinstance(prop.item_wrapper, jsonobject.DictProperty):
                subtype = jsl.DictField(name=prop.name)
            else:
                raise KeyError(prop.item_wrapper)
            return jsl.ArrayField(items=subtype, required=prop.required)
        return jsl.ArrayField(name=prop.name, required=prop.required)

    raise KeyError(prop)
예제 #13
0
class ParameterBase(jsl.Document):
    class Options(object):
        additional_properties = True

    name = jsl.StringField(pattern='[^\s=]+', required=True)
    label = jsl.StringField(required=True)
    required = jsl.BooleanField(required=True)
    default_value = jsl.StringField(required=False)
    help_string = jsl.StringField(required=False)
    possible_values = jsl.DictField(required=False, min_properties=1)
    ctrl_props = jsl.DictField(required=False, min_properties=1)
    help_link = jsl.DocumentField(ParameterHelpLink,
                                  as_ref=True,
                                  required=False)
예제 #14
0
class hAdr(Microformat):
    type = type_of('h-adr')
    properties = jsl.DictField(
        required=True,
        properties={
            'street-address':
            string_array,
            'extended-address':
            string_array,
            'post-office-box':
            string_array,
            'locality':
            string_array,
            'region':
            string_array,
            'postal-code':
            string_array,
            'country-name':
            string_array,
            'label':
            string_array,
            'geo':
            jsl.ArrayField(
                jsl.OneOfField(
                    [jsl.StringField(),
                     jsl.DocumentField(hGeo, as_ref=True)])),
            'latitude':
            latitude,
            'longitude':
            longitude,
            'altitude':
            altitude,
        },
    )
예제 #15
0
class hRecipe(Microformat):
    type = type_of('h-recipe')
    properties = jsl.DictField(
        required=True,
        properties={
            'name':
            string_array,
            'ingredient':
            content_array,
            'yield':
            string_array,
            'instructions':
            content_array,
            'duration':
            string_array,
            'photo':
            photo_field,
            'summary':
            content_array,
            'author':
            jsl.ArrayField(
                jsl.OneOfField(
                    [jsl.StringField(),
                     jsl.DocumentField(hCard, as_ref=True)])),
            'published':
            datetime_array,
            'nutrition':
            string_array,
            'category':
            string_array,
        },
    )
예제 #16
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,
        },
    )
예제 #17
0
class hEvent(Microformat):
    type = type_of('h-event')
    properties = jsl.DictField(
        required=True,
        properties={
            'name':
            string_array,
            'summary':
            string_array,
            'start':
            datetime_array,
            'end':
            datetime_array,
            'duration':
            string_array,
            'description':
            string_array,
            'url':
            uri_array,
            'category':
            string_array,
            'location':
            jsl.ArrayField(
                jsl.OneOfField([
                    jsl.StringField(),
                    jsl.DocumentField(hGeo, as_ref=True),
                    jsl.DocumentField(hAdr, as_ref=True),
                    jsl.DocumentField(hCard, as_ref=True),
                ])),
        },
    )
예제 #18
0
class hCite(Microformat):
    type = type_of('h-cite')
    properties = jsl.DictField(
        required=True,
        properties={
            'name':
            string_array,
            'published':
            datetime_array,
            'author':
            jsl.ArrayField(
                jsl.OneOfField(
                    [jsl.StringField(),
                     jsl.DocumentField(hCard, as_ref=True)])),
            'url':
            uri_array,
            'uid':
            uri_array,
            'publication':
            string_array,
            'accessed':
            datetime_array,
            'content':
            content_array,
        },
    )
예제 #19
0
class Filters(jsl.Document):
    """Intermediate schema for handling DSL-like filters."""
    class FilterMetadata(jsl.Document):
        negate = jsl.BooleanField()
        type = jsl.StringField()
        key = jsl.StringField()
        value = jsl.StringField()
        disabled = jsl.BooleanField()
        indexRefName = jsl.StringField()
        alias = jsl.StringField()  # null acceptable
        params = jsl.DictField(properties={'query': jsl.StringField()})

    class FilterQuery(jsl.Document):
        match = jsl.DictField({
            'event.action':
            jsl.DictField(properties={
                'query': jsl.StringField(),
                'type': jsl.StringField()
            })
        })

    class FilterState(jsl.Document):
        store = jsl.StringField()

    class FilterExists(jsl.Document):
        field = jsl.StringField()

    exists = jsl.DocumentField(FilterExists)
    meta = jsl.DocumentField(FilterMetadata)
    state = jsl.DocumentField(FilterState, name='$state')
    query = jsl.DictField()
예제 #20
0
class CortexExpSchemaJSLBase(jsl.Document):
    """class defining json schema for a database record. See top of file"""
    timestamp = jsl.StringField(format="date-time", required=True)
    monkey = jsl.StringField(enum=monkeylist, required=True)
    session_number = jsl.IntField(minimum=1, maximum=999, required=True)
    code_repo = jsl.DocumentField(schemautil.GitRepoRef, required=True)
    experiment_name = jsl.StringField(
        required=True, pattern=schemautil.StringPatterns.relativePathPattern)
    timing_file_name = jsl.StringField(
        pattern=schemautil.StringPatterns.strictFilenameLowerPattern('tm'),
        required=True)
    condition_file_name = jsl.StringField(
        pattern=schemautil.StringPatterns.strictFilenameLowerPattern('cnd'),
        required=True)
    item_file_name = jsl.StringField(
        pattern=schemautil.StringPatterns.strictFilenameLowerPattern('itm'),
        required=True)
    parameter_file_name = jsl.StringField(
        pattern=schemautil.StringPatterns.strictFilenameLowerPattern('par'),
        required=True)
    set_file_name = jsl.StringField(
        pattern=schemautil.StringPatterns.strictFilenameLowerPattern('set'),
        required=True)

    recorded_files = jsl.DocumentField(
        schemautil.filetransfer.FileTransferSiteAndFileListRemote,
        required=True)
    additional_parameters = jsl.DictField(required=True)
    notes = jsl.StringField(required=True)
예제 #21
0
class Service(jsl.Document):
    class Options(object):
        definition_id = 'service'

    exe = jsl.StringField()
    command_line = jsl.StringField()
    env = jsl.DictField()
예제 #22
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)
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)
예제 #24
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)
class Diagnostics(jsl.Document):
    class Options(object):
        definition_id = 'diagnostics'

    severity = jsl.StringField(enum=['log', 'debug', 'fatal'], required=True)
    message = jsl.StringField(required=True)
    data = jsl.DictField()
class Status(JSLSchemaBase):
    class Options(object):
        definition_id = "status"
        description = "Component analyses response status"

    attributes = jsl.DictField(additional_properties=True)
    code = jsl.NumberField(required=True)
    message = jsl.StringField(required=True)
class ResultInner(JSLSchemaBase):
    class Options(object):
        definition_id = "result_inner"
        description = "Set of Result inner"

    with removed_in(ROLE_v1_2_0) as removed_in_v1_2_0:
        removed_in_v1_2_0.data = jsl.ArrayField(jsl.DocumentField(ResultData,
                                                                  as_ref=True),
                                                required=True)
    with added_in(ROLE_v1_2_0) as added_in_v1_2_0:
        added_in_v1_2_0.data = jsl.DocumentField(ResultData,
                                                 as_ref=True,
                                                 required=True)
    with added_in(ROLE_v1_2_0) as added_in_v1_2_0:
        added_in_v1_2_0.recommendation = jsl.DictField(
            additional_properties=True)
    meta = jsl.DictField(additional_properties=True)
예제 #28
0
class KeywordsTaggingDetails(jsl.Document):
    class Options(object):
        definition_id = "keywords_tagging_details"
        description = "Details computed by KeywordsTagging worker"

    description = jsl.DictField(required=False, additional_properties=True)
    # Keywords extracted in mercator (e.g. keywords stated in setup.py)
    keywords = jsl.ArrayField(jsl.StringField())
예제 #29
0
 class FilterMetadata(jsl.Document):
     negate = jsl.BooleanField()
     type = jsl.StringField()
     key = jsl.StringField()
     value = jsl.StringField()
     disabled = jsl.BooleanField()
     indexRefName = jsl.StringField()
     alias = jsl.StringField()  # null acceptable
     params = jsl.DictField(properties={'query': jsl.StringField()})
예제 #30
0
class FileDetails(jsl.Document):
    """JSL schema for file details."""
    class Options(object):
        """JSL schema for file details."""

        definition_id = "file_details"

    path = jsl.StringField(required=True)
    result = jsl.ArrayField(jsl.DictField(additional_properties=True))