class RedHatUsage(jsl.Document): class Options: description = "Red Hat internal usage information for a single component" definition_id = "component_redhat_usage" package_names = jsl.ArrayField(jsl.StringField(), required=True) published_in = jsl.ArrayField(jsl.StringField(), required=True) registered_srpms = jsl.ArrayField(jsl.DocumentField(RegisteredSRPM, as_ref=True), required=True) with added_in(ROLE_v2_1_1) as added_in_v2_1_1: added_in_v2_1_1.all_rhn_channels = jsl.ArrayField(jsl.StringField()) added_in_v2_1_1.all_rhsm_content_sets = jsl.ArrayField(jsl.StringField()) with added_in(ROLE_v2_1_2) as added_in_v2_1_2: added_in_v2_1_2.all_rhsm_product_names = jsl.ArrayField(jsl.StringField()) with added_in(ROLE_v2_1_3) as added_in_v2_1_3: added_in_v2_1_3.rh_mvn_matched_versions = jsl.ArrayField(jsl.StringField())
class PulpCDNResponse(jsl.Document): class Options(object): definition_id = "pulp_cdn_response" description = "The Pulp CDN handles Red Hat's SRPM publication" additional_properties = True with added_in(ROLE_v2_1_0) as since_v2_1: since_v2_1.srpm_filename = jsl.StringField(required=True) with added_in(ROLE_v2_2_0) as since_v2_2: since_v2_2.rhn_channels = jsl.ArrayField(jsl.StringField(), required=True) since_v2_2.rhsm_content_sets = jsl.ArrayField(jsl.StringField(), required=True) since_v2_2.rhsm_product_names = jsl.ArrayField(jsl.StringField(), required=True)
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
class CVEDetail(jsl.Document): class Options(object): definition_id = "cvecheck_details" description = "Detail of one CVE" with removed_in(ROLE_v3_0_0) as removed_in_v3_0_0: # access/impact are now part of vector string in cvss dict removed_in_v3_0_0.access = jsl.DocumentField(CVEAccess, as_ref=True, required=True) removed_in_v3_0_0.impact = jsl.DocumentField(CVEImpact, as_ref=True, required=True) removed_in_v3_0_0.cvss = jsl.NumberField( required=True) # cvss is now dict removed_in_v3_0_0.summary = jsl.StringField( required=True) # renamed to description with added_in(ROLE_v3_0_0) as added_in_v3_0_0: added_in_v3_0_0.cvss = jsl.DocumentField(CVSS, as_ref=True, required=True) added_in_v3_0_0.description = jsl.StringField(required=True) added_in_v3_0_0.severity = jsl.StringField(required=True) id = jsl.StringField(required=True) references = jsl.ArrayField(jsl.UriField(), required=True) # Present if defined for the particular CVE cwe = jsl.StringField(required=False)
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)
class BlackduckLicenseDetails(jsl.Document): class Options: description = "Blackduck information about one license for a single component" definition_id = "component_blackduck_license_info" with removed_in(ROLE_v2_2_0) as removed_in_v2_2_0: removed_in_v2_2_0.codeSharing = jsl.StringField(required=True) with added_in(ROLE_v2_2_0) as added_in_v2_2_0: added_in_v2_2_0.code_sharing = jsl.StringField(required=True) name = jsl.StringField(required=True)
class GithubDetail(jsl.Document): class Options(object): 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() updated_issues = jsl.DocumentField(GithubUpdatedIssues, as_ref=True) 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())
class GithubUpdatedPullRequests(GithubUpdatedIssues): class Options(object): definition_id = "github_pull_requests_details" description = "Details of updated Github pull requests" with jsl.Scope(ROLE_v1_0_0) as v1_0_0: v1_0_0.open = jsl.IntField(required=True) v1_0_0.closed = jsl.IntField(required=True) with added_in(ROLE_v1_0_1) as since_v1_0_1: since_v1_0_1.year = jsl.DocumentField(GithubItemsByTime, as_ref=True) since_v1_0_1.month = jsl.DocumentField(GithubItemsByTime, as_ref=True)
class AnalysesGraphDB(JSLSchemaBase): class Options(object): definition_id = "analyses_graphdb" description = "Component Analysis from GraphDB" with removed_in(ROLE_v1_1_0) as removed_in_v1_1_0: removed_in_v1_1_0.requestId = jsl.StringField(required=True) with added_in(ROLE_v1_1_0) as added_in_v1_1_0: added_in_v1_1_0.request_id = jsl.StringField(required=True) result = jsl.DocumentField(ResultInner, as_ref=True, required=True) status = jsl.DocumentField(Status, as_ref=True, required=True)
class BlackduckSecurityDetails(jsl.Document): class Options: description = "Blackduck information about one vulnerability for a single component" definition_id = "component_blackduck_security_info" with removed_in(ROLE_v2_2_0) as removed_in_v2_2_0: removed_in_v2_2_0.baseScore = jsl.NumberField(required=True) removed_in_v2_2_0.exploitabilitySubscore = jsl.NumberField(required=True) with added_in(ROLE_v2_2_0) as added_in_v2_2_0: added_in_v2_2_0.base_score = jsl.NumberField(required=True) added_in_v2_2_0.exploitability_subscore = jsl.NumberField(required=True) id = jsl.StringField(required=True) severity = jsl.StringField(required=True) source = jsl.StringField(required=True)
class DownstreamUsageSummary(jsl.Document): class Options(object): definition_id = "downstream_usage_summary" package_names = jsl.ArrayField(jsl.StringField(), required=True) # Brew query integration registered_srpms = jsl.ArrayField( jsl.DocumentField(SRPMRecord, as_ref=True), required=True ) # Pulp CDN query integration with jsl.Scope(ROLE_v1_0_0) as v1: v1.published_in = jsl.ArrayField(jsl.StringField(), required=True) with added_in(ROLE_v2_1_0) as since_v2_1: since_v2_1.all_rhn_channels = jsl.ArrayField(jsl.StringField(), required=True) since_v2_1.all_rhsm_content_sets = jsl.ArrayField(jsl.StringField(), required=True) with added_in(ROLE_v2_2_0) as since_v2_2: since_v2_2.all_rhsm_product_names = jsl.ArrayField(jsl.StringField(), required=True) with added_in(ROLE_v2_2_1) as since_v2_2_1: since_v2_2_1.rh_mvn_matched_versions = jsl.ArrayField(jsl.StringField(), required=True)
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 SRPMRecord(jsl.Document): class Options(object): definition_id = "srpm_record" description = "Summary of Red Hat tracked SRPM" # Proposed contents, TBC by Brew query integration work package_name = jsl.StringField(required=True) epoch = jsl.NumberField(required=True) version = jsl.StringField(required=True) release = jsl.StringField(required=True) patch_count = jsl.NumberField(required=True) modified_line_count = jsl.NumberField(required=True) modified_file_count = jsl.NumberField(required=True) with added_in(ROLE_v2_0_0) as since_v2_0: since_v2_0.published_in = jsl.ArrayField(jsl.StringField()) tags = jsl.ArrayField(jsl.StringField()) # Maybe? architectures = jsl.ArrayField(jsl.StringField()) # Maybe? hashes = jsl.DictField(properties=OrderedDict(( ("md5", jsl.StringField()), ("sha1", jsl.StringField()), ("sha256", jsl.StringField()), ))) # Maybe?
class MercatorResult(JSLSchemaBaseWithRelease): class Options(object): 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)