예제 #1
0
 class ComponentMetadata(jsl.Document):
     class Options:
         description = "Data from metadata file"
         definition_id = "component_metadata"
     tests_implemented = jsl.BooleanField()
     required_engines = jsl.DocumentField(ComponentMetadataEngines, as_ref=True, required=True)
     dependency_lock_file = jsl.BooleanField()
예제 #2
0
class ObjectSchema(CRUDSchema):

    id = jsl.IntField(required=False)
    uuid = jsl.StringField(required=False)
    body = jsl.StringField(required=True, default='')
    created_flag = jsl.BooleanField(required=False, default=False)
    updated_flag = jsl.BooleanField(required=False, default=False)
예제 #3
0
class NEVPreprocessingParams(jsl.Document):
    comment = jsl.StringField()
    spike_no_secondary_unit = jsl.BooleanField(required=True)
    spike_no_255_unit = jsl.BooleanField(required=True)
    spike_no_0_unit = jsl.BooleanField(required=True)
    throw_high_byte = jsl.BooleanField(
        required=True)  # I dropped "fix_nev" because this works whether you fix it or not.
    fix_nev = jsl.BooleanField(required=True)
예제 #4
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()})
예제 #5
0
class UpstreamToDownstream(Common):
    """
    https://github.com/user-cont/betka
    """
    master_checker = jsl.BooleanField()
    upstream_branch_name = jsl.StringField()
    upstream_git_path = jsl.StringField()
    pr_checker = jsl.BooleanField()
    # TODO: required if pr_checker is 'True' otherwise optional
    pr_comment_message = jsl.StringField()
    commit_message_template = jsl.StringField()
    image_url = jsl.UriField()
예제 #6
0
파일: schemas.py 프로젝트: user-cont/frambo
class UpstreamToDownstream(Common):
    """
    https://github.com/sclorg/betka
    """

    master_checker = jsl.BooleanField()
    upstream_branch_name = jsl.StringField()
    upstream_git_path = jsl.StringField()
    pr_checker = jsl.BooleanField()
    pr_comment_message = jsl.StringField()
    jira_ticket = jsl.StringField()
    image_url = jsl.UriField()
예제 #7
0
    class ComponentMetadata(jsl.Document):
        """Class with the schema definition based on JSL domain specific language."""
        class Options:
            """A container for options."""

            description = "Data from metadata file"
            definition_id = "component_metadata"

        tests_implemented = jsl.BooleanField()
        required_engines = jsl.DocumentField(ComponentMetadataEngines,
                                             as_ref=True,
                                             required=True)
        dependency_lock_file = jsl.BooleanField()
예제 #8
0
class WirelessOptions(jsl.Document):
    ssid = jsl.StringField(description="ESSID to broadcast.", max_length=32)
    key = jsl.StringField(description="Wireless network password.",
                          min_length=8)
    nasid = jsl.StringField(description="NAS identifier for RADIUS.")
    acct_server = jsl.StringField(description="RADIUS accounting server.")
    acct_secret = jsl.StringField(description="RADIUS accounting secret.")
    acct_interval = jsl.IntField(
        description="RADIUS accounting update interval (seconds).", minimum=1)
    hidden = jsl.BooleanField(
        description="Disable broadcasting the ESSID in beacons.")
    isolate = jsl.BooleanField(
        description="Disable forwarding traffic between connected clients.")
    maxassoc = jsl.IntField(
        description="Maximum number of associated clients.", minimum=0)
예제 #9
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)
예제 #10
0
class ChuteRequests(jsl.Document):
    as_root = jsl.BooleanField(name="as-root",
                               description="Run service as privileged user.")
    port_bindings = jsl.ArrayField(
        name="port-bindings",
        description="Port bindings from host to service container.",
        items=jsl.DocumentField(PortBinding))
예제 #11
0
class MOBaseField(jsl.Document):
    name = jsl.StringField(required=True,
                           description='Title of the header row of this field')
    description = jsl.StringField(
        description='Data dictionary entry for this field')
    nullable = jsl.BooleanField(
        description=
        'Must be present and set to False for this field to be blank')
예제 #12
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)
class DigesterDetail(jsl.Document):
    class Options(object):
        definition_id = "digester_details"
        description = "Details of Digester run on one file"

    artifact = jsl.BooleanField()  # not required
    path = jsl.StringField(required=True)
    ssdeep = jsl.StringField(required=True)
    md5 = jsl.StringField(required=True)
    sha1 = jsl.StringField(required=True)
    sha256 = jsl.StringField(required=True)
