crossplane-function-sdk-python 0.2.0__tar.gz → 0.4.0__tar.gz

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.
Files changed (27) hide show
  1. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/.github/workflows/ci.yml +2 -2
  2. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/PKG-INFO +3 -2
  3. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/crossplane/function/__version__.py +1 -1
  4. {crossplane_function_sdk_python-0.2.0/crossplane/function/proto/v1beta1 → crossplane_function_sdk_python-0.4.0/crossplane/function/proto/v1}/run_function.proto +90 -5
  5. crossplane_function_sdk_python-0.4.0/crossplane/function/proto/v1/run_function_pb2.py +103 -0
  6. {crossplane_function_sdk_python-0.2.0/crossplane/function/proto/v1beta1 → crossplane_function_sdk_python-0.4.0/crossplane/function/proto/v1}/run_function_pb2.pyi +74 -6
  7. crossplane_function_sdk_python-0.4.0/crossplane/function/proto/v1/run_function_pb2_grpc.py +101 -0
  8. crossplane_function_sdk_python-0.4.0/crossplane/function/proto/v1beta1/run_function.proto +328 -0
  9. crossplane_function_sdk_python-0.4.0/crossplane/function/proto/v1beta1/run_function_pb2.py +103 -0
  10. crossplane_function_sdk_python-0.4.0/crossplane/function/proto/v1beta1/run_function_pb2.pyi +232 -0
  11. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/crossplane/function/proto/v1beta1/run_function_pb2_grpc.py +35 -4
  12. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/crossplane/function/resource.py +25 -1
  13. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/crossplane/function/response.py +14 -14
  14. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/crossplane/function/runtime.py +38 -3
  15. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/pyproject.toml +10 -9
  16. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/tests/test_resource.py +80 -0
  17. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/tests/test_response.py +11 -11
  18. crossplane_function_sdk_python-0.4.0/tests/test_runtime.py +71 -0
  19. crossplane_function_sdk_python-0.2.0/crossplane/function/proto/v1beta1/run_function_pb2.py +0 -74
  20. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  21. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  22. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  23. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/.gitignore +0 -0
  24. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/LICENSE +0 -0
  25. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/README.md +0 -0
  26. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/crossplane/function/logging.py +0 -0
  27. {crossplane_function_sdk_python-0.2.0 → crossplane_function_sdk_python-0.4.0}/renovate.json +0 -0
@@ -119,7 +119,7 @@ jobs:
119
119
  path: "dist"
120
120
 
121
121
  - name: Publish to PyPI
122
- uses: pypa/gh-action-pypi-publish@v1.8.11
122
+ uses: pypa/gh-action-pypi-publish@v1.10.1
123
123
  with:
124
124
  # Note that this is currently being pushed to the 'crossplane' PyPI
125
125
  # user (not org). See @negz if you need access - PyPI requires 2FA to
@@ -149,7 +149,7 @@ jobs:
149
149
  run: hatch run docs:pdoc -d google crossplane/function -o docs
150
150
 
151
151
  - name: Setup Pages
152
- uses: actions/configure-pages@v4
152
+ uses: actions/configure-pages@v5
153
153
 
154
154
  - name: Upload artifact
155
155
  uses: actions/upload-pages-artifact@v3
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: crossplane-function-sdk-python
3
- Version: 0.2.0
3
+ Version: 0.4.0
4
4
  Summary: The Python SDK for Crossplane composition functions
5
5
  Project-URL: Documentation, https://github.com/crossplane/function-sdk-python#readme
6
6
  Project-URL: Issues, https://github.com/crossplane/function-sdk-python/issues
@@ -14,6 +14,7 @@ Classifier: Programming Language :: Python :: 3.11
14
14
  Requires-Python: >=3.11
15
15
  Requires-Dist: grpcio-reflection==1.*
16
16
  Requires-Dist: grpcio==1.*
17
+ Requires-Dist: protobuf==5.27.2
17
18
  Requires-Dist: structlog==24.*
18
19
  Description-Content-Type: text/markdown
19
20
 
@@ -15,4 +15,4 @@
15
15
  """The version of function-sdk-python."""
16
16
 
17
17
  # This is set at build time, using "hatch version"
18
- __version__ = "0.2.0"
18
+ __version__ = "0.4.0"
@@ -19,10 +19,9 @@ syntax = "proto3";
19
19
  import "google/protobuf/struct.proto";
20
20
  import "google/protobuf/duration.proto";
21
21
 
22
- // Note that the authoritative Composition Functions protobuf definition lives
23
- // at the below URL. Each SDK maintains and manually syncs its own copy.
24
- // https://github.com/crossplane/crossplane/tree/master/apis/apiextensions/fn/proto
25
- package apiextensions.fn.proto.v1beta1;
22
+ package apiextensions.fn.proto.v1;
23
+
24
+ option go_package = "github.com/crossplane/crossplane/apis/apiextensions/fn/proto/v1";
26
25
 
