openlayer 0.14.1 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +34 -0
- data/README.md +1 -1
- data/lib/openlayer/client.rb +8 -0
- data/lib/openlayer/models/background_task_retrieve_params.rb +20 -0
- data/lib/openlayer/models/background_task_retrieve_response.rb +81 -0
- data/lib/openlayer/models/governance/framework_create_params.rb +143 -0
- data/lib/openlayer/models/governance/framework_create_response.rb +407 -0
- data/lib/openlayer/models/governance/framework_export_params.rb +31 -0
- data/lib/openlayer/models/governance/framework_export_response.rb +32 -0
- data/lib/openlayer/models/governance/framework_list_params.rb +148 -0
- data/lib/openlayer/models/governance/framework_list_project_rule_stats_params.rb +74 -0
- data/lib/openlayer/models/governance/framework_list_project_rule_stats_response.rb +277 -0
- data/lib/openlayer/models/governance/framework_list_projects_params.rb +39 -0
- data/lib/openlayer/models/governance/framework_list_projects_response.rb +315 -0
- data/lib/openlayer/models/governance/framework_list_response.rb +418 -0
- data/lib/openlayer/models/governance/framework_list_rules_params.rb +39 -0
- data/lib/openlayer/models/governance/framework_list_rules_response.rb +656 -0
- data/lib/openlayer/models/governance/framework_retrieve_params.rb +22 -0
- data/lib/openlayer/models/governance/framework_retrieve_response.rb +407 -0
- data/lib/openlayer/models/governance/framework_update_params.rb +200 -0
- data/lib/openlayer/models/governance/framework_update_response.rb +407 -0
- data/lib/openlayer/models/governance/frameworks/document_list_params.rb +41 -0
- data/lib/openlayer/models/governance/frameworks/document_list_response.rb +572 -0
- data/lib/openlayer/models/governance/frameworks/document_retrieve_params.rb +30 -0
- data/lib/openlayer/models/governance/frameworks/document_retrieve_response.rb +561 -0
- data/lib/openlayer/models/governance/frameworks/section_list_rules_params.rb +96 -0
- data/lib/openlayer/models/governance/frameworks/section_list_rules_response.rb +660 -0
- data/lib/openlayer/models/governance/frameworks/subsection_list_rules_params.rb +88 -0
- data/lib/openlayer/models/governance/frameworks/subsection_list_rules_response.rb +660 -0
- data/lib/openlayer/models/governance/rule_create_params.rb +164 -0
- data/lib/openlayer/models/governance/rule_create_response.rb +638 -0
- data/lib/openlayer/models/governance/rule_delete_params.rb +22 -0
- data/lib/openlayer/models/governance/rule_list_params.rb +231 -0
- data/lib/openlayer/models/governance/rule_list_response.rb +654 -0
- data/lib/openlayer/models/governance/rule_result_create_evidence_params.rb +68 -0
- data/lib/openlayer/models/governance/rule_result_create_evidence_response.rb +90 -0
- data/lib/openlayer/models/governance/rule_result_list_evidence_params.rb +39 -0
- data/lib/openlayer/models/governance/rule_result_list_evidence_response.rb +101 -0
- data/lib/openlayer/models/governance/rule_result_list_params.rb +149 -0
- data/lib/openlayer/models/governance/rule_result_list_response.rb +255 -0
- data/lib/openlayer/models/governance/rule_result_retrieve_params.rb +22 -0
- data/lib/openlayer/models/governance/rule_result_retrieve_response.rb +243 -0
- data/lib/openlayer/models/governance/rule_result_update_params.rb +140 -0
- data/lib/openlayer/models/governance/rule_result_update_response.rb +242 -0
- data/lib/openlayer/models/governance/rule_retrieve_params.rb +22 -0
- data/lib/openlayer/models/governance/rule_retrieve_response.rb +642 -0
- data/lib/openlayer/models/governance/rule_stat_retrieve_params.rb +39 -0
- data/lib/openlayer/models/governance/rule_stat_retrieve_response.rb +504 -0
- data/lib/openlayer/models/governance/rule_tag_list_params.rb +39 -0
- data/lib/openlayer/models/governance/rule_tag_list_response.rb +88 -0
- data/lib/openlayer/models/governance/rule_update_params.rb +77 -0
- data/lib/openlayer/models/governance/rule_update_response.rb +638 -0
- data/lib/openlayer/models/inference_pipeline_retrieve_response.rb +38 -2
- data/lib/openlayer/models/inference_pipeline_update_response.rb +37 -2
- data/lib/openlayer/models/project_create_params.rb +37 -1
- data/lib/openlayer/models/project_create_response.rb +37 -2
- data/lib/openlayer/models/project_list_response.rb +37 -2
- data/lib/openlayer/models/project_update_params.rb +73 -0
- data/lib/openlayer/models/project_update_response.rb +297 -0
- data/lib/openlayer/models/projects/inference_pipeline_create_params.rb +38 -2
- data/lib/openlayer/models/projects/inference_pipeline_create_response.rb +38 -2
- data/lib/openlayer/models/projects/inference_pipeline_list_response.rb +41 -2
- data/lib/openlayer/models/storage/presigned_url_retrieve_params.rb +24 -0
- data/lib/openlayer/models/storage/presigned_url_retrieve_response.rb +19 -0
- data/lib/openlayer/models.rb +6 -0
- data/lib/openlayer/resources/background_tasks.rb +38 -0
- data/lib/openlayer/resources/governance/frameworks/documents.rb +80 -0
- data/lib/openlayer/resources/governance/frameworks/sections.rb +72 -0
- data/lib/openlayer/resources/governance/frameworks/subsections.rb +69 -0
- data/lib/openlayer/resources/governance/frameworks.rb +344 -0
- data/lib/openlayer/resources/governance/rule_results.rb +212 -0
- data/lib/openlayer/resources/governance/rule_stats.rb +47 -0
- data/lib/openlayer/resources/governance/rule_tags.rb +47 -0
- data/lib/openlayer/resources/governance/rules.rb +241 -0
- data/lib/openlayer/resources/governance.rb +34 -0
- data/lib/openlayer/resources/projects.rb +49 -1
- data/lib/openlayer/resources/storage/presigned_url.rb +32 -0
- data/lib/openlayer/version.rb +1 -1
- data/lib/openlayer.rb +63 -0
- data/rbi/openlayer/client.rbi +6 -0
- data/rbi/openlayer/models/background_task_retrieve_params.rbi +38 -0
- data/rbi/openlayer/models/background_task_retrieve_response.rbi +102 -0
- data/rbi/openlayer/models/governance/framework_create_params.rbi +298 -0
- data/rbi/openlayer/models/governance/framework_create_response.rbi +730 -0
- data/rbi/openlayer/models/governance/framework_export_params.rbi +54 -0
- data/rbi/openlayer/models/governance/framework_export_response.rbi +48 -0
- data/rbi/openlayer/models/governance/framework_list_params.rbi +310 -0
- data/rbi/openlayer/models/governance/framework_list_project_rule_stats_params.rbi +178 -0
- data/rbi/openlayer/models/governance/framework_list_project_rule_stats_response.rbi +440 -0
- data/rbi/openlayer/models/governance/framework_list_projects_params.rbi +68 -0
- data/rbi/openlayer/models/governance/framework_list_projects_response.rbi +498 -0
- data/rbi/openlayer/models/governance/framework_list_response.rbi +771 -0
- data/rbi/openlayer/models/governance/framework_list_rules_params.rbi +68 -0
- data/rbi/openlayer/models/governance/framework_list_rules_response.rbi +1298 -0
- data/rbi/openlayer/models/governance/framework_retrieve_params.rbi +40 -0
- data/rbi/openlayer/models/governance/framework_retrieve_response.rbi +730 -0
- data/rbi/openlayer/models/governance/framework_update_params.rbi +425 -0
- data/rbi/openlayer/models/governance/framework_update_response.rbi +730 -0
- data/rbi/openlayer/models/governance/frameworks/document_list_params.rbi +70 -0
- data/rbi/openlayer/models/governance/frameworks/document_list_response.rbi +1012 -0
- data/rbi/openlayer/models/governance/frameworks/document_retrieve_params.rbi +50 -0
- data/rbi/openlayer/models/governance/frameworks/document_retrieve_response.rbi +968 -0
- data/rbi/openlayer/models/governance/frameworks/section_list_rules_params.rbi +193 -0
- data/rbi/openlayer/models/governance/frameworks/section_list_rules_response.rbi +1302 -0
- data/rbi/openlayer/models/governance/frameworks/subsection_list_rules_params.rbi +182 -0
- data/rbi/openlayer/models/governance/frameworks/subsection_list_rules_response.rbi +1302 -0
- data/rbi/openlayer/models/governance/rule_create_params.rbi +276 -0
- data/rbi/openlayer/models/governance/rule_create_response.rbi +1253 -0
- data/rbi/openlayer/models/governance/rule_delete_params.rbi +40 -0
- data/rbi/openlayer/models/governance/rule_list_params.rbi +486 -0
- data/rbi/openlayer/models/governance/rule_list_response.rbi +1294 -0
- data/rbi/openlayer/models/governance/rule_result_create_evidence_params.rbi +88 -0
- data/rbi/openlayer/models/governance/rule_result_create_evidence_response.rbi +108 -0
- data/rbi/openlayer/models/governance/rule_result_list_evidence_params.rbi +68 -0
- data/rbi/openlayer/models/governance/rule_result_list_evidence_response.rbi +151 -0
- data/rbi/openlayer/models/governance/rule_result_list_params.rbi +322 -0
- data/rbi/openlayer/models/governance/rule_result_list_response.rbi +567 -0
- data/rbi/openlayer/models/governance/rule_result_retrieve_params.rbi +43 -0
- data/rbi/openlayer/models/governance/rule_result_retrieve_response.rbi +524 -0
- data/rbi/openlayer/models/governance/rule_result_update_params.rbi +373 -0
- data/rbi/openlayer/models/governance/rule_result_update_response.rbi +524 -0
- data/rbi/openlayer/models/governance/rule_retrieve_params.rbi +40 -0
- data/rbi/openlayer/models/governance/rule_retrieve_response.rbi +1253 -0
- data/rbi/openlayer/models/governance/rule_stat_retrieve_params.rbi +68 -0
- data/rbi/openlayer/models/governance/rule_stat_retrieve_response.rbi +874 -0
- data/rbi/openlayer/models/governance/rule_tag_list_params.rbi +68 -0
- data/rbi/openlayer/models/governance/rule_tag_list_response.rbi +139 -0
- data/rbi/openlayer/models/governance/rule_update_params.rbi +106 -0
- data/rbi/openlayer/models/governance/rule_update_response.rbi +1253 -0
- data/rbi/openlayer/models/inference_pipeline_retrieve_response.rbi +37 -8
- data/rbi/openlayer/models/inference_pipeline_update_response.rbi +37 -8
- data/rbi/openlayer/models/project_create_params.rbi +34 -0
- data/rbi/openlayer/models/project_create_response.rbi +39 -8
- data/rbi/openlayer/models/project_list_response.rbi +39 -8
- data/rbi/openlayer/models/project_update_params.rbi +94 -0
- data/rbi/openlayer/models/project_update_response.rbi +432 -0
- data/rbi/openlayer/models/projects/inference_pipeline_create_params.rbi +37 -8
- data/rbi/openlayer/models/projects/inference_pipeline_create_response.rbi +37 -8
- data/rbi/openlayer/models/projects/inference_pipeline_list_response.rbi +37 -8
- data/rbi/openlayer/models/storage/presigned_url_retrieve_params.rbi +45 -0
- data/rbi/openlayer/models/storage/presigned_url_retrieve_response.rbi +32 -0
- data/rbi/openlayer/models.rbi +6 -0
- data/rbi/openlayer/resources/background_tasks.rbi +30 -0
- data/rbi/openlayer/resources/governance/frameworks/documents.rbi +65 -0
- data/rbi/openlayer/resources/governance/frameworks/sections.rbi +60 -0
- data/rbi/openlayer/resources/governance/frameworks/subsections.rbi +56 -0
- data/rbi/openlayer/resources/governance/frameworks.rbi +314 -0
- data/rbi/openlayer/resources/governance/rule_results.rbi +193 -0
- data/rbi/openlayer/resources/governance/rule_stats.rbi +38 -0
- data/rbi/openlayer/resources/governance/rule_tags.rbi +38 -0
- data/rbi/openlayer/resources/governance/rules.rbi +233 -0
- data/rbi/openlayer/resources/governance.rbi +27 -0
- data/rbi/openlayer/resources/projects.rbi +46 -0
- data/rbi/openlayer/resources/storage/presigned_url.rbi +23 -0
- data/sig/openlayer/client.rbs +4 -0
- data/sig/openlayer/models/background_task_retrieve_params.rbs +23 -0
- data/sig/openlayer/models/background_task_retrieve_response.rbs +55 -0
- data/sig/openlayer/models/governance/framework_create_params.rbs +124 -0
- data/sig/openlayer/models/governance/framework_create_response.rbs +293 -0
- data/sig/openlayer/models/governance/framework_export_params.rbs +30 -0
- data/sig/openlayer/models/governance/framework_export_response.rbs +21 -0
- data/sig/openlayer/models/governance/framework_list_params.rbs +145 -0
- data/sig/openlayer/models/governance/framework_list_project_rule_stats_params.rbs +87 -0
- data/sig/openlayer/models/governance/framework_list_project_rule_stats_response.rbs +232 -0
- data/sig/openlayer/models/governance/framework_list_projects_params.rbs +38 -0
- data/sig/openlayer/models/governance/framework_list_projects_response.rbs +248 -0
- data/sig/openlayer/models/governance/framework_list_response.rbs +314 -0
- data/sig/openlayer/models/governance/framework_list_rules_params.rbs +38 -0
- data/sig/openlayer/models/governance/framework_list_rules_response.rbs +547 -0
- data/sig/openlayer/models/governance/framework_retrieve_params.rbs +25 -0
- data/sig/openlayer/models/governance/framework_retrieve_response.rbs +293 -0
- data/sig/openlayer/models/governance/framework_update_params.rbs +175 -0
- data/sig/openlayer/models/governance/framework_update_response.rbs +293 -0
- data/sig/openlayer/models/governance/frameworks/document_list_params.rbs +40 -0
- data/sig/openlayer/models/governance/frameworks/document_list_response.rbs +435 -0
- data/sig/openlayer/models/governance/frameworks/document_retrieve_params.rbs +32 -0
- data/sig/openlayer/models/governance/frameworks/document_retrieve_response.rbs +418 -0
- data/sig/openlayer/models/governance/frameworks/section_list_rules_params.rbs +102 -0
- data/sig/openlayer/models/governance/frameworks/section_list_rules_response.rbs +549 -0
- data/sig/openlayer/models/governance/frameworks/subsection_list_rules_params.rbs +95 -0
- data/sig/openlayer/models/governance/frameworks/subsection_list_rules_response.rbs +549 -0
- data/sig/openlayer/models/governance/rule_create_params.rbs +120 -0
- data/sig/openlayer/models/governance/rule_create_response.rbs +530 -0
- data/sig/openlayer/models/governance/rule_delete_params.rbs +25 -0
- data/sig/openlayer/models/governance/rule_list_params.rbs +228 -0
- data/sig/openlayer/models/governance/rule_list_response.rbs +547 -0
- data/sig/openlayer/models/governance/rule_result_create_evidence_params.rbs +53 -0
- data/sig/openlayer/models/governance/rule_result_create_evidence_response.rbs +62 -0
- data/sig/openlayer/models/governance/rule_result_list_evidence_params.rbs +38 -0
- data/sig/openlayer/models/governance/rule_result_list_evidence_response.rbs +79 -0
- data/sig/openlayer/models/governance/rule_result_list_params.rbs +156 -0
- data/sig/openlayer/models/governance/rule_result_list_response.rbs +252 -0
- data/sig/openlayer/models/governance/rule_result_retrieve_params.rbs +26 -0
- data/sig/openlayer/models/governance/rule_result_retrieve_response.rbs +235 -0
- data/sig/openlayer/models/governance/rule_result_update_params.rbs +165 -0
- data/sig/openlayer/models/governance/rule_result_update_response.rbs +235 -0
- data/sig/openlayer/models/governance/rule_retrieve_params.rbs +25 -0
- data/sig/openlayer/models/governance/rule_retrieve_response.rbs +530 -0
- data/sig/openlayer/models/governance/rule_stat_retrieve_params.rbs +38 -0
- data/sig/openlayer/models/governance/rule_stat_retrieve_response.rbs +434 -0
- data/sig/openlayer/models/governance/rule_tag_list_params.rbs +38 -0
- data/sig/openlayer/models/governance/rule_tag_list_response.rbs +74 -0
- data/sig/openlayer/models/governance/rule_update_params.rbs +62 -0
- data/sig/openlayer/models/governance/rule_update_response.rbs +530 -0
- data/sig/openlayer/models/inference_pipeline_retrieve_response.rbs +24 -5
- data/sig/openlayer/models/inference_pipeline_update_response.rbs +24 -5
- data/sig/openlayer/models/project_create_params.rbs +21 -1
- data/sig/openlayer/models/project_create_response.rbs +24 -5
- data/sig/openlayer/models/project_list_response.rbs +24 -5
- data/sig/openlayer/models/project_update_params.rbs +58 -0
- data/sig/openlayer/models/project_update_response.rbs +229 -0
- data/sig/openlayer/models/projects/inference_pipeline_create_params.rbs +24 -5
- data/sig/openlayer/models/projects/inference_pipeline_create_response.rbs +24 -5
- data/sig/openlayer/models/projects/inference_pipeline_list_response.rbs +24 -5
- data/sig/openlayer/models/storage/presigned_url_retrieve_params.rbs +25 -0
- data/sig/openlayer/models/storage/presigned_url_retrieve_response.rbs +15 -0
- data/sig/openlayer/models.rbs +6 -0
- data/sig/openlayer/resources/background_tasks.rbs +12 -0
- data/sig/openlayer/resources/governance/frameworks/documents.rbs +24 -0
- data/sig/openlayer/resources/governance/frameworks/sections.rbs +23 -0
- data/sig/openlayer/resources/governance/frameworks/subsections.rbs +22 -0
- data/sig/openlayer/resources/governance/frameworks.rbs +88 -0
- data/sig/openlayer/resources/governance/rule_results.rbs +57 -0
- data/sig/openlayer/resources/governance/rule_stats.rbs +16 -0
- data/sig/openlayer/resources/governance/rule_tags.rbs +16 -0
- data/sig/openlayer/resources/governance/rules.rbs +68 -0
- data/sig/openlayer/resources/governance.rbs +17 -0
- data/sig/openlayer/resources/projects.rbs +15 -0
- data/sig/openlayer/resources/storage/presigned_url.rbs +5 -0
- metadata +191 -2
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module Openlayer
|
|
4
|
+
module Models
|
|
5
|
+
module Storage
|
|
6
|
+
class PresignedURLRetrieveParams < Openlayer::Internal::Type::BaseModel
|
|
7
|
+
extend Openlayer::Internal::Type::RequestParameters::Converter
|
|
8
|
+
include Openlayer::Internal::Type::RequestParameters
|
|
9
|
+
|
|
10
|
+
OrHash =
|
|
11
|
+
T.type_alias do
|
|
12
|
+
T.any(
|
|
13
|
+
Openlayer::Storage::PresignedURLRetrieveParams,
|
|
14
|
+
Openlayer::Internal::AnyHash
|
|
15
|
+
)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# The object's storage uri.
|
|
19
|
+
sig { returns(String) }
|
|
20
|
+
attr_accessor :storage_uri
|
|
21
|
+
|
|
22
|
+
sig do
|
|
23
|
+
params(
|
|
24
|
+
storage_uri: String,
|
|
25
|
+
request_options: Openlayer::RequestOptions::OrHash
|
|
26
|
+
).returns(T.attached_class)
|
|
27
|
+
end
|
|
28
|
+
def self.new(
|
|
29
|
+
# The object's storage uri.
|
|
30
|
+
storage_uri:,
|
|
31
|
+
request_options: {}
|
|
32
|
+
)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
sig do
|
|
36
|
+
override.returns(
|
|
37
|
+
{ storage_uri: String, request_options: Openlayer::RequestOptions }
|
|
38
|
+
)
|
|
39
|
+
end
|
|
40
|
+
def to_hash
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module Openlayer
|
|
4
|
+
module Models
|
|
5
|
+
module Storage
|
|
6
|
+
class PresignedURLRetrieveResponse < Openlayer::Internal::Type::BaseModel
|
|
7
|
+
OrHash =
|
|
8
|
+
T.type_alias do
|
|
9
|
+
T.any(
|
|
10
|
+
Openlayer::Models::Storage::PresignedURLRetrieveResponse,
|
|
11
|
+
Openlayer::Internal::AnyHash
|
|
12
|
+
)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# The presigned url. Short-lived -- download promptly.
|
|
16
|
+
sig { returns(String) }
|
|
17
|
+
attr_accessor :url
|
|
18
|
+
|
|
19
|
+
sig { params(url: String).returns(T.attached_class) }
|
|
20
|
+
def self.new(
|
|
21
|
+
# The presigned url. Short-lived -- download promptly.
|
|
22
|
+
url:
|
|
23
|
+
)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
sig { override.returns({ url: String }) }
|
|
27
|
+
def to_hash
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
data/rbi/openlayer/models.rbi
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
# typed: strong
|
|
2
2
|
|
|
3
3
|
module Openlayer
|
|
4
|
+
BackgroundTaskRetrieveParams = Openlayer::Models::BackgroundTaskRetrieveParams
|
|
5
|
+
|
|
4
6
|
CommitRetrieveParams = Openlayer::Models::CommitRetrieveParams
|
|
5
7
|
|
|
6
8
|
Commits = Openlayer::Models::Commits
|
|
7
9
|
|
|
10
|
+
Governance = Openlayer::Models::Governance
|
|
11
|
+
|
|
8
12
|
InferencePipelineDeleteParams =
|
|
9
13
|
Openlayer::Models::InferencePipelineDeleteParams
|
|
10
14
|
|
|
@@ -30,6 +34,8 @@ module Openlayer
|
|
|
30
34
|
|
|
31
35
|
Projects = Openlayer::Models::Projects
|
|
32
36
|
|
|
37
|
+
ProjectUpdateParams = Openlayer::Models::ProjectUpdateParams
|
|
38
|
+
|
|
33
39
|
Storage = Openlayer::Models::Storage
|
|
34
40
|
|
|
35
41
|
TestEvaluateParams = Openlayer::Models::TestEvaluateParams
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module Openlayer
|
|
4
|
+
module Resources
|
|
5
|
+
class BackgroundTasks
|
|
6
|
+
# Retrieve a background task's status, progress and results.
|
|
7
|
+
#
|
|
8
|
+
# Endpoints that cannot answer within one request queue a task and hand back its
|
|
9
|
+
# id -- for example `POST /frameworks/{frameworkId}/export`. Poll this endpoint
|
|
10
|
+
# until `complete` is `true`, then read what the task produced from `outputs`.
|
|
11
|
+
sig do
|
|
12
|
+
params(
|
|
13
|
+
task_id: String,
|
|
14
|
+
request_options: Openlayer::RequestOptions::OrHash
|
|
15
|
+
).returns(Openlayer::Models::BackgroundTaskRetrieveResponse)
|
|
16
|
+
end
|
|
17
|
+
def retrieve(
|
|
18
|
+
# The background task id.
|
|
19
|
+
task_id,
|
|
20
|
+
request_options: {}
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# @api private
|
|
25
|
+
sig { params(client: Openlayer::Client).returns(T.attached_class) }
|
|
26
|
+
def self.new(client:)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module Openlayer
|
|
4
|
+
module Resources
|
|
5
|
+
class Governance
|
|
6
|
+
class Frameworks
|
|
7
|
+
class Documents
|
|
8
|
+
# Retrieve a framework document, including its sections, subsections, and the
|
|
9
|
+
# rules mapped to each.
|
|
10
|
+
#
|
|
11
|
+
# Each section and subsection carries a `ruleCount`, so you can tell which
|
|
12
|
+
# requirements have rules mapped to them before drilling in.
|
|
13
|
+
sig do
|
|
14
|
+
params(
|
|
15
|
+
document_id: String,
|
|
16
|
+
framework_id: String,
|
|
17
|
+
request_options: Openlayer::RequestOptions::OrHash
|
|
18
|
+
).returns(
|
|
19
|
+
Openlayer::Models::Governance::Frameworks::DocumentRetrieveResponse
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
def retrieve(
|
|
23
|
+
# The framework document id.
|
|
24
|
+
document_id,
|
|
25
|
+
# The framework id.
|
|
26
|
+
framework_id:,
|
|
27
|
+
request_options: {}
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# List the documents attached to a framework.
|
|
32
|
+
#
|
|
33
|
+
# A document holds the text of the standard the framework is based on, split into
|
|
34
|
+
# sections and subsections. Retrieve a single document to get that structure,
|
|
35
|
+
# along with the rules mapped to each part of it.
|
|
36
|
+
sig do
|
|
37
|
+
params(
|
|
38
|
+
framework_id: String,
|
|
39
|
+
page: Integer,
|
|
40
|
+
per_page: Integer,
|
|
41
|
+
request_options: Openlayer::RequestOptions::OrHash
|
|
42
|
+
).returns(
|
|
43
|
+
Openlayer::Models::Governance::Frameworks::DocumentListResponse
|
|
44
|
+
)
|
|
45
|
+
end
|
|
46
|
+
def list(
|
|
47
|
+
# The framework id.
|
|
48
|
+
framework_id,
|
|
49
|
+
# The page to return in a paginated query.
|
|
50
|
+
page: nil,
|
|
51
|
+
# Maximum number of items to return per page.
|
|
52
|
+
per_page: nil,
|
|
53
|
+
request_options: {}
|
|
54
|
+
)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# @api private
|
|
58
|
+
sig { params(client: Openlayer::Client).returns(T.attached_class) }
|
|
59
|
+
def self.new(client:)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module Openlayer
|
|
4
|
+
module Resources
|
|
5
|
+
class Governance
|
|
6
|
+
class Frameworks
|
|
7
|
+
class Sections
|
|
8
|
+
# List the rules mapped to a section of a framework document.
|
|
9
|
+
#
|
|
10
|
+
# Pass `includeSubsectionRules=true` to also return the rules mapped to the
|
|
11
|
+
# section's subsections, which is how you get every rule covering a requirement
|
|
12
|
+
# and everything under it.
|
|
13
|
+
sig do
|
|
14
|
+
params(
|
|
15
|
+
section_id: String,
|
|
16
|
+
framework_id: String,
|
|
17
|
+
include_results: T::Boolean,
|
|
18
|
+
include_subsection_rules: T::Boolean,
|
|
19
|
+
page: Integer,
|
|
20
|
+
per_page: Integer,
|
|
21
|
+
project_id: String,
|
|
22
|
+
status:
|
|
23
|
+
Openlayer::Governance::Frameworks::SectionListRulesParams::Status::OrSymbol,
|
|
24
|
+
request_options: Openlayer::RequestOptions::OrHash
|
|
25
|
+
).returns(
|
|
26
|
+
Openlayer::Models::Governance::Frameworks::SectionListRulesResponse
|
|
27
|
+
)
|
|
28
|
+
end
|
|
29
|
+
def list_rules(
|
|
30
|
+
# Path param: The framework document section id.
|
|
31
|
+
section_id,
|
|
32
|
+
# Path param: The framework id.
|
|
33
|
+
framework_id:,
|
|
34
|
+
# Query param: Whether to include each rule's results inline, in a `results`
|
|
35
|
+
# array.
|
|
36
|
+
include_results: nil,
|
|
37
|
+
# Query param: Whether to also include the rules mapped to the section's
|
|
38
|
+
# subsections.
|
|
39
|
+
include_subsection_rules: nil,
|
|
40
|
+
# Query param: The page to return in a paginated query.
|
|
41
|
+
page: nil,
|
|
42
|
+
# Query param: Maximum number of items to return per page.
|
|
43
|
+
per_page: nil,
|
|
44
|
+
# Query param: Only include items that apply to this project.
|
|
45
|
+
project_id: nil,
|
|
46
|
+
# Query param: Only include items whose rule result has this compliance status.
|
|
47
|
+
status: nil,
|
|
48
|
+
request_options: {}
|
|
49
|
+
)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# @api private
|
|
53
|
+
sig { params(client: Openlayer::Client).returns(T.attached_class) }
|
|
54
|
+
def self.new(client:)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module Openlayer
|
|
4
|
+
module Resources
|
|
5
|
+
class Governance
|
|
6
|
+
class Frameworks
|
|
7
|
+
class Subsections
|
|
8
|
+
# List the rules mapped to a subsection of a framework document.
|
|
9
|
+
#
|
|
10
|
+
# A subsection is usually the level at which a standard states an individual
|
|
11
|
+
# requirement, so this is the endpoint to use when you want to show which rules
|
|
12
|
+
# cover a specific clause.
|
|
13
|
+
sig do
|
|
14
|
+
params(
|
|
15
|
+
subsection_id: String,
|
|
16
|
+
framework_id: String,
|
|
17
|
+
include_results: T::Boolean,
|
|
18
|
+
page: Integer,
|
|
19
|
+
per_page: Integer,
|
|
20
|
+
project_id: String,
|
|
21
|
+
status:
|
|
22
|
+
Openlayer::Governance::Frameworks::SubsectionListRulesParams::Status::OrSymbol,
|
|
23
|
+
request_options: Openlayer::RequestOptions::OrHash
|
|
24
|
+
).returns(
|
|
25
|
+
Openlayer::Models::Governance::Frameworks::SubsectionListRulesResponse
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
def list_rules(
|
|
29
|
+
# Path param: The framework document subsection id.
|
|
30
|
+
subsection_id,
|
|
31
|
+
# Path param: The framework id.
|
|
32
|
+
framework_id:,
|
|
33
|
+
# Query param: Whether to include each rule's results inline, in a `results`
|
|
34
|
+
# array.
|
|
35
|
+
include_results: nil,
|
|
36
|
+
# Query param: The page to return in a paginated query.
|
|
37
|
+
page: nil,
|
|
38
|
+
# Query param: Maximum number of items to return per page.
|
|
39
|
+
per_page: nil,
|
|
40
|
+
# Query param: Only include items that apply to this project.
|
|
41
|
+
project_id: nil,
|
|
42
|
+
# Query param: Only include items whose rule result has this compliance status.
|
|
43
|
+
status: nil,
|
|
44
|
+
request_options: {}
|
|
45
|
+
)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# @api private
|
|
49
|
+
sig { params(client: Openlayer::Client).returns(T.attached_class) }
|
|
50
|
+
def self.new(client:)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module Openlayer
|
|
4
|
+
module Resources
|
|
5
|
+
class Governance
|
|
6
|
+
class Frameworks
|
|
7
|
+
sig { returns(Openlayer::Resources::Governance::Frameworks::Documents) }
|
|
8
|
+
attr_reader :documents
|
|
9
|
+
|
|
10
|
+
sig { returns(Openlayer::Resources::Governance::Frameworks::Sections) }
|
|
11
|
+
attr_reader :sections
|
|
12
|
+
|
|
13
|
+
sig do
|
|
14
|
+
returns(Openlayer::Resources::Governance::Frameworks::Subsections)
|
|
15
|
+
end
|
|
16
|
+
attr_reader :subsections
|
|
17
|
+
|
|
18
|
+
# Create a custom governance framework in a workspace.
|
|
19
|
+
#
|
|
20
|
+
# Use this to track compliance against an internal policy, or against a standard
|
|
21
|
+
# Openlayer does not ship as a built-in framework. A new framework starts with no
|
|
22
|
+
# rules -- add them from the Openlayer app, or map an existing rule to it.
|
|
23
|
+
#
|
|
24
|
+
# A framework is created disabled unless you pass `enabled: true`. While it is
|
|
25
|
+
# disabled its rules are not evaluated and do not count towards compliance.
|
|
26
|
+
sig do
|
|
27
|
+
params(
|
|
28
|
+
workspace_id: String,
|
|
29
|
+
name: String,
|
|
30
|
+
description: T.nilable(String),
|
|
31
|
+
enabled: T::Boolean,
|
|
32
|
+
project_selector:
|
|
33
|
+
T.nilable(
|
|
34
|
+
Openlayer::Governance::FrameworkCreateParams::ProjectSelector::OrHash
|
|
35
|
+
),
|
|
36
|
+
tags: T::Array[String],
|
|
37
|
+
request_options: Openlayer::RequestOptions::OrHash
|
|
38
|
+
).returns(Openlayer::Models::Governance::FrameworkCreateResponse)
|
|
39
|
+
end
|
|
40
|
+
def create(
|
|
41
|
+
# The workspace id.
|
|
42
|
+
workspace_id,
|
|
43
|
+
# The framework name.
|
|
44
|
+
name:,
|
|
45
|
+
# A short description of the framework.
|
|
46
|
+
description: nil,
|
|
47
|
+
# Whether the framework is active. Rules of a disabled framework are not evaluated
|
|
48
|
+
# and do not count towards compliance.
|
|
49
|
+
enabled: nil,
|
|
50
|
+
# Determines which projects the framework applies to. An empty or `null` `match`
|
|
51
|
+
# array applies the framework to every project in the workspace.
|
|
52
|
+
project_selector: nil,
|
|
53
|
+
# Free-form labels on the framework.
|
|
54
|
+
tags: nil,
|
|
55
|
+
request_options: {}
|
|
56
|
+
)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Retrieve a governance framework by its id.
|
|
60
|
+
sig do
|
|
61
|
+
params(
|
|
62
|
+
framework_id: String,
|
|
63
|
+
request_options: Openlayer::RequestOptions::OrHash
|
|
64
|
+
).returns(Openlayer::Models::Governance::FrameworkRetrieveResponse)
|
|
65
|
+
end
|
|
66
|
+
def retrieve(
|
|
67
|
+
# The framework id.
|
|
68
|
+
framework_id,
|
|
69
|
+
request_options: {}
|
|
70
|
+
)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Update a governance framework.
|
|
74
|
+
#
|
|
75
|
+
# The most common use is activating or deactivating a framework for the workspace
|
|
76
|
+
# by setting `enabled`. Rules of a disabled framework are not evaluated and do not
|
|
77
|
+
# count towards compliance.
|
|
78
|
+
#
|
|
79
|
+
# Frameworks that ship with Openlayer report `immutable: true`. For those, only
|
|
80
|
+
# `enabled`, `tags`, and `projectSelector` can be changed -- their name and
|
|
81
|
+
# definition are managed by Openlayer.
|
|
82
|
+
#
|
|
83
|
+
# Only the fields you send are changed.
|
|
84
|
+
sig do
|
|
85
|
+
params(
|
|
86
|
+
framework_id: String,
|
|
87
|
+
avatar:
|
|
88
|
+
T.nilable(
|
|
89
|
+
Openlayer::Governance::FrameworkUpdateParams::Avatar::OrHash
|
|
90
|
+
),
|
|
91
|
+
description: T.nilable(String),
|
|
92
|
+
enabled: T::Boolean,
|
|
93
|
+
extended_description: T.nilable(T::Hash[Symbol, T.anything]),
|
|
94
|
+
href: T.nilable(String),
|
|
95
|
+
name: String,
|
|
96
|
+
project_selector:
|
|
97
|
+
T.nilable(
|
|
98
|
+
Openlayer::Governance::FrameworkUpdateParams::ProjectSelector::OrHash
|
|
99
|
+
),
|
|
100
|
+
tags: T::Array[String],
|
|
101
|
+
request_options: Openlayer::RequestOptions::OrHash
|
|
102
|
+
).returns(Openlayer::Models::Governance::FrameworkUpdateResponse)
|
|
103
|
+
end
|
|
104
|
+
def update(
|
|
105
|
+
# The framework id.
|
|
106
|
+
framework_id,
|
|
107
|
+
# The icon shown for the framework.
|
|
108
|
+
avatar: nil,
|
|
109
|
+
# A short description of the framework.
|
|
110
|
+
description: nil,
|
|
111
|
+
# Whether the framework is active. Rules of a disabled framework are not evaluated
|
|
112
|
+
# and do not count towards compliance.
|
|
113
|
+
enabled: nil,
|
|
114
|
+
# A longer, rich-text description, as a TipTap JSON document.
|
|
115
|
+
extended_description: nil,
|
|
116
|
+
# A link to the external standard or regulation the framework is based on.
|
|
117
|
+
href: nil,
|
|
118
|
+
# The framework name.
|
|
119
|
+
name: nil,
|
|
120
|
+
# Determines which projects the framework applies to. An empty or `null` `match`
|
|
121
|
+
# array applies the framework to every project in the workspace.
|
|
122
|
+
project_selector: nil,
|
|
123
|
+
# Free-form labels on the framework.
|
|
124
|
+
tags: nil,
|
|
125
|
+
request_options: {}
|
|
126
|
+
)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# List the governance frameworks in a workspace.
|
|
130
|
+
#
|
|
131
|
+
# A framework is a set of rules -- drawn from a regulation, a standard, or your
|
|
132
|
+
# own internal policy -- that Openlayer tracks compliance against. Use this
|
|
133
|
+
# endpoint to find the framework you want to report on, then read its rules and
|
|
134
|
+
# rule results.
|
|
135
|
+
sig do
|
|
136
|
+
params(
|
|
137
|
+
workspace_id: String,
|
|
138
|
+
asc: T::Boolean,
|
|
139
|
+
completion_operator:
|
|
140
|
+
Openlayer::Governance::FrameworkListParams::CompletionOperator::OrSymbol,
|
|
141
|
+
completion_value: Integer,
|
|
142
|
+
enabled: T::Boolean,
|
|
143
|
+
include_rule_stats: T::Boolean,
|
|
144
|
+
page: Integer,
|
|
145
|
+
per_page: Integer,
|
|
146
|
+
project_id: String,
|
|
147
|
+
search_query: String,
|
|
148
|
+
sort_column:
|
|
149
|
+
Openlayer::Governance::FrameworkListParams::SortColumn::OrSymbol,
|
|
150
|
+
tags: T::Array[String],
|
|
151
|
+
request_options: Openlayer::RequestOptions::OrHash
|
|
152
|
+
).returns(Openlayer::Models::Governance::FrameworkListResponse)
|
|
153
|
+
end
|
|
154
|
+
def list(
|
|
155
|
+
# The workspace id.
|
|
156
|
+
workspace_id,
|
|
157
|
+
# Whether to sort in ascending order.
|
|
158
|
+
asc: nil,
|
|
159
|
+
# How to compare each framework's completion percentage with `completionValue`.
|
|
160
|
+
# Must be sent together with `completionValue`.
|
|
161
|
+
completion_operator: nil,
|
|
162
|
+
# The completion percentage to compare against, from 0 to 100.
|
|
163
|
+
completion_value: nil,
|
|
164
|
+
# Only include frameworks that are enabled (or disabled).
|
|
165
|
+
enabled: nil,
|
|
166
|
+
# Whether to include a `ruleStats` object on each framework, with its rule result
|
|
167
|
+
# status counts and its per-project completion buckets. Computed over the returned
|
|
168
|
+
# page only.
|
|
169
|
+
include_rule_stats: nil,
|
|
170
|
+
# The page to return in a paginated query.
|
|
171
|
+
page: nil,
|
|
172
|
+
# Maximum number of items to return per page.
|
|
173
|
+
per_page: nil,
|
|
174
|
+
# Only include items that apply to this project.
|
|
175
|
+
project_id: nil,
|
|
176
|
+
# Filter by a free-text search over names and descriptions.
|
|
177
|
+
search_query: nil,
|
|
178
|
+
# The column to sort on.
|
|
179
|
+
sort_column: nil,
|
|
180
|
+
# Only include frameworks carrying all of these tags.
|
|
181
|
+
tags: nil,
|
|
182
|
+
request_options: {}
|
|
183
|
+
)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# Export a framework's evidence and progress as an audit-ready zip archive.
|
|
187
|
+
#
|
|
188
|
+
# The archive holds every evidence file uploaded against the framework's
|
|
189
|
+
# evidence-based rules, a markdown report of the framework's progress and the
|
|
190
|
+
# status of all its rules (broken down by documentation section when the framework
|
|
191
|
+
# has documents), and CSV manifests of rules and evidence with SHA-256 checksums.
|
|
192
|
+
#
|
|
193
|
+
# Send `projectId` to export one project's compliance with the framework. Omit it
|
|
194
|
+
# for the workspace-wide view across every project in the framework, including
|
|
195
|
+
# workspace-scoped rules.
|
|
196
|
+
#
|
|
197
|
+
# The export runs as a background task, so this returns `202` immediately. To
|
|
198
|
+
# collect the archive:
|
|
199
|
+
#
|
|
200
|
+
# 1. Poll `GET /background-tasks/{taskId}` with the returned `taskResultId` until
|
|
201
|
+
# `complete` is `true`.
|
|
202
|
+
# 2. Read `outputs.storageUri` off that task.
|
|
203
|
+
# 3. Exchange it for a download link at
|
|
204
|
+
# `GET /storage/presigned-url?storageUri=<uri>`.
|
|
205
|
+
#
|
|
206
|
+
# Rate limited to 2 requests per minute per framework. Asking for an export while
|
|
207
|
+
# an identical one is still queued returns that task rather than starting a second
|
|
208
|
+
# one.
|
|
209
|
+
sig do
|
|
210
|
+
params(
|
|
211
|
+
framework_id: String,
|
|
212
|
+
project_id: T.nilable(String),
|
|
213
|
+
request_options: Openlayer::RequestOptions::OrHash
|
|
214
|
+
).returns(Openlayer::Models::Governance::FrameworkExportResponse)
|
|
215
|
+
end
|
|
216
|
+
def export(
|
|
217
|
+
# The framework id.
|
|
218
|
+
framework_id,
|
|
219
|
+
# Scope the export to this project. It must belong to the framework.
|
|
220
|
+
project_id: nil,
|
|
221
|
+
request_options: {}
|
|
222
|
+
)
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
# Get a compliance roll-up for a framework, one row per project it applies to.
|
|
226
|
+
#
|
|
227
|
+
# Each row counts the project's rule results by status, so you can report on where
|
|
228
|
+
# a framework is complete and where it is not without fetching every individual
|
|
229
|
+
# rule result.
|
|
230
|
+
sig do
|
|
231
|
+
params(
|
|
232
|
+
framework_id: String,
|
|
233
|
+
asc: T::Boolean,
|
|
234
|
+
page: Integer,
|
|
235
|
+
per_page: Integer,
|
|
236
|
+
sort_column:
|
|
237
|
+
Openlayer::Governance::FrameworkListProjectRuleStatsParams::SortColumn::OrSymbol,
|
|
238
|
+
request_options: Openlayer::RequestOptions::OrHash
|
|
239
|
+
).returns(
|
|
240
|
+
Openlayer::Models::Governance::FrameworkListProjectRuleStatsResponse
|
|
241
|
+
)
|
|
242
|
+
end
|
|
243
|
+
def list_project_rule_stats(
|
|
244
|
+
# The framework id.
|
|
245
|
+
framework_id,
|
|
246
|
+
# Whether to sort in ascending order.
|
|
247
|
+
asc: nil,
|
|
248
|
+
# The page to return in a paginated query.
|
|
249
|
+
page: nil,
|
|
250
|
+
# Maximum number of items to return per page.
|
|
251
|
+
per_page: nil,
|
|
252
|
+
# The column to sort on.
|
|
253
|
+
sort_column: nil,
|
|
254
|
+
request_options: {}
|
|
255
|
+
)
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
# List the projects a framework applies to.
|
|
259
|
+
#
|
|
260
|
+
# Which projects a framework covers is determined by its `projectSelector`. A
|
|
261
|
+
# framework with an empty selector applies to every project in the workspace.
|
|
262
|
+
sig do
|
|
263
|
+
params(
|
|
264
|
+
framework_id: String,
|
|
265
|
+
page: Integer,
|
|
266
|
+
per_page: Integer,
|
|
267
|
+
request_options: Openlayer::RequestOptions::OrHash
|
|
268
|
+
).returns(
|
|
269
|
+
Openlayer::Models::Governance::FrameworkListProjectsResponse
|
|
270
|
+
)
|
|
271
|
+
end
|
|
272
|
+
def list_projects(
|
|
273
|
+
# The framework id.
|
|
274
|
+
framework_id,
|
|
275
|
+
# The page to return in a paginated query.
|
|
276
|
+
page: nil,
|
|
277
|
+
# Maximum number of items to return per page.
|
|
278
|
+
per_page: nil,
|
|
279
|
+
request_options: {}
|
|
280
|
+
)
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
# List the rules that belong to a framework.
|
|
284
|
+
#
|
|
285
|
+
# To read the compliance status of these rules, use
|
|
286
|
+
# [List rule results](/api-reference/rest/governance/list-rule-results) with the
|
|
287
|
+
# `frameworkId` filter, or fetch the results of an individual rule.
|
|
288
|
+
sig do
|
|
289
|
+
params(
|
|
290
|
+
framework_id: String,
|
|
291
|
+
page: Integer,
|
|
292
|
+
per_page: Integer,
|
|
293
|
+
request_options: Openlayer::RequestOptions::OrHash
|
|
294
|
+
).returns(Openlayer::Models::Governance::FrameworkListRulesResponse)
|
|
295
|
+
end
|
|
296
|
+
def list_rules(
|
|
297
|
+
# The framework id.
|
|
298
|
+
framework_id,
|
|
299
|
+
# The page to return in a paginated query.
|
|
300
|
+
page: nil,
|
|
301
|
+
# Maximum number of items to return per page.
|
|
302
|
+
per_page: nil,
|
|
303
|
+
request_options: {}
|
|
304
|
+
)
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
# @api private
|
|
308
|
+
sig { params(client: Openlayer::Client).returns(T.attached_class) }
|
|
309
|
+
def self.new(client:)
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
end
|
|
313
|
+
end
|
|
314
|
+
end
|