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, }, )
class TargetInfo(jsl.Document): targetinfo = jsl.OneOfField([ jsl.OneOfField([jsl.StringField(), jsl.StringField()]), jsl.OneOfField([jsl.StringField(), jsl.StringField()]), jsl.OneOfField([jsl.StringField(), jsl.ArrayField(jsl.StringField())]) ])
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))
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 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)
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), ])), }, )
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, }, )
class Disjunction(jsl.Document): terms = jsl.ArrayField(jsl.OneOfField([ jsl.DocumentField("Conjunction", as_ref=True), jsl.DocumentField("Disjunction", as_ref=True), jsl.DocumentField("Literal", as_ref=True) ], required=True), required=True) type = jsl.StringField(pattern="^disjunction$")
class TermDocument(jsl.Document): term = jsl.OneOfField([ jsl.DocumentField(Conjunction, as_ref=True), jsl.DocumentField(Disjunction, as_ref=True), jsl.DocumentField(Literal, as_ref=True) ], required=True)
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, }, )
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)
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)
class ParameterHelpLink(jsl.Document): link_text = jsl.StringField(required=True, default="Learn More") link_url_type = jsl.StringField(enum=["internal", "external"], required=True, default="external") link_url = jsl.OneOfField([jsl.UriField(required=True)], required=True) link_tip = jsl.StringField(required=False)
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, }, )
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))
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 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 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)
class hReviewAggregate(Microformat): type = type_of('h-review-aggregate') properties = jsl.DictField( required=True, properties={ 'name': string_array, 'rating': jsl.ArrayField( jsl.OneOfField([ jsl.StringField(), jsl.DocumentField(hRating, as_ref=True) ])), '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), ])), 'average': string_array, 'best': string_array, 'worst': string_array, 'count': string_array, 'votes': string_array, 'category': string_array, 'url': uri_array, }, )
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' )
class hProduct(Microformat): type = type_of('h-product') properties = jsl.DictField( required=True, properties={ 'name': string_array, 'photo': photo_field, 'brand': jsl.ArrayField( jsl.OneOfField( [jsl.StringField(), jsl.DocumentField(hCard, as_ref=True)])), 'category': string_array, 'description': content_array, 'url': uri_array, 'identifier': jsl.ArrayField( jsl.DictField(properties={ 'type': jsl.StringField(), 'value': jsl.StringField() })), 'review': jsl.ArrayField( jsl.OneOfField([ jsl.StringField(), jsl.DocumentField('hReview', as_ref=True), jsl.DocumentField('hReviewAggregate', as_ref=True), ])), 'price': string_array, }, )
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)
class MicroformatsDocument(jsl.Document): class Options: additional_properties = True items = jsl.ArrayField( jsl.OneOfField([ jsl.DocumentField(hGeo, as_ref=True), jsl.DocumentField(hAdr, as_ref=True), jsl.DocumentField(hCard, as_ref=True), jsl.DocumentField(hItem, as_ref=True), jsl.DocumentField(hProduct, as_ref=True), jsl.DocumentField(hEntry, as_ref=True), jsl.DocumentField(hEvent, as_ref=True), jsl.DocumentField(hReview, as_ref=True), jsl.DocumentField(hReviewAggregate, as_ref=True), jsl.DocumentField(hRecipe, as_ref=True), jsl.DocumentField(hResume, as_ref=True), jsl.DocumentField(hFeed, as_ref=True), ]))
class hFeed(Microformat): type = type_of('h-feed') properties = jsl.DictField( required=True, properties={ 'name': string_array, 'author': jsl.ArrayField( jsl.OneOfField( [jsl.StringField(), jsl.DocumentField(hCard, as_ref=True)])), 'url': uri_array, 'photo': photo_field, 'summary': content_array, 'children': jsl.ArrayField(jsl.DocumentField(hEntry, as_ref=True)), }, )
class hResume(Microformat): type = type_of('h-resume') properties = jsl.DictField( required=True, properties={ 'name': string_array, 'summary': content_array, 'contact': jsl.ArrayField( jsl.OneOfField( [jsl.StringField(), jsl.DocumentField(hCard, as_ref=True)])), 'education': jsl.ArrayField(jsl.DocumentField(hEvent, as_ref=True)), 'experience': jsl.ArrayField(jsl.DocumentField(hEvent, as_ref=True)), 'skill': string_array, 'affiliation': jsl.ArrayField(jsl.DocumentField(hCard, as_ref=True)), }, )
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)
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 )
import json import jsl class SubTrialEndTime(jsl.Document): start_code = jsl.IntField(required=True) end_time = jsl.NumberField(minimum=0, required=True) class SubTrialEndCode(jsl.Document): start_code = jsl.IntField(required=True) end_code = jsl.IntField(required=True) SubTrial = jsl.OneOfField( [jsl.DocumentField(SubTrialEndTime), jsl.DocumentField(SubTrialEndCode)]) class CDTTableImportParamsSchemaCommon(jsl.Document): comment = jsl.StringField() subtrials = jsl.ArrayField(items=SubTrial, unique_items=True, required=True, min_items=1) margin_before = jsl.NumberField( minimum=0, required=True) # 0.3 by default in previous implementation. margin_after = jsl.NumberField( minimum=0, required=True) # 0.3 by default in previous implementation. trial_to_condition_func = jsl.StringField( required=True
class DockerInfo(jsl.Document): path = jsl.OneOfField([jsl.IntField(), jsl.StringField()]) systemd_state = jsl.OneOfField([jsl.IntField(), jsl.StringField()]) info = jsl.OneOfField([jsl.IntField(), jsl.StringField()])