27
26
  // A FunctionRunnerService is a Composition Function.
28
27
  service FunctionRunnerService {
@@ -69,6 +68,24 @@ message RunFunctionRequest {
69
68
  // did not exist, Crossplane sets the map key to an empty Resources message to
70
69
  // indicate that it attempted to satisfy the request.
71
70
  map<string, Resources> extra_resources = 6;
71
+
72
+ // Optional credentials that this Function may use to communicate with an
73
+ // external system.
74
+ map <string, Credentials> credentials = 7;
75
+ }
76
+
77
+ // Credentials that a Function may use to communicate with an external system.
78
+ message Credentials {
79
+ // Source of the credentials.
80
+ oneof source {
81
+ // Credential data loaded by Crossplane, for example from a Secret.
82
+ CredentialData credential_data = 1;
83
+ }
84
+ }
85
+
86
+ // CredentialData loaded by Crossplane, for example from a Secret.
87
+ message CredentialData {
88
+ map<string, bytes> data = 1;
72
89
  }
73
90
 
74
91
  // Resources represents the state of several Crossplane resources.
@@ -104,6 +121,10 @@ message RunFunctionResponse {
104
121
 
105
122
  // Requirements that must be satisfied for this Function to run successfully.
106
123
  Requirements requirements = 5;
124
+
125
+ // Status conditions to be applied to the composite resource. Conditions may also
126
+ // optionally be applied to the composite resource's associated claim.
127
+ repeated Condition conditions = 6;
107
128
  }
108
129
 
109
130
  // RequestMeta contains metadata pertaining to a RunFunctionRequest.
@@ -122,11 +143,18 @@ message Requirements {
122
143
 
123
144
  // ResourceSelector selects a group of resources, either by name or by label.
124
145
  message ResourceSelector {
146
+ // API version of resources to select.
125
147
  string api_version = 1;
148
+
149
+ // Kind of resources to select.
126
150
  string kind = 2;
127
151
 
152
+ // Resources to match.
128
153
  oneof match {
154
+ // Match the resource with this name.
129
155
  string match_name = 3;
156
+
157
+ // Match all resources with these labels.
130
158
  MatchLabels match_labels = 4;
131
159
  }
132
160
  }
@@ -219,6 +247,13 @@ message Result {
219
247
 
220
248
  // Human-readable details about the result.
221
249
  string message = 2;
250
+
251
+ // Optional PascalCase, machine-readable reason for this result. If omitted,
252
+ // the value will be ComposeResources.
253
+ optional string reason = 3;
254
+
255
+ // The resources this result targets.
256
+ optional Target target = 4;
222
257
  }
223
258
 
224
259
  // Severity of Function results.
@@ -238,4 +273,54 @@ enum Severity {
238
273
  // Normal results are emitted as normal events and debug logs associated
239
274
  // with the composite resource.
240
275
  SEVERITY_NORMAL = 3;
241
- }
276
+ }
277
+
278
+ // Target of Function results and conditions.
279
+ enum Target {
280
+ // If the target is unspecified, the result targets the composite resource.
281
+ TARGET_UNSPECIFIED = 0;
282
+
283
+ // Target the composite resource. Results that target the composite resource
284
+ // should include detailed, advanced information.
285
+ TARGET_COMPOSITE = 1;
286
+
287
+ // Target the composite and the claim. Results that target the composite and
288
+ // the claim should include only end-user friendly information.
289
+ TARGET_COMPOSITE_AND_CLAIM = 2;
290
+ }
291
+
292
+ // Status condition to be applied to the composite resource. Condition may also
293
+ // optionally be applied to the composite resource's associated claim. For
294
+ // detailed information on proper usage of status conditions, please see
295
+ // https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties.
296
+ message Condition {
297
+ // Type of condition in PascalCase.
298
+ string type = 1;
299
+
300
+ // Status of the condition.
301
+ Status status = 2;
302
+
303
+ // Reason contains a programmatic identifier indicating the reason for the
304
+ // condition's last transition. Producers of specific condition types may
305
+ // define expected values and meanings for this field, and whether the values
306
+ // are considered a guaranteed API. The value should be a PascalCase string.
307
+ // This field may not be empty.
308
+ string reason = 3;
309
+
310
+ // Message is a human readable message indicating details about the
311
+ // transition. This may be an empty string.
312
+ optional string message = 4;
313
+
314
+ // The resources this condition targets.
315
+ optional Target target = 5;
316
+ }
317
+
318
+ enum Status {
319
+ STATUS_CONDITION_UNSPECIFIED = 0;
320
+
321
+ STATUS_CONDITION_UNKNOWN = 1;
322
+
323
+ STATUS_CONDITION_TRUE = 2;
324
+
325
+ STATUS_CONDITION_FALSE = 3;
326
+ }
@@ -0,0 +1,103 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: crossplane/function/proto/v1/run_function.proto
5
+ # Protobuf Python Version: 5.27.2
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 5,
15
+ 27,
16
+ 2,
17
+ '',
18
+ 'crossplane/function/proto/v1/run_function.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
26
+ from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2
27
+
28
+
29
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n/crossplane/function/proto/v1/run_function.proto\x12\x19\x61piextensions.fn.proto.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1egoogle/protobuf/duration.proto\"\x8d\x05\n\x12RunFunctionRequest\x12\x34\n\x04meta\x18\x01 \x01(\x0b\x32&.apiextensions.fn.proto.v1.RequestMeta\x12\x32\n\x08observed\x18\x02 \x01(\x0b\x32 .apiextensions.fn.proto.v1.State\x12\x31\n\x07\x64\x65sired\x18\x03 \x01(\x0b\x32 .apiextensions.fn.proto.v1.State\x12+\n\x05input\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x12-\n\x07\x63ontext\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12Z\n\x0f\x65xtra_resources\x18\x06 \x03(\x0b\x32\x41.apiextensions.fn.proto.v1.RunFunctionRequest.ExtraResourcesEntry\x12S\n\x0b\x63redentials\x18\x07 \x03(\x0b\x32>.apiextensions.fn.proto.v1.RunFunctionRequest.CredentialsEntry\x1a[\n\x13\x45xtraResourcesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x33\n\x05value\x18\x02 \x01(\x0b\x32$.apiextensions.fn.proto.v1.Resources:\x02\x38\x01\x1aZ\n\x10\x43redentialsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x35\n\x05value\x18\x02 \x01(\x0b\x32&.apiextensions.fn.proto.v1.Credentials:\x02\x38\x01\x42\x08\n\x06_inputB\n\n\x08_context\"]\n\x0b\x43redentials\x12\x44\n\x0f\x63redential_data\x18\x01 \x01(\x0b\x32).apiextensions.fn.proto.v1.CredentialDataH\x00\x42\x08\n\x06source\"\x80\x01\n\x0e\x43redentialData\x12\x41\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x33.apiextensions.fn.proto.v1.CredentialData.DataEntry\x1a+\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"?\n\tResources\x12\x32\n\x05items\x18\x01 \x03(\x0b\x32#.apiextensions.fn.proto.v1.Resource\"\xe7\x02\n\x13RunFunctionResponse\x12\x35\n\x04meta\x18\x01 \x01(\x0b\x32\'.apiextensions.fn.proto.v1.ResponseMeta\x12\x31\n\x07\x64\x65sired\x18\x02 \x01(\x0b\x32 .apiextensions.fn.proto.v1.State\x12\x32\n\x07results\x18\x03 \x03(\x0b\x32!.apiextensions.fn.proto.v1.Result\x12-\n\x07\x63ontext\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x12=\n\x0crequirements\x18\x05 \x01(\x0b\x32\'.apiextensions.fn.proto.v1.Requirements\x12\x38\n\nconditions\x18\x06 \x03(\x0b\x32$.apiextensions.fn.proto.v1.ConditionB\n\n\x08_context\"\x1a\n\x0bRequestMeta\x12\x0b\n\x03tag\x18\x01 \x01(\t\"\xc8\x01\n\x0cRequirements\x12T\n\x0f\x65xtra_resources\x18\x01 \x03(\x0b\x32;.apiextensions.fn.proto.v1.Requirements.ExtraResourcesEntry\x1a\x62\n\x13\x45xtraResourcesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12:\n\x05value\x18\x02 \x01(\x0b\x32+.apiextensions.fn.proto.v1.ResourceSelector:\x02\x38\x01\"\x94\x01\n\x10ResourceSelector\x12\x13\n\x0b\x61pi_version\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x14\n\nmatch_name\x18\x03 \x01(\tH\x00\x12>\n\x0cmatch_labels\x18\x04 \x01(\x0b\x32&.apiextensions.fn.proto.v1.MatchLabelsH\x00\x42\x07\n\x05match\"\x80\x01\n\x0bMatchLabels\x12\x42\n\x06labels\x18\x01 \x03(\x0b\x32\x32.apiextensions.fn.proto.v1.MatchLabels.LabelsEntry\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"P\n\x0cResponseMeta\x12\x0b\n\x03tag\x18\x01 \x01(\t\x12+\n\x03ttl\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00\x88\x01\x01\x42\x06\n\x04_ttl\"\xda\x01\n\x05State\x12\x36\n\tcomposite\x18\x01 \x01(\x0b\x32#.apiextensions.fn.proto.v1.Resource\x12\x42\n\tresources\x18\x02 \x03(\x0b\x32/.apiextensions.fn.proto.v1.State.ResourcesEntry\x1aU\n\x0eResourcesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.apiextensions.fn.proto.v1.Resource:\x02\x38\x01\"\xf8\x01\n\x08Resource\x12)\n\x08resource\x18\x01 \x01(\x0b\x32\x17.google.protobuf.Struct\x12V\n\x12\x63onnection_details\x18\x02 \x03(\x0b\x32:.apiextensions.fn.proto.v1.Resource.ConnectionDetailsEntry\x12/\n\x05ready\x18\x03 \x01(\x0e\x32 .apiextensions.fn.proto.v1.Ready\x1a\x38\n\x16\x43onnectionDetailsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"\xb3\x01\n\x06Result\x12\x35\n\x08severity\x18\x01 \x01(\x0e\x32#.apiextensions.fn.proto.v1.Severity\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x13\n\x06reason\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x36\n\x06target\x18\x04 \x01(\x0e\x32!.apiextensions.fn.proto.v1.TargetH\x01\x88\x01\x01\x42\t\n\x07_reasonB\t\n\x07_target\"\xc1\x01\n\tCondition\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x31\n\x06status\x18\x02 \x01(\x0e\x32!.apiextensions.fn.proto.v1.Status\x12\x0e\n\x06reason\x18\x03 \x01(\t\x12\x14\n\x07message\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x36\n\x06target\x18\x05 \x01(\x0e\x32!.apiextensions.fn.proto.v1.TargetH\x01\x88\x01\x01\x42\n\n\x08_messageB\t\n\x07_target*?\n\x05Ready\x12\x15\n\x11READY_UNSPECIFIED\x10\x00\x12\x0e\n\nREADY_TRUE\x10\x01\x12\x0f\n\x0bREADY_FALSE\x10\x02*c\n\x08Severity\x12\x18\n\x14SEVERITY_UNSPECIFIED\x10\x00\x12\x12\n\x0eSEVERITY_FATAL\x10\x01\x12\x14\n\x10SEVERITY_WARNING\x10\x02\x12\x13\n\x0fSEVERITY_NORMAL\x10\x03*V\n\x06Target\x12\x16\n\x12TARGET_UNSPECIFIED\x10\x00\x12\x14\n\x10TARGET_COMPOSITE\x10\x01\x12\x1e\n\x1aTARGET_COMPOSITE_AND_CLAIM\x10\x02*\x7f\n\x06Status\x12 \n\x1cSTATUS_CONDITION_UNSPECIFIED\x10\x00\x12\x1c\n\x18STATUS_CONDITION_UNKNOWN\x10\x01\x12\x19\n\x15STATUS_CONDITION_TRUE\x10\x02\x12\x1a\n\x16STATUS_CONDITION_FALSE\x10\x03\x32\x87\x01\n\x15\x46unctionRunnerService\x12n\n\x0bRunFunction\x12-.apiextensions.fn.proto.v1.RunFunctionRequest\x1a..apiextensions.fn.proto.v1.RunFunctionResponse\"\x00\x42\x41Z?github.com/crossplane/crossplane/apis/apiextensions/fn/proto/v1b\x06proto3')
30
+
31
+ _globals = globals()
32
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
33
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'crossplane.function.proto.v1.run_function_pb2', _globals)
34
+ if not _descriptor._USE_C_DESCRIPTORS:
35
+ _globals['DESCRIPTOR']._loaded_options = None
36
+ _globals['DESCRIPTOR']._serialized_options = b'Z?github.com/crossplane/crossplane/apis/apiextensions/fn/proto/v1'
37
+ _globals['_RUNFUNCTIONREQUEST_EXTRARESOURCESENTRY']._loaded_options = None
38
+ _globals['_RUNFUNCTIONREQUEST_EXTRARESOURCESENTRY']._serialized_options = b'8\001'
39
+ _globals['_RUNFUNCTIONREQUEST_CREDENTIALSENTRY']._loaded_options = None
40
+ _globals['_RUNFUNCTIONREQUEST_CREDENTIALSENTRY']._serialized_options = b'8\001'
41
+ _globals['_CREDENTIALDATA_DATAENTRY']._loaded_options = None
42
+ _globals['_CREDENTIALDATA_DATAENTRY']._serialized_options = b'8\001'
43
+ _globals['_REQUIREMENTS_EXTRARESOURCESENTRY']._loaded_options = None
44
+ _globals['_REQUIREMENTS_EXTRARESOURCESENTRY']._serialized_options = b'8\001'
45
+ _globals['_MATCHLABELS_LABELSENTRY']._loaded_options = None
46
+ _globals['_MATCHLABELS_LABELSENTRY']._serialized_options = b'8\001'
47
+ _globals['_STATE_RESOURCESENTRY']._loaded_options = None
48
+ _globals['_STATE_RESOURCESENTRY']._serialized_options = b'8\001'
49
+ _globals['_RESOURCE_CONNECTIONDETAILSENTRY']._loaded_options = None
50
+ _globals['_RESOURCE_CONNECTIONDETAILSENTRY']._serialized_options = b'8\001'
51
+ _globals['_READY']._serialized_start=2894
52
+ _globals['_READY']._serialized_end=2957
53
+ _globals['_SEVERITY']._serialized_start=2959
54
+ _globals['_SEVERITY']._serialized_end=3058
55
+ _globals['_TARGET']._serialized_start=3060
56
+ _globals['_TARGET']._serialized_end=3146
57
+ _globals['_STATUS']._serialized_start=3148
58
+ _globals['_STATUS']._serialized_end=3275
59
+ _globals['_RUNFUNCTIONREQUEST']._serialized_start=141
60
+ _globals['_RUNFUNCTIONREQUEST']._serialized_end=794
61
+ _globals['_RUNFUNCTIONREQUEST_EXTRARESOURCESENTRY']._serialized_start=589
62
+ _globals['_RUNFUNCTIONREQUEST_EXTRARESOURCESENTRY']._serialized_end=680
63
+ _globals['_RUNFUNCTIONREQUEST_CREDENTIALSENTRY']._serialized_start=682
64
+ _globals['_RUNFUNCTIONREQUEST_CREDENTIALSENTRY']._serialized_end=772
65
+ _globals['_CREDENTIALS']._serialized_start=796
66
+ _globals['_CREDENTIALS']._serialized_end=889
67
+ _globals['_CREDENTIALDATA']._serialized_start=892
68
+ _globals['_CREDENTIALDATA']._serialized_end=1020
69
+ _globals['_CREDENTIALDATA_DATAENTRY']._serialized_start=977
70
+ _globals['_CREDENTIALDATA_DATAENTRY']._serialized_end=1020
71
+ _globals['_RESOURCES']._serialized_start=1022
72
+ _globals['_RESOURCES']._serialized_end=1085
73
+ _globals['_RUNFUNCTIONRESPONSE']._serialized_start=1088
74
+ _globals['_RUNFUNCTIONRESPONSE']._serialized_end=1447
75
+ _globals['_REQUESTMETA']._serialized_start=1449
76
+ _globals['_REQUESTMETA']._serialized_end=1475
77
+ _globals['_REQUIREMENTS']._serialized_start=1478
78
+ _globals['_REQUIREMENTS']._serialized_end=1678
79
+ _globals['_REQUIREMENTS_EXTRARESOURCESENTRY']._serialized_start=1580
80
+ _globals['_REQUIREMENTS_EXTRARESOURCESENTRY']._serialized_end=1678
81
+ _globals['_RESOURCESELECTOR']._serialized_start=1681
82
+ _globals['_RESOURCESELECTOR']._serialized_end=1829
83
+ _globals['_MATCHLABELS']._serialized_start=1832
84
+ _globals['_MATCHLABELS']._serialized_end=1960
85
+ _globals['_MATCHLABELS_LABELSENTRY']._serialized_start=1915
86
+ _globals['_MATCHLABELS_LABELSENTRY']._serialized_end=1960
87
+ _globals['_RESPONSEMETA']._serialized_start=1962
88
+ _globals['_RESPONSEMETA']._serialized_end=2042
89
+ _globals['_STATE']._serialized_start=2045
90
+ _globals['_STATE']._serialized_end=2263
91
+ _globals['_STATE_RESOURCESENTRY']._serialized_start=2178
92
+ _globals['_STATE_RESOURCESENTRY']._serialized_end=2263
93
+ _globals['_RESOURCE']._serialized_start=2266
94
+ _globals['_RESOURCE']._serialized_end=2514
95
+ _globals['_RESOURCE_CONNECTIONDETAILSENTRY']._serialized_start=2458
96
+ _globals['_RESOURCE_CONNECTIONDETAILSENTRY']._serialized_end=2514
97
+ _globals['_RESULT']._serialized_start=2517
98
+ _globals['_RESULT']._serialized_end=2696
99
+ _globals['_CONDITION']._serialized_start=2699
100
+ _globals['_CONDITION']._serialized_end=2892
101
+ _globals['_FUNCTIONRUNNERSERVICE']._serialized_start=3278
102
+ _globals['_FUNCTIONRUNNERSERVICE']._serialized_end=3413
103
+ # @@protoc_insertion_point(module_scope)
@@ -20,6 +20,19 @@ class Severity(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
20
20
  SEVERITY_FATAL: _ClassVar[Severity]
21
21
  SEVERITY_WARNING: _ClassVar[Severity]
22
22
  SEVERITY_NORMAL: _ClassVar[Severity]
23
+
24
+ class Target(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
25
+ __slots__ = ()
26
+ TARGET_UNSPECIFIED: _ClassVar[Target]
27
+ TARGET_COMPOSITE: _ClassVar[Target]
28
+ TARGET_COMPOSITE_AND_CLAIM: _ClassVar[Target]
29
+
30
+ class Status(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
31
+ __slots__ = ()
32
+ STATUS_CONDITION_UNSPECIFIED: _ClassVar[Status]
33
+ STATUS_CONDITION_UNKNOWN: _ClassVar[Status]
34
+ STATUS_CONDITION_TRUE: _ClassVar[Status]
35
+ STATUS_CONDITION_FALSE: _ClassVar[Status]
23
36
  READY_UNSPECIFIED: Ready
24
37
  READY_TRUE: Ready
25
38
  READY_FALSE: Ready
@@ -27,9 +40,16 @@ SEVERITY_UNSPECIFIED: Severity
27
40
  SEVERITY_FATAL: Severity
28
41
  SEVERITY_WARNING: Severity
29
42
  SEVERITY_NORMAL: Severity
43
+ TARGET_UNSPECIFIED: Target
44
+ TARGET_COMPOSITE: Target
45
+ TARGET_COMPOSITE_AND_CLAIM: Target
46
+ STATUS_CONDITION_UNSPECIFIED: Status
47
+ STATUS_CONDITION_UNKNOWN: Status
48
+ STATUS_CONDITION_TRUE: Status
49
+ STATUS_CONDITION_FALSE: Status
30
50
 
31
51
  class RunFunctionRequest(_message.Message):
32
- __slots__ = ("meta", "observed", "desired", "input", "context", "extra_resources")
52
+ __slots__ = ("meta", "observed", "desired", "input", "context", "extra_resources", "credentials")
33
53
  class ExtraResourcesEntry(_message.Message):
34
54
  __slots__ = ("key", "value")
35
55
  KEY_FIELD_NUMBER: _ClassVar[int]
@@ -37,19 +57,47 @@ class RunFunctionRequest(_message.Message):
37
57
  key: str
38
58
  value: Resources
39
59
  def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[Resources, _Mapping]] = ...) -> None: ...
60
+ class CredentialsEntry(_message.Message):
61
+ __slots__ = ("key", "value")
62
+ KEY_FIELD_NUMBER: _ClassVar[int]
63
+ VALUE_FIELD_NUMBER: _ClassVar[int]
64
+ key: str
65
+ value: Credentials
66
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[Credentials, _Mapping]] = ...) -> None: ...
40
67
  META_FIELD_NUMBER: _ClassVar[int]