class FSFragment(OwnedObject):
    class Options(object):
        definition_id = 'filesystem_fragment'

    source = jsl.DocumentField(Host, required=True)
    path = jsl.StringField(pattern=ABSOLUTE_PATH_PATTERN, required=True)
    kind = jsl.StringField(enum=['file', 'directory'], required=True)
    # if the fragment is static it will be baked into the image
    # otherwise the fragment will be put onto a persistent storage and bind mounted
    # into the container
    static = jsl.BooleanField()
    target_path = jsl.StringField(pattern=ABSOLUTE_PATH_PATTERN, required=True)
예제 #15
0
class RawData(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)
    OCR = jsl.BooleanField()
    relationships = jsl.ArrayField()
    rights = jsl.StringField()
예제 #16
0
class ApiSchema78(BaseApiSchema):
    """Schema for siem rule in API format."""

    STACK_VERSION = "7.8"
    RULE_TYPES = [MACHINE_LEARNING, SAVED_QUERY, QUERY]

    actions = jsl.ArrayField(required=False)
    description = jsl.StringField(required=True)
    # api defaults to false if blank
    enabled = jsl.BooleanField(default=False, required=False)
    # _ required since `from` is a reserved word in python
    from_ = jsl.StringField(required=False, default='now-6m', name='from')
    false_positives = jsl.ArrayField(jsl.StringField(), required=False)
    filters = jsl.ArrayField(jsl.DocumentField(Filters))
    interval = jsl.StringField(pattern=INTERVAL_PATTERN, default='5m', required=False)
    max_signals = jsl.IntField(minimum=1, required=False, default=100)  # cap a max?
    meta = jsl.DictField(required=False)
    name = jsl.StringField(required=True)
    note = MarkdownField(required=False)
    # output_index =jsl.StringField(required=False)  # this is NOT allowed!
    references = jsl.ArrayField(jsl.StringField(), required=False)
    risk_score = jsl.IntField(minimum=0, maximum=100, required=True, default=21)
    severity = jsl.StringField(enum=['low', 'medium', 'high', 'critical'], default='low', required=True)
    tags = jsl.ArrayField(jsl.StringField(), required=False)
    throttle = jsl.StringField(required=False)
    timeline_id = jsl.StringField(required=False)
    timeline_title = jsl.StringField(required=False)
    to = jsl.StringField(required=False, default='now')

    type = jsl.StringField(enum=[MACHINE_LEARNING, QUERY, SAVED_QUERY], required=True)
    threat = jsl.ArrayField(jsl.DocumentField(Threat), required=False, min_items=1)

    with jsl.Scope(MACHINE_LEARNING) as ml_scope:
        ml_scope.anomaly_threshold = jsl.IntField(required=True, minimum=0)
        ml_scope.machine_learning_job_id = jsl.StringField(required=True)
        ml_scope.type = jsl.StringField(enum=[MACHINE_LEARNING], required=True, default=MACHINE_LEARNING)

    with jsl.Scope(SAVED_QUERY) as saved_id_scope:
        saved_id_scope.index = jsl.ArrayField(jsl.StringField(), required=False)
        saved_id_scope.saved_id = jsl.StringField(required=True)
        saved_id_scope.type = jsl.StringField(enum=[SAVED_QUERY], required=True, default=SAVED_QUERY)

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

    with jsl.Scope(jsl.DEFAULT_ROLE) as default_scope:
        default_scope.type = type
예제 #17
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)
예제 #18
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)
예제 #19
0
class ModularAlert(jsl.Document):
    short_name = jsl.StringField(required=True)
    label = jsl.StringField(required=True)
    description = jsl.StringField(required=False)
    icon_path = jsl.StringField(required=False)
    largeIcon = jsl.StringField(required=False)
    smallIcon = jsl.StringField(required=False)
    code = jsl.StringField(required=False)
    uuid = jsl.StringField(required=False)
    active_response = jsl.DictField(
        required=False,
        additional_properties=True,
        properties={
            "supports_adhoc":
            jsl.BooleanField(required=False),
            "drilldown_uri":
            jsl.StringField(required=False),
            "group":
            jsl.ArrayField(jsl.StringField(), required=False, min_items=1),
            "category":
            jsl.ArrayField(jsl.StringField(), required=False, min_items=1),
            "task":
            jsl.ArrayField(jsl.StringField(), required=True, min_items=1),
            "subject":
            jsl.ArrayField(jsl.StringField(), required=True, min_items=1),
            "index":
            jsl.StringField(required=False, pattern=r"^[\w\-:]{0,50}$"),
            "sourcetype":
            jsl.StringField(required=False, pattern=r"^[\w\-:]{0,50}$"),
            "technology":
            jsl.ArrayField(jsl.DocumentField(Technology, as_ref=True),
                           required=True,
                           min_items=1)
        })
    parameters = jsl.ArrayField(jsl.OneOfField([
        jsl.DocumentField(CheckboxParameter, as_ref=True),
        jsl.DocumentField(DropdownlistParameter, as_ref=True),
        jsl.DocumentField(RadioParameter, as_ref=True),
        jsl.DocumentField(PasswordParameter, as_ref=True),
        jsl.DocumentField(TextareaParameter, as_ref=True),
        jsl.DocumentField(TextParameter, as_ref=True),
        jsl.DocumentField(SplunksearchdropdownParameter, as_ref=True)
    ]),
                                required=False)
    alert_props = jsl.DocumentField(ModularAlertProps,
                                    as_ref=True,
                                    required=False)
예제 #20
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)
예제 #21
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"
        additional_properties = True

    name = jsl.StringField()
    version = jsl.StringField()
    specification = jsl.OneOfField([jsl.StringField(), jsl.NullField()])
    resolved = jsl.OneOfField(
        [jsl.StringField(),
         jsl.NullField(),
         jsl.BooleanField()])
    dependencies = jsl.ArrayField(
        jsl.DocumentField(jsl.RECURSIVE_REFERENCE_CONSTANT, as_ref=True))
    # go glide
    subpackages = jsl.ArrayField(jsl.StringField())
예제 #22
0
class MOTable(jsl.Document):
    name = jsl.StringField(required=True, description='Name of the table')
    file_name_prefix = jsl.StringField(
        required=True, description='The file name prefix used for this table.')
    description = jsl.StringField(
        description='Data dictionary entry for this table')
    primary_key = jsl.OneOfField(
        [jsl.StringField(), jsl.BooleanField(enum=[False])],
        description='The name of the primary key of this table '
        'or false if the table fails to have one')
    fields = jsl.ArrayField(
        jsl.OneOfField([
            jsl.DocumentField(MOStringField, as_ref=True),
            jsl.DocumentField(MODateField, as_ref=True),
            jsl.DocumentField(MOIntegerField, as_ref=True),
            jsl.DocumentField(MOBooleanField, as_ref=True),
            jsl.DocumentField(MODecimalField, as_ref=True),
            jsl.DocumentField(MOForeignKeyField, as_ref=True)
        ]),
        required=True,
        min_items=1,
        description='The ordered list of fields as they will appear in the file'
    )
예제 #23
0
class MouseExpRawSchemaInputJSL(jsl.Document):
    """this JSL is for input, not the final saved form."""
    schema_revision = jsl.IntField(
        enum=[1],
        required=True)  # the version of schema, in case we have drastic change
    timestamp = jsl.StringField(format="date-time", required=True)
    animal_id = jsl.StringField(required=True)
    session_id = jsl.StringField(required=True)
    acquisition_system = jsl.StringField(enum=system_list, required=True)
    acquisition_system_files = jsl.DocumentField(
        schemautil.filetransfer.FileListRelative, required=True)
    experiment_name = jsl.StringField(required=True)
    notebook_path = jsl.StringField(
        pattern=schemautil.StringPatterns.strictFilenameSensiblePattern('txt'),
        required=True)
    all_file_site = jsl.DocumentField(
        schemautil.filetransfer.FileTransferSiteRemote, required=True)
    all_file_prefix = jsl.StringField(
        pattern=schemautil.StringPatterns.relativePathPattern)
    session_names = jsl.DocumentField(schemautil.filetransfer.FileListRelative,
                                      required=True)
    has_real_time_data = jsl.BooleanField(required=True)
    additional_parameters = jsl.DictField(required=True)
    notes = jsl.StringField(required=True)
예제 #24
0
class SiemRuleApiSchema(jsl.Document):
    """Schema for siem rule in API format."""

    actions = jsl.ArrayField(required=False)
    author = jsl.ArrayField(jsl.StringField(default="Elastic"),
                            required=True,
                            min_items=1)
    building_block_type = jsl.StringField(required=False)
    description = jsl.StringField(required=True)
    # api defaults to false if blank
    enabled = jsl.BooleanField(default=False, required=False)
    exceptions_list = jsl.ArrayField(required=False)
    # _ required since `from` is a reserved word in python
    from_ = jsl.StringField(required=False, default='now-6m', name='from')
    false_positives = jsl.ArrayField(jsl.StringField(), required=False)
    filters = jsl.ArrayField(jsl.DocumentField(Filters))
    interval = jsl.StringField(pattern=INTERVAL_PATTERN,
                               default='5m',
                               required=False)
    license = jsl.StringField(required=True, default="Elastic License")
    max_signals = jsl.IntField(minimum=1, required=False,
                               default=100)  # cap a max?
    meta = jsl.DictField(required=False)
    name = jsl.StringField(required=True)
    note = jsl.StringField(required=False)
    # output_index = jsl.StringField(required=False)  # this is NOT allowed!
    references = jsl.ArrayField(jsl.StringField(), required=False)
    risk_score = jsl.IntField(minimum=0,
                              maximum=100,
                              required=True,
                              default=21)
    risk_score_mapping = jsl.ArrayField(jsl.DocumentField(RiskScoreMapping),
                                        required=False,
                                        min_items=1)
    rule_id = jsl.StringField(pattern=UUID_PATTERN, required=True)
    rule_name_override = jsl.StringField(required=False)
    severity = jsl.StringField(enum=['low', 'medium', 'high', 'critical'],
                               default='low',
                               required=True)
    severity_mapping = jsl.ArrayField(jsl.DocumentField(SeverityMapping),
                                      required=False,
                                      min_items=1)
    # saved_id - type must be 'saved_query' to allow this or else it is forbidden
    tags = jsl.ArrayField(jsl.StringField(), required=False)
    throttle = jsl.StringField(required=False)
    timeline_id = jsl.StringField(required=False)
    timeline_title = jsl.StringField(required=False)
    timestamp_override = jsl.StringField(required=False)
    to = jsl.StringField(required=False, default='now')
    # require this to be always validated with a role
    # type = jsl.StringField(enum=[MACHINE_LEARNING, QUERY, SAVED_QUERY], required=True)
    threat = jsl.ArrayField(jsl.DocumentField(Threat),
                            required=False,
                            min_items=1)

    with jsl.Scope(MACHINE_LEARNING) as ml_scope:
        ml_scope.anomaly_threshold = jsl.IntField(required=True, minimum=0)
        ml_scope.machine_learning_job_id = jsl.StringField(required=True)
        ml_scope.type = jsl.StringField(enum=[MACHINE_LEARNING],
                                        required=True,
                                        default=MACHINE_LEARNING)

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

    with jsl.Scope(SAVED_QUERY) as saved_id_scope:
        saved_id_scope.index = jsl.ArrayField(jsl.StringField(),
                                              required=False)
        saved_id_scope.saved_id = jsl.StringField(required=True)
        saved_id_scope.type = jsl.StringField(enum=[SAVED_QUERY],
                                              required=True,
                                              default=SAVED_QUERY)
예제 #25
0
class SingleCodeRange(jsl.Document):
    type = jsl.StringField(enum=["RANGE"], required=True)
    min_value = jsl.IntField(required=True)
    max_value = jsl.IntField(required=True)
    missable = jsl.BooleanField(required=True)
예제 #26
0
class SingleCodeSingleMissable(jsl.Document):
    type = jsl.StringField(enum=["SINGLE"], required=True)
    code = jsl.IntField(required=True)
    missable = jsl.BooleanField(enum=[False], required=True)  # currently, missable code is not supported.
예제 #27
0
class Vote(Document):
    option_id = jsl.StringField(required=true_if_creator)
    is_public = jsl.BooleanField(required=False)
예제 #28
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
        )
예제 #29
0
파일: schemas.py 프로젝트: user-cont/frambo
class Common(jsl.Document):
    enabled = jsl.BooleanField()
    notifications = jsl.DocumentField(Notifications, as_ref=True)
예제 #30
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)