41
68
  OBSERVED_FIELD_NUMBER: _ClassVar[int]
42
69
  DESIRED_FIELD_NUMBER: _ClassVar[int]
43
70
  INPUT_FIELD_NUMBER: _ClassVar[int]
44
71
  CONTEXT_FIELD_NUMBER: _ClassVar[int]
45
72
  EXTRA_RESOURCES_FIELD_NUMBER: _ClassVar[int]
73
+ CREDENTIALS_FIELD_NUMBER: _ClassVar[int]
46
74
  meta: RequestMeta
47
75
  observed: State
48
76
  desired: State
49
77
  input: _struct_pb2.Struct
50
78
  context: _struct_pb2.Struct
51
79
  extra_resources: _containers.MessageMap[str, Resources]
52
- def __init__(self, meta: _Optional[_Union[RequestMeta, _Mapping]] = ..., observed: _Optional[_Union[State, _Mapping]] = ..., desired: _Optional[_Union[State, _Mapping]] = ..., input: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., extra_resources: _Optional[_Mapping[str, Resources]] = ...) -> None: ...
80
+ credentials: _containers.MessageMap[str, Credentials]
81
+ def __init__(self, meta: _Optional[_Union[RequestMeta, _Mapping]] = ..., observed: _Optional[_Union[State, _Mapping]] = ..., desired: _Optional[_Union[State, _Mapping]] = ..., input: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., extra_resources: _Optional[_Mapping[str, Resources]] = ..., credentials: _Optional[_Mapping[str, Credentials]] = ...) -> None: ...
82
+
83
+ class Credentials(_message.Message):
84
+ __slots__ = ("credential_data",)
85
+ CREDENTIAL_DATA_FIELD_NUMBER: _ClassVar[int]
86
+ credential_data: CredentialData
87
+ def __init__(self, credential_data: _Optional[_Union[CredentialData, _Mapping]] = ...) -> None: ...
88
+
89
+ class CredentialData(_message.Message):
90
+ __slots__ = ("data",)
91
+ class DataEntry(_message.Message):
92
+ __slots__ = ("key", "value")
93
+ KEY_FIELD_NUMBER: _ClassVar[int]
94
+ VALUE_FIELD_NUMBER: _ClassVar[int]
95
+ key: str
96
+ value: bytes
97
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ...
98
+ DATA_FIELD_NUMBER: _ClassVar[int]
99
+ data: _containers.ScalarMap[str, bytes]
100
+ def __init__(self, data: _Optional[_Mapping[str, bytes]] = ...) -> None: ...
53
101
 
54
102
  class Resources(_message.Message):
55
103
  __slots__ = ("items",)
@@ -58,18 +106,20 @@ class Resources(_message.Message):
58
106
  def __init__(self, items: _Optional[_Iterable[_Union[Resource, _Mapping]]] = ...) -> None: ...
59
107
 
60
108
  class RunFunctionResponse(_message.Message):
61
- __slots__ = ("meta", "desired", "results", "context", "requirements")
109
+ __slots__ = ("meta", "desired", "results", "context", "requirements", "conditions")
62
110
  META_FIELD_NUMBER: _ClassVar[int]
63
111
  DESIRED_FIELD_NUMBER: _ClassVar[int]
64
112
  RESULTS_FIELD_NUMBER: _ClassVar[int]
65
113
  CONTEXT_FIELD_NUMBER: _ClassVar[int]
66
114
  REQUIREMENTS_FIELD_NUMBER: _ClassVar[int]
115
+ CONDITIONS_FIELD_NUMBER: _ClassVar[int]
67
116
  meta: ResponseMeta
68
117
  desired: State
69
118
  results: _containers.RepeatedCompositeFieldContainer[Result]
70
119
  context: _struct_pb2.Struct
71
120
  requirements: Requirements
72
- def __init__(self, meta: _Optional[_Union[ResponseMeta, _Mapping]] = ..., desired: _Optional[_Union[State, _Mapping]] = ..., results: _Optional[_Iterable[_Union[Result, _Mapping]]] = ..., context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., requirements: _Optional[_Union[Requirements, _Mapping]] = ...) -> None: ...
121
+ conditions: _containers.RepeatedCompositeFieldContainer[Condition]
122
+ def __init__(self, meta: _Optional[_Union[ResponseMeta, _Mapping]] = ..., desired: _Optional[_Union[State, _Mapping]] = ..., results: _Optional[_Iterable[_Union[Result, _Mapping]]] = ..., context: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., requirements: _Optional[_Union[Requirements, _Mapping]] = ..., conditions: _Optional[_Iterable[_Union[Condition, _Mapping]]] = ...) -> None: ...
73
123
 
74
124
  class RequestMeta(_message.Message):
75
125
  __slots__ = ("tag",)
@@ -156,9 +206,27 @@ class Resource(_message.Message):
156
206
  def __init__(self, resource: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., connection_details: _Optional[_Mapping[str, bytes]] = ..., ready: _Optional[_Union[Ready, str]] = ...) -> None: ...
157
207
 
158
208
  class Result(_message.Message):
159
- __slots__ = ("severity", "message")
209
+ __slots__ = ("severity", "message", "reason", "target")
160
210
  SEVERITY_FIELD_NUMBER: _ClassVar[int]
161
211
  MESSAGE_FIELD_NUMBER: _ClassVar[int]
212
+ REASON_FIELD_NUMBER: _ClassVar[int]
213
+ TARGET_FIELD_NUMBER: _ClassVar[int]
162
214
  severity: Severity
163
215
  message: str
164
- def __init__(self, severity: _Optional[_Union[Severity, str]] = ..., message: _Optional[str] = ...) -> None: ...
216
+ reason: str
217
+ target: Target
218
+ def __init__(self, severity: _Optional[_Union[Severity, str]] = ..., message: _Optional[str] = ..., reason: _Optional[str] = ..., target: _Optional[_Union[Target, str]] = ...) -> None: ...
219
+
220
+ class Condition(_message.Message):
221
+ __slots__ = ("type", "status", "reason", "message", "target")
222
+ TYPE_FIELD_NUMBER: _ClassVar[int]
223
+ STATUS_FIELD_NUMBER: _ClassVar[int]
224
+ REASON_FIELD_NUMBER: _ClassVar[int]
225
+ MESSAGE_FIELD_NUMBER: _ClassVar[int]
226
+ TARGET_FIELD_NUMBER: _ClassVar[int]
227
+ type: str
228
+ status: Status
229
+ reason: str
230
+ message: str
231
+ target: Target
232
+ def __init__(self, type: _Optional[str] = ..., status: _Optional[_Union[Status, str]] = ..., reason: _Optional[str] = ..., message: _Optional[str] = ..., target: _Optional[_Union[Target, str]] = ...) -> None: ...
@@ -0,0 +1,101 @@
1
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
+ """Client and server classes corresponding to protobuf-defined services."""
3
+ import grpc
4
+ import warnings
5
+
6
+ from crossplane.function.proto.v1 import run_function_pb2 as crossplane_dot_function_dot_proto_dot_v1_dot_run__function__pb2
7
+
8
+ GRPC_GENERATED_VERSION = '1.66.0'
9
+ GRPC_VERSION = grpc.__version__
10
+ _version_not_supported = False
11
+
12
+ try:
13
+ from grpc._utilities import first_version_is_lower
14
+ _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
15
+ except ImportError:
16
+ _version_not_supported = True
17
+
18
+ if _version_not_supported:
19
+ raise RuntimeError(
20
+ f'The grpc package installed is at version {GRPC_VERSION},'
21
+ + f' but the generated code in crossplane/function/proto/v1/run_function_pb2_grpc.py depends on'
22
+ + f' grpcio>={GRPC_GENERATED_VERSION}.'
23
+ + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
24
+ + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
25
+ )
26
+
27
+
28
+ class FunctionRunnerServiceStub(object):
29
+ """A FunctionRunnerService is a Composition Function.
30
+ """
31
+
32
+ def __init__(self, channel):
33
+ """Constructor.
34
+
35
+ Args:
36
+ channel: A grpc.Channel.
37
+ """
38
+ self.RunFunction = channel.unary_unary(
39
+ '/apiextensions.fn.proto.v1.FunctionRunnerService/RunFunction',
40
+ request_serializer=crossplane_dot_function_dot_proto_dot_v1_dot_run__function__pb2.RunFunctionRequest.SerializeToString,
41
+ response_deserializer=crossplane_dot_function_dot_proto_dot_v1_dot_run__function__pb2.RunFunctionResponse.FromString,
42
+ _registered_method=True)
43
+
44
+
45
+ class FunctionRunnerServiceServicer(object):
46
+ """A FunctionRunnerService is a Composition Function.
47
+ """
48
+
49
+ def RunFunction(self, request, context):
50
+ """RunFunction runs the Composition Function.
51
+ """
52
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
53
+ context.set_details('Method not implemented!')
54
+ raise NotImplementedError('Method not implemented!')
55
+
56
+
57
+ def add_FunctionRunnerServiceServicer_to_server(servicer, server):
58
+ rpc_method_handlers = {
59
+ 'RunFunction': grpc.unary_unary_rpc_method_handler(
60
+ servicer.RunFunction,
61
+ request_deserializer=crossplane_dot_function_dot_proto_dot_v1_dot_run__function__pb2.RunFunctionRequest.FromString,
62
+ response_serializer=crossplane_dot_function_dot_proto_dot_v1_dot_run__function__pb2.RunFunctionResponse.SerializeToString,
63
+ ),
64
+ }
65
+ generic_handler = grpc.method_handlers_generic_handler(
66
+ 'apiextensions.fn.proto.v1.FunctionRunnerService', rpc_method_handlers)
67
+ server.add_generic_rpc_handlers((generic_handler,))
68
+ server.add_registered_method_handlers('apiextensions.fn.proto.v1.FunctionRunnerService', rpc_method_handlers)
69
+
70
+
71
+ # This class is part of an EXPERIMENTAL API.
72
+ class FunctionRunnerService(object):
73
+ """A FunctionRunnerService is a Composition Function.
74
+ """
75
+
76
+ @staticmethod
77
+ def RunFunction(request,
78
+ target,
79
+ options=(),
80
+ channel_credentials=None,
81
+ call_credentials=None,
82
+ insecure=False,
83
+ compression=None,
84
+ wait_for_ready=None,
85
+ timeout=None,
86
+ metadata=None):
87
+ return grpc.experimental.unary_unary(
88
+ request,
89
+ target,
90
+ '/apiextensions.fn.proto.v1.FunctionRunnerService/RunFunction',
91
+ crossplane_dot_function_dot_proto_dot_v1_dot_run__function__pb2.RunFunctionRequest.SerializeToString,
92
+ crossplane_dot_function_dot_proto_dot_v1_dot_run__function__pb2.RunFunctionResponse.FromString,
93
+ options,
94
+ channel_credentials,
95
+ insecure,
96
+ call_credentials,
97
+ compression,
98
+ wait_for_ready,
99
+ timeout,
100
+ metadata,
101
+ _registered_method=True)