crossplane-function-pythonic 0.6.0__py3-none-any.whl → 0.6.1__py3-none-any.whl

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.
@@ -1,2 +1,2 @@
1
1
  # This is set at build time, using "hatch version"
2
- __version__ = "0.6.0"
2
+ __version__ = "0.6.1"
@@ -1,10 +1,12 @@
1
1
 
2
2
  import datetime
3
3
  from google.protobuf.duration_pb2 import Duration
4
- from crossplane.function.proto.v1 import run_function_pb2 as fnv1
5
4
 
6
- from . import auto_ready
7
- from . import protobuf
5
+ from . import (
6
+ auto_ready,
7
+ protobuf,
8
+ )
9
+ from .proto.v1 import run_function_pb2 as fnv1
8
10
 
9
11
 
10
12
  _notset = object()
@@ -7,8 +7,8 @@ import logging
7
7
  import sys
8
8
 
9
9
  import grpc
10
- from crossplane.function.proto.v1 import run_function_pb2 as fnv1
11
- from crossplane.function.proto.v1 import run_function_pb2_grpc as grpcv1
10
+ from .proto.v1 import run_function_pb2 as fnv1
11
+ from .proto.v1 import run_function_pb2_grpc as grpcv1
12
12
  from .. import pythonic
13
13
 
14
14
  logger = logging.getLogger(__name__)
@@ -7,7 +7,6 @@ import shlex
7
7
  import signal
8
8
  import sys
9
9
 
10
- import crossplane.function.proto.v1.run_function_pb2_grpc as grpcv1
11
10
  import grpc
12
11
 
13
12
  from . import (
@@ -15,6 +14,8 @@ from . import (
15
14
  command,
16
15
  function,
17
16
  )
17
+ from .proto.v1 import run_function_pb2_grpc as grpcv1
18
+
18
19
 
19
20
  logger = logging.getLogger(__name__)
20
21
 
@@ -0,0 +1,436 @@
1
+ /*
2
+ Copyright 2022 The Crossplane Authors.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */
16
+
17
+ syntax = "proto3";
18
+
19
+ // This package defines the RPC for both composition and operation functions.
20
+ // Only composition functions are part of the 'apiextensions' API group. In
21
+ // retrospect this package should've been crossplane.proto.fn.v1, but it's too
22
+ // late to change it now.
23
+
24
+ //buf:lint:ignore PACKAGE_DIRECTORY_MATCH
25
+ package apiextensions.fn.proto.v1;
26
+
27
+ import "google/protobuf/duration.proto";
28
+ import "google/protobuf/struct.proto";
29
+
30
+ option go_package = "github.com/crossplane/crossplane/v2/proto/fn/v1";
31
+
32
+ // A FunctionRunnerService is a function.
33
+ service FunctionRunnerService {
34
+ // RunFunction runs the function.
35
+ rpc RunFunction(RunFunctionRequest) returns (RunFunctionResponse) {}
36
+ }
37
+
38
+ // A RunFunctionRequest requests that the function be run.
39
+ message RunFunctionRequest {
40
+ // Metadata pertaining to this request.
41
+ RequestMeta meta = 1;
42
+
43
+ // The observed state prior to invocation of a function pipeline. State passed
44
+ // to each function is fresh as of the time the pipeline was invoked, not as
45
+ // of the time each function was invoked.
46
+ State observed = 2;
47
+
48
+ // Desired state according to a function pipeline. The state passed to a
49
+ // particular function may have been accumulated by previous functions in the
50
+ // pipeline.
51
+ //
52
+ // Note that the desired state must be a partial object with only the fields
53
+ // that this function (and its predecessors in the pipeline) wants to have set
54
+ // in the object. Copying a non-partial observed state to desired is most
55
+ // likely not what you want to do. Leaving out fields that had been returned
56
+ // as desired before will result in them being deleted from the objects in the
57
+ // cluster.
58
+ State desired = 3;
59
+
60
+ // Optional input specific to this function invocation. A JSON representation
61
+ // of the 'input' block of the relevant entry in a function pipeline.
62
+ optional google.protobuf.Struct input = 4;
63
+
64
+ // Optional context. Crossplane may pass arbitrary contextual information to a
65
+ // function. A function may also return context in its RunFunctionResponse,
66
+ // and that context will be passed to subsequent functions. Crossplane
67
+ // discards all context returned by the last function in the pipeline.
68
+ optional google.protobuf.Struct context = 5;
69
+
70
+ // Optional resources that the function specified in its requirements. Note
71
+ // that resources is a map to Resources, plural. The map key corresponds to
72
+ // the key in a RunFunctionResponse's requirements.extra_resources field. If a
73
+ // function requested extra resources that did not exist, Crossplane sets
74
+ // the map key to an empty Resources message to indicate that it attempted to
75
+ // satisfy the request. This field is only populated when the function uses
76
+ // extra_resources in its requirements.
77
+ //
78
+ // Deprecated: Use required_resources instead.
79
+ map<string, Resources> extra_resources = 6 [deprecated = true];
80
+
81
+ // Optional credentials that this function may use to communicate with an
82
+ // external system.
83
+ map<string, Credentials> credentials = 7;
84
+
85
+ // Optional resources that the function specified in its requirements. Note
86
+ // that resources is a map to Resources, plural. The map key corresponds to
87
+ // the key in a RunFunctionResponse's requirements.resources field. If a
88
+ // function requested required resources that did not exist, Crossplane sets
89
+ // the map key to an empty Resources message to indicate that it attempted to
90
+ // satisfy the request. This field is only populated when the function uses
91
+ // resources in its requirements.
92
+ map<string, Resources> required_resources = 8;
93
+
94
+ // Optional schemas that the function specified in its requirements. The map
95
+ // key corresponds to the key in a RunFunctionResponse's requirements.schemas
96
+ // field. If a function requested a schema that could not be found, Crossplane
97
+ // sets the map key to an empty Schema message to indicate that it attempted
98
+ // to satisfy the request.
99
+ map<string, Schema> required_schemas = 9;
100
+ }
101
+
102
+ // Credentials that a function may use to communicate with an external system.
103
+ message Credentials {
104
+ // Source of the credentials.
105
+ oneof source {
106
+ // Credential data loaded by Crossplane, for example from a Secret.
107
+ CredentialData credential_data = 1;
108
+ }
109
+ }
110
+
111
+ // CredentialData loaded by Crossplane, for example from a Secret.
112
+ message CredentialData {
113
+ map<string, bytes> data = 1;
114
+ }
115
+
116
+ // Resources represents the state of several Crossplane resources.
117
+ message Resources {
118
+ repeated Resource items = 1;
119
+ }
120
+
121
+ // A RunFunctionResponse contains the result of a function run.
122
+ message RunFunctionResponse {
123
+ // Metadata pertaining to this response.
124
+ ResponseMeta meta = 1;
125
+
126
+ // Desired state according to a function pipeline. functions may add desired
127
+ // state, and may mutate or delete any part of the desired state they are
128
+ // concerned with. A function must pass through any part of the desired state
129
+ // that it is not concerned with.
130
+ //
131
+ // Note that the desired state must be a partial object with only the fields
132
+ // that this function (and its predecessors in the pipeline) wants to have set
133
+ // in the object. Copying a non-partial observed state to desired is most
134
+ // likely not what you want to do. Leaving out fields that had been returned
135
+ // as desired before will result in them being deleted from the objects in the
136
+ // cluster.
137
+ State desired = 2;
138
+
139
+ // Results of the function run. Results are used for observability purposes.
140
+ repeated Result results = 3;
141
+
142
+ // Optional context to be passed to the next function in the pipeline as part
143
+ // of the RunFunctionRequest. Dropped on the last function in the pipeline.
144
+ optional google.protobuf.Struct context = 4;
145
+
146
+ // Requirements that must be satisfied for this function to run successfully.
147
+ Requirements requirements = 5;
148
+
149
+ // Status conditions to be applied to the XR. Conditions may also optionally
150
+ // be applied to the XR's associated claim.
151
+ //
152
+ // Conditions are only used for composition. They're ignored by Operations.
153
+ repeated Condition conditions = 6;
154
+
155
+ // Optional output specific to this function invocation.
156
+ //
157
+ // Only Operations use function output. XRs will discard any function output.
158
+ optional google.protobuf.Struct output = 7;
159
+ }
160
+
161
+ // RequestMeta contains metadata pertaining to a RunFunctionRequest.
162
+ message RequestMeta {
163
+ // An opaque string identifying a request. Requests with identical tags will
164
+ // be otherwise identical.
165
+ string tag = 1;
166
+
167
+ // Capabilities supported by this version of Crossplane. Functions may use
168
+ // this to determine whether Crossplane will honor certain fields in their
169
+ // response, or populate certain fields in their request.
170
+ repeated Capability capabilities = 2;
171
+ }
172
+
173
+ // Capability indicates that Crossplane supports a particular feature.
174
+ // Functions can check for capabilities to determine whether Crossplane will
175
+ // honor a particular request or response field.
176
+ enum Capability {
177
+ CAPABILITY_UNSPECIFIED = 0;
178
+
179
+ // Crossplane sends capabilities in RequestMeta. If this capability is
180
+ // present, the function knows that if another capability is absent, it's
181
+ // because Crossplane doesn't support it (not because Crossplane predates
182
+ // capability advertisement). Added in Crossplane v2.2.
183
+ CAPABILITY_CAPABILITIES = 1;
184
+
185
+ // Crossplane supports the requirements.resources field. Functions can return
186
+ // resource requirements and Crossplane will fetch the requested resources and
187
+ // return them in required_resources. Added in Crossplane v1.15.
188
+ CAPABILITY_REQUIRED_RESOURCES = 2;
189
+
190
+ // Crossplane supports the credentials field. Functions can receive
191
+ // credentials from secrets specified in the Composition. Added in Crossplane
192
+ // v1.16.
193
+ CAPABILITY_CREDENTIALS = 3;
194
+
195
+ // Crossplane supports the conditions field. Functions can return status
196
+ // conditions to be applied to the XR and optionally its claim. Added in
197
+ // Crossplane v1.17.
198
+ CAPABILITY_CONDITIONS = 4;
199
+
200
+ // Crossplane supports the requirements.schemas field. Functions can request
201
+ // OpenAPI schemas and Crossplane will return them in required_schemas. Added
202
+ // in Crossplane v2.2.
203
+ CAPABILITY_REQUIRED_SCHEMAS = 5;
204
+ }
205
+
206
+ // Requirements that must be satisfied for a function to run successfully.
207
+ message Requirements {
208
+ // Resources that this function requires. The map key uniquely identifies the
209
+ // group of resources.
210
+ //
211
+ // Deprecated: Use resources instead.
212
+ map<string, ResourceSelector> extra_resources = 1 [deprecated = true];
213
+
214
+ // Resources that this function requires. The map key uniquely identifies the
215
+ // group of resources.
216
+ map<string, ResourceSelector> resources = 2;
217
+
218
+ // Schemas that this function requires. The map key uniquely identifies the
219
+ // schema request.
220
+ map<string, SchemaSelector> schemas = 3;
221
+ }
222
+
223
+ // SchemaSelector identifies a resource kind whose OpenAPI schema is requested.
224
+ message SchemaSelector {
225
+ // API version of the resource kind, e.g. "example.org/v1".
226
+ string api_version = 1;
227
+
228
+ // Kind of resource, e.g. "MyResource".
229
+ string kind = 2;
230
+ }
231
+
232
+ // Schema represents the OpenAPI schema for a resource kind.
233
+ message Schema {
234
+ // The OpenAPI v3 schema of the resource kind as unstructured JSON.
235
+ // For CRDs this is the spec.versions[].schema.openAPIV3Schema field.
236
+ // Empty if Crossplane could not find a schema for the requested kind.
237
+ optional google.protobuf.Struct openapi_v3 = 1;
238
+ }
239
+
240
+ // ResourceSelector selects a group of resources, either by name or by label.
241
+ message ResourceSelector {
242
+ // API version of resources to select.
243
+ string api_version = 1;
244
+
245
+ // Kind of resources to select.
246
+ string kind = 2;
247
+
248
+ // Resources to match.
249
+ oneof match {
250
+ // Match the resource with this name.
251
+ string match_name = 3;
252
+
253
+ // Match all resources with these labels.
254
+ MatchLabels match_labels = 4;
255
+ }
256
+
257
+ // Match resources in this namespace. Omit namespace to match cluster scoped
258
+ // resources, or to match namespaced resources by labels across all
259
+ // namespaces.
260
+ optional string namespace = 5;
261
+ }
262
+
263
+ // MatchLabels defines a set of labels to match resources against.
264
+ message MatchLabels {
265
+ map<string, string> labels = 1;
266
+ }
267
+
268
+ // ResponseMeta contains metadata pertaining to a RunFunctionResponse.
269
+ message ResponseMeta {
270
+ // An opaque string identifying the content of the request. Must match the
271
+ // meta.tag of the corresponding RunFunctionRequest.
272
+ string tag = 1;
273
+
274
+ // Time-to-live of this response. Crossplane will call the function again when
275
+ // the TTL expires. Crossplane may cache the response to avoid calling the
276
+ // function again until the TTL expires.
277
+ optional google.protobuf.Duration ttl = 2;
278
+ }
279
+
280
+ // State of the XR (XR) and any resources.
281
+ message State {
282
+ // The state of the XR (XR).
283
+ Resource composite = 1;
284
+
285
+ // The state of any other resources. In composition functions these are the
286
+ // composed resources. In operation functions they're arbitrary resources that
287
+ // the operation wants to create or update.
288
+ map<string, Resource> resources = 2;
289
+ }
290
+
291
+ // A Resource represents the state of a Kubernetes resource.
292
+ message Resource {
293
+ // The JSON representation of the resource.
294
+ //
295
+ // * Crossplane will set this field in a RunFunctionRequest to the entire
296
+ // observed state of a resource - including its metadata, spec, and status.
297
+ //
298
+ // * A function should set this field in a RunFunctionRequest to communicate
299
+ // the desired state of the resource.
300
+ //
301
+ // * A function may only specify the desired status of a XR - not its metadata
302
+ // or spec. A function should not return desired metadata or spec for a XR.
303
+ // This will be ignored.
304
+ //
305
+ // * A function may not specify the desired status of any other resource -
306
+ // e.g. composed resources. It may only specify their metadata and spec.
307
+ // Status will be ignored.
308
+ google.protobuf.Struct resource = 1;
309
+
310
+ // The resource's connection details.
311
+ //
312
+ // * Crossplane will set this field in a RunFunctionRequest to communicate the
313
+ // the observed connection details of a composite or composed resource.
314
+ //
315
+ // * A function should set this field in a RunFunctionResponse to indicate the
316
+ // desired connection details of legacy XRs. For modern XRs, this will be ignored.
317
+ //
318
+ // * A function should not set this field in a RunFunctionResponse to indicate
319
+ // the desired connection details of a composed resource. This will be
320
+ // ignored.
321
+ //
322
+ // Connection details are only used for composition. They're ignored by
323
+ // Operations.
324
+ map<string, bytes> connection_details = 2;
325
+
326
+ // Ready indicates whether the resource should be considered ready.
327
+ //
328
+ // * Crossplane will never set this field in a RunFunctionRequest.
329
+ //
330
+ // * A function should set this field to READY_TRUE in a RunFunctionResponse
331
+ // to indicate that a desired resource is ready.
332
+ //
333
+ // * A function should set this field to READY_TRUE in a RunFunctionResponse
334
+ // to indicate that a desired XR is ready. This overwrites the standard
335
+ // readiness detection that determines the ready state of the composite by the
336
+ // ready state of the composed resources.
337
+ //
338
+ // Ready is only used for composition. It's ignored by Operations.
339
+ Ready ready = 3;
340
+ }
341
+
342
+ // Ready indicates whether a resource should be considered ready.
343
+ enum Ready {
344
+ READY_UNSPECIFIED = 0;
345
+
346
+ // True means the resource has been observed to be ready.
347
+ READY_TRUE = 1;
348
+
349
+ // False means the resource has not been observed to be ready.
350
+ READY_FALSE = 2;
351
+ }
352
+
353
+ // A Result of running a function.
354
+ message Result {
355
+ // Severity of this result.
356
+ Severity severity = 1;
357
+
358
+ // Human-readable details about the result.
359
+ string message = 2;
360
+
361
+ // Optional PascalCase, machine-readable reason for this result. If omitted,
362
+ // the value will be ComposeResources.
363
+ optional string reason = 3;
364
+
365
+ // The resources this result targets.
366
+ optional Target target = 4;
367
+ }
368
+
369
+ // Severity of function results.
370
+ enum Severity {
371
+ SEVERITY_UNSPECIFIED = 0;
372
+
373
+ // Fatal results are fatal; subsequent functions may run, but the function
374
+ // pipeline run will be considered a failure and the first fatal result will
375
+ // be returned as an error.
376
+ SEVERITY_FATAL = 1;
377
+
378
+ // Warning results are non-fatal; the entire pipeline will run to completion
379
+ // but warning events and debug logs associated with the XR or Operation will
380
+ // be emitted.
381
+ SEVERITY_WARNING = 2;
382
+
383
+ // Normal results are emitted as normal events and debug logs associated with
384
+ // the XR or operation.
385
+ SEVERITY_NORMAL = 3;
386
+ }
387
+
388
+ // Target of function results and conditions.
389
+ enum Target {
390
+ // If the target is unspecified, the result targets the XR.
391
+ TARGET_UNSPECIFIED = 0;
392
+
393
+ // Target the XR. Results that target the XR should include detailed, advanced
394
+ // information.
395
+ TARGET_COMPOSITE = 1;
396
+
397
+ // Target the XR and the claim. Results that target the XR and the claim
398
+ // should include only end-user friendly information.
399
+ TARGET_COMPOSITE_AND_CLAIM = 2;
400
+ }
401
+
402
+ // Status condition to be applied to the XR. Condition may also optionally be
403
+ // applied to the XR's associated claim. For detailed information on proper
404
+ // usage of status conditions, please see
405
+ // https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties.
406
+ message Condition {
407
+ // Type of condition in PascalCase.
408
+ string type = 1;
409
+
410
+ // Status of the condition.
411
+ Status status = 2;
412
+
413
+ // Reason contains a programmatic identifier indicating the reason for the
414
+ // condition's last transition. Producers of specific condition types may
415
+ // define expected values and meanings for this field, and whether the values
416
+ // are considered a guaranteed API. The value should be a PascalCase string.
417
+ // This field may not be empty.
418
+ string reason = 3;
419
+
420
+ // Message is a human readable message indicating details about the
421
+ // transition. This may be an empty string.
422
+ optional string message = 4;
423
+
424
+ // The resources this condition targets.
425
+ optional Target target = 5;
426
+ }
427
+
428
+ enum Status {
429
+ STATUS_CONDITION_UNSPECIFIED = 0;
430
+
431
+ STATUS_CONDITION_UNKNOWN = 1;
432
+
433
+ STATUS_CONDITION_TRUE = 2;
434
+
435
+ STATUS_CONDITION_FALSE = 3;
436
+ }
@@ -0,0 +1,129 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: crossplane/pythonic/proto/v1/run_function.proto
5
+ # Protobuf Python Version: 6.31.1
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
+ 6,
15
+ 31,
16
+ 1,
17
+ '',
18
+ 'crossplane/pythonic/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 duration_pb2 as google_dot_protobuf_dot_duration__pb2
26
+ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
27
+
28
+
29
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n/crossplane/pythonic/proto/v1/run_function.proto\x12\x19\x61piextensions.fn.proto.v1\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x8c\x08\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\x12^\n\x0f\x65xtra_resources\x18\x06 \x03(\x0b\x32\x41.apiextensions.fn.proto.v1.RunFunctionRequest.ExtraResourcesEntryB\x02\x18\x01\x12S\n\x0b\x63redentials\x18\x07 \x03(\x0b\x32>.apiextensions.fn.proto.v1.RunFunctionRequest.CredentialsEntry\x12`\n\x12required_resources\x18\x08 \x03(\x0b\x32\x44.apiextensions.fn.proto.v1.RunFunctionRequest.RequiredResourcesEntry\x12\\\n\x10required_schemas\x18\t \x03(\x0b\x32\x42.apiextensions.fn.proto.v1.RunFunctionRequest.RequiredSchemasEntry\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\x1a^\n\x16RequiredResourcesEntry\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\x1aY\n\x14RequiredSchemasEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.apiextensions.fn.proto.v1.Schema:\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\"\xa0\x03\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.Condition\x12,\n\x06output\x18\x07 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x42\n\n\x08_contextB\t\n\x07_output\"W\n\x0bRequestMeta\x12\x0b\n\x03tag\x18\x01 \x01(\t\x12;\n\x0c\x63\x61pabilities\x18\x02 \x03(\x0e\x32%.apiextensions.fn.proto.v1.Capability\"\x98\x04\n\x0cRequirements\x12X\n\x0f\x65xtra_resources\x18\x01 \x03(\x0b\x32;.apiextensions.fn.proto.v1.Requirements.ExtraResourcesEntryB\x02\x18\x01\x12I\n\tresources\x18\x02 \x03(\x0b\x32\x36.apiextensions.fn.proto.v1.Requirements.ResourcesEntry\x12\x45\n\x07schemas\x18\x03 \x03(\x0b\x32\x34.apiextensions.fn.proto.v1.Requirements.SchemasEntry\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\x1a]\n\x0eResourcesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12:\n\x05value\x18\x02 \x01(\x0b\x32+.apiextensions.fn.proto.v1.ResourceSelector:\x02\x38\x01\x1aY\n\x0cSchemasEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x01(\x0b\x32).apiextensions.fn.proto.v1.SchemaSelector:\x02\x38\x01\"3\n\x0eSchemaSelector\x12\x13\n\x0b\x61pi_version\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\"I\n\x06Schema\x12\x30\n\nopenapi_v3\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x42\r\n\x0b_openapi_v3\"\xba\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\x12\x16\n\tnamespace\x18\x05 \x01(\tH\x01\x88\x01\x01\x42\x07\n\x05matchB\x0c\n\n_namespace\"\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*\xc0\x01\n\nCapability\x12\x1a\n\x16\x43\x41PABILITY_UNSPECIFIED\x10\x00\x12\x1b\n\x17\x43\x41PABILITY_CAPABILITIES\x10\x01\x12!\n\x1d\x43\x41PABILITY_REQUIRED_RESOURCES\x10\x02\x12\x1a\n\x16\x43\x41PABILITY_CREDENTIALS\x10\x03\x12\x19\n\x15\x43\x41PABILITY_CONDITIONS\x10\x04\x12\x1f\n\x1b\x43\x41PABILITY_REQUIRED_SCHEMAS\x10\x05*?\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\x31Z/github.com/crossplane/crossplane/v2/proto/fn/v1b\x06proto3')
30
+
31
+ _globals = globals()
32
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
33
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'crossplane.pythonic.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/v2/proto/fn/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['_RUNFUNCTIONREQUEST_REQUIREDRESOURCESENTRY']._loaded_options = None
42
+ _globals['_RUNFUNCTIONREQUEST_REQUIREDRESOURCESENTRY']._serialized_options = b'8\001'
43
+ _globals['_RUNFUNCTIONREQUEST_REQUIREDSCHEMASENTRY']._loaded_options = None
44
+ _globals['_RUNFUNCTIONREQUEST_REQUIREDSCHEMASENTRY']._serialized_options = b'8\001'
45
+ _globals['_RUNFUNCTIONREQUEST'].fields_by_name['extra_resources']._loaded_options = None
46
+ _globals['_RUNFUNCTIONREQUEST'].fields_by_name['extra_resources']._serialized_options = b'\030\001'
47
+ _globals['_CREDENTIALDATA_DATAENTRY']._loaded_options = None
48
+ _globals['_CREDENTIALDATA_DATAENTRY']._serialized_options = b'8\001'
49
+ _globals['_REQUIREMENTS_EXTRARESOURCESENTRY']._loaded_options = None
50
+ _globals['_REQUIREMENTS_EXTRARESOURCESENTRY']._serialized_options = b'8\001'
51
+ _globals['_REQUIREMENTS_RESOURCESENTRY']._loaded_options = None
52
+ _globals['_REQUIREMENTS_RESOURCESENTRY']._serialized_options = b'8\001'
53
+ _globals['_REQUIREMENTS_SCHEMASENTRY']._loaded_options = None
54
+ _globals['_REQUIREMENTS_SCHEMASENTRY']._serialized_options = b'8\001'
55
+ _globals['_REQUIREMENTS'].fields_by_name['extra_resources']._loaded_options = None
56
+ _globals['_REQUIREMENTS'].fields_by_name['extra_resources']._serialized_options = b'\030\001'
57
+ _globals['_MATCHLABELS_LABELSENTRY']._loaded_options = None
58
+ _globals['_MATCHLABELS_LABELSENTRY']._serialized_options = b'8\001'
59
+ _globals['_STATE_RESOURCESENTRY']._loaded_options = None
60
+ _globals['_STATE_RESOURCESENTRY']._serialized_options = b'8\001'
61
+ _globals['_RESOURCE_CONNECTIONDETAILSENTRY']._loaded_options = None
62
+ _globals['_RESOURCE_CONNECTIONDETAILSENTRY']._serialized_options = b'8\001'
63
+ _globals['_CAPABILITY']._serialized_start=3898
64
+ _globals['_CAPABILITY']._serialized_end=4090
65
+ _globals['_READY']._serialized_start=4092
66
+ _globals['_READY']._serialized_end=4155
67
+ _globals['_SEVERITY']._serialized_start=4157
68
+ _globals['_SEVERITY']._serialized_end=4256
69
+ _globals['_TARGET']._serialized_start=4258
70
+ _globals['_TARGET']._serialized_end=4344
71
+ _globals['_STATUS']._serialized_start=4346
72
+ _globals['_STATUS']._serialized_end=4473
73
+ _globals['_RUNFUNCTIONREQUEST']._serialized_start=141
74
+ _globals['_RUNFUNCTIONREQUEST']._serialized_end=1177
75
+ _globals['_RUNFUNCTIONREQUEST_EXTRARESOURCESENTRY']._serialized_start=785
76
+ _globals['_RUNFUNCTIONREQUEST_EXTRARESOURCESENTRY']._serialized_end=876
77
+ _globals['_RUNFUNCTIONREQUEST_CREDENTIALSENTRY']._serialized_start=878
78
+ _globals['_RUNFUNCTIONREQUEST_CREDENTIALSENTRY']._serialized_end=968
79
+ _globals['_RUNFUNCTIONREQUEST_REQUIREDRESOURCESENTRY']._serialized_start=970
80
+ _globals['_RUNFUNCTIONREQUEST_REQUIREDRESOURCESENTRY']._serialized_end=1064
81
+ _globals['_RUNFUNCTIONREQUEST_REQUIREDSCHEMASENTRY']._serialized_start=1066
82
+ _globals['_RUNFUNCTIONREQUEST_REQUIREDSCHEMASENTRY']._serialized_end=1155
83
+ _globals['_CREDENTIALS']._serialized_start=1179
84
+ _globals['_CREDENTIALS']._serialized_end=1272
85
+ _globals['_CREDENTIALDATA']._serialized_start=1275
86
+ _globals['_CREDENTIALDATA']._serialized_end=1403
87
+ _globals['_CREDENTIALDATA_DATAENTRY']._serialized_start=1360
88
+ _globals['_CREDENTIALDATA_DATAENTRY']._serialized_end=1403
89
+ _globals['_RESOURCES']._serialized_start=1405
90
+ _globals['_RESOURCES']._serialized_end=1468
91
+ _globals['_RUNFUNCTIONRESPONSE']._serialized_start=1471
92
+ _globals['_RUNFUNCTIONRESPONSE']._serialized_end=1887
93
+ _globals['_REQUESTMETA']._serialized_start=1889
94
+ _globals['_REQUESTMETA']._serialized_end=1976
95
+ _globals['_REQUIREMENTS']._serialized_start=1979
96
+ _globals['_REQUIREMENTS']._serialized_end=2515
97
+ _globals['_REQUIREMENTS_EXTRARESOURCESENTRY']._serialized_start=2231
98
+ _globals['_REQUIREMENTS_EXTRARESOURCESENTRY']._serialized_end=2329
99
+ _globals['_REQUIREMENTS_RESOURCESENTRY']._serialized_start=2331
100
+ _globals['_REQUIREMENTS_RESOURCESENTRY']._serialized_end=2424
101
+ _globals['_REQUIREMENTS_SCHEMASENTRY']._serialized_start=2426
102
+ _globals['_REQUIREMENTS_SCHEMASENTRY']._serialized_end=2515
103
+ _globals['_SCHEMASELECTOR']._serialized_start=2517
104
+ _globals['_SCHEMASELECTOR']._serialized_end=2568
105
+ _globals['_SCHEMA']._serialized_start=2570
106
+ _globals['_SCHEMA']._serialized_end=2643
107
+ _globals['_RESOURCESELECTOR']._serialized_start=2646
108
+ _globals['_RESOURCESELECTOR']._serialized_end=2832
109
+ _globals['_MATCHLABELS']._serialized_start=2835
110
+ _globals['_MATCHLABELS']._serialized_end=2963
111
+ _globals['_MATCHLABELS_LABELSENTRY']._serialized_start=2918
112
+ _globals['_MATCHLABELS_LABELSENTRY']._serialized_end=2963
113
+ _globals['_RESPONSEMETA']._serialized_start=2965
114
+ _globals['_RESPONSEMETA']._serialized_end=3045
115
+ _globals['_STATE']._serialized_start=3048
116
+ _globals['_STATE']._serialized_end=3266
117
+ _globals['_STATE_RESOURCESENTRY']._serialized_start=3181
118
+ _globals['_STATE_RESOURCESENTRY']._serialized_end=3266
119
+ _globals['_RESOURCE']._serialized_start=3269
120
+ _globals['_RESOURCE']._serialized_end=3517
121
+ _globals['_RESOURCE_CONNECTIONDETAILSENTRY']._serialized_start=3461
122
+ _globals['_RESOURCE_CONNECTIONDETAILSENTRY']._serialized_end=3517
123
+ _globals['_RESULT']._serialized_start=3520
124
+ _globals['_RESULT']._serialized_end=3699
125
+ _globals['_CONDITION']._serialized_start=3702
126
+ _globals['_CONDITION']._serialized_end=3895
127
+ _globals['_FUNCTIONRUNNERSERVICE']._serialized_start=4476
128
+ _globals['_FUNCTIONRUNNERSERVICE']._serialized_end=4611
129
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,306 @@
1
+ import datetime
2
+
3
+ from google.protobuf import duration_pb2 as _duration_pb2
4
+ from google.protobuf import struct_pb2 as _struct_pb2
5
+ from google.protobuf.internal import containers as _containers
6
+ from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import message as _message
9
+ from collections.abc import Iterable as _Iterable, Mapping as _Mapping
10
+ from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
11
+
12
+ DESCRIPTOR: _descriptor.FileDescriptor
13
+
14
+ class Capability(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
15
+ __slots__ = ()
16
+ CAPABILITY_UNSPECIFIED: _ClassVar[Capability]
17
+ CAPABILITY_CAPABILITIES: _ClassVar[Capability]
18
+ CAPABILITY_REQUIRED_RESOURCES: _ClassVar[Capability]
19
+ CAPABILITY_CREDENTIALS: _ClassVar[Capability]
20
+ CAPABILITY_CONDITIONS: _ClassVar[Capability]
21
+ CAPABILITY_REQUIRED_SCHEMAS: _ClassVar[Capability]
22
+
23
+ class Ready(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
24
+ __slots__ = ()
25
+ READY_UNSPECIFIED: _ClassVar[Ready]
26
+ READY_TRUE: _ClassVar[Ready]
27
+ READY_FALSE: _ClassVar[Ready]
28
+
29
+ class Severity(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
30
+ __slots__ = ()
31
+ SEVERITY_UNSPECIFIED: _ClassVar[Severity]
32
+ SEVERITY_FATAL: _ClassVar[Severity]
33
+ SEVERITY_WARNING: _ClassVar[Severity]
34
+ SEVERITY_NORMAL: _ClassVar[Severity]
35
+
36
+ class Target(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
37
+ __slots__ = ()
38
+ TARGET_UNSPECIFIED: _ClassVar[Target]
39
+ TARGET_COMPOSITE: _ClassVar[Target]
40
+ TARGET_COMPOSITE_AND_CLAIM: _ClassVar[Target]
41
+
42
+ class Status(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
43
+ __slots__ = ()
44
+ STATUS_CONDITION_UNSPECIFIED: _ClassVar[Status]
45
+ STATUS_CONDITION_UNKNOWN: _ClassVar[Status]
46
+ STATUS_CONDITION_TRUE: _ClassVar[Status]
47
+ STATUS_CONDITION_FALSE: _ClassVar[Status]
48
+ CAPABILITY_UNSPECIFIED: Capability
49
+ CAPABILITY_CAPABILITIES: Capability
50
+ CAPABILITY_REQUIRED_RESOURCES: Capability
51
+ CAPABILITY_CREDENTIALS: Capability
52
+ CAPABILITY_CONDITIONS: Capability
53
+ CAPABILITY_REQUIRED_SCHEMAS: Capability
54
+ READY_UNSPECIFIED: Ready
55
+ READY_TRUE: Ready
56
+ READY_FALSE: Ready
57
+ SEVERITY_UNSPECIFIED: Severity
58
+ SEVERITY_FATAL: Severity
59
+ SEVERITY_WARNING: Severity
60
+ SEVERITY_NORMAL: Severity
61
+ TARGET_UNSPECIFIED: Target
62
+ TARGET_COMPOSITE: Target
63
+ TARGET_COMPOSITE_AND_CLAIM: Target
64
+ STATUS_CONDITION_UNSPECIFIED: Status
65
+ STATUS_CONDITION_UNKNOWN: Status
66
+ STATUS_CONDITION_TRUE: Status
67
+ STATUS_CONDITION_FALSE: Status
68
+
69
+ class RunFunctionRequest(_message.Message):
70
+ __slots__ = ("meta", "observed", "desired", "input", "context", "extra_resources", "credentials", "required_resources", "required_schemas")
71
+ class ExtraResourcesEntry(_message.Message):
72
+ __slots__ = ("key", "value")
73
+ KEY_FIELD_NUMBER: _ClassVar[int]
74
+ VALUE_FIELD_NUMBER: _ClassVar[int]
75
+ key: str
76
+ value: Resources
77
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[Resources, _Mapping]] = ...) -> None: ...
78
+ class CredentialsEntry(_message.Message):
79
+ __slots__ = ("key", "value")
80
+ KEY_FIELD_NUMBER: _ClassVar[int]
81
+ VALUE_FIELD_NUMBER: _ClassVar[int]
82
+ key: str
83
+ value: Credentials
84
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[Credentials, _Mapping]] = ...) -> None: ...
85
+ class RequiredResourcesEntry(_message.Message):
86
+ __slots__ = ("key", "value")
87
+ KEY_FIELD_NUMBER: _ClassVar[int]
88
+ VALUE_FIELD_NUMBER: _ClassVar[int]
89
+ key: str
90
+ value: Resources
91
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[Resources, _Mapping]] = ...) -> None: ...
92
+ class RequiredSchemasEntry(_message.Message):
93
+ __slots__ = ("key", "value")
94
+ KEY_FIELD_NUMBER: _ClassVar[int]
95
+ VALUE_FIELD_NUMBER: _ClassVar[int]
96
+ key: str
97
+ value: Schema
98
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[Schema, _Mapping]] = ...) -> None: ...
99
+ META_FIELD_NUMBER: _ClassVar[int]
100
+ OBSERVED_FIELD_NUMBER: _ClassVar[int]
101
+ DESIRED_FIELD_NUMBER: _ClassVar[int]
102
+ INPUT_FIELD_NUMBER: _ClassVar[int]
103
+ CONTEXT_FIELD_NUMBER: _ClassVar[int]
104
+ EXTRA_RESOURCES_FIELD_NUMBER: _ClassVar[int]
105
+ CREDENTIALS_FIELD_NUMBER: _ClassVar[int]
106
+ REQUIRED_RESOURCES_FIELD_NUMBER: _ClassVar[int]
107
+ REQUIRED_SCHEMAS_FIELD_NUMBER: _ClassVar[int]
108
+ meta: RequestMeta
109
+ observed: State
110
+ desired: State
111
+ input: _struct_pb2.Struct
112
+ context: _struct_pb2.Struct
113
+ extra_resources: _containers.MessageMap[str, Resources]
114
+ credentials: _containers.MessageMap[str, Credentials]
115
+ required_resources: _containers.MessageMap[str, Resources]
116
+ required_schemas: _containers.MessageMap[str, Schema]
117
+ 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]] = ..., required_resources: _Optional[_Mapping[str, Resources]] = ..., required_schemas: _Optional[_Mapping[str, Schema]] = ...) -> None: ...
118
+
119
+ class Credentials(_message.Message):
120
+ __slots__ = ("credential_data",)
121
+ CREDENTIAL_DATA_FIELD_NUMBER: _ClassVar[int]
122
+ credential_data: CredentialData
123
+ def __init__(self, credential_data: _Optional[_Union[CredentialData, _Mapping]] = ...) -> None: ...
124
+
125
+ class CredentialData(_message.Message):
126
+ __slots__ = ("data",)
127
+ class DataEntry(_message.Message):
128
+ __slots__ = ("key", "value")
129
+ KEY_FIELD_NUMBER: _ClassVar[int]
130
+ VALUE_FIELD_NUMBER: _ClassVar[int]
131
+ key: str
132
+ value: bytes
133
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ...
134
+ DATA_FIELD_NUMBER: _ClassVar[int]
135
+ data: _containers.ScalarMap[str, bytes]
136
+ def __init__(self, data: _Optional[_Mapping[str, bytes]] = ...) -> None: ...
137
+
138
+ class Resources(_message.Message):
139
+ __slots__ = ("items",)
140
+ ITEMS_FIELD_NUMBER: _ClassVar[int]
141
+ items: _containers.RepeatedCompositeFieldContainer[Resource]
142
+ def __init__(self, items: _Optional[_Iterable[_Union[Resource, _Mapping]]] = ...) -> None: ...
143
+
144
+ class RunFunctionResponse(_message.Message):
145
+ __slots__ = ("meta", "desired", "results", "context", "requirements", "conditions", "output")
146
+ META_FIELD_NUMBER: _ClassVar[int]
147
+ DESIRED_FIELD_NUMBER: _ClassVar[int]
148
+ RESULTS_FIELD_NUMBER: _ClassVar[int]
149
+ CONTEXT_FIELD_NUMBER: _ClassVar[int]
150
+ REQUIREMENTS_FIELD_NUMBER: _ClassVar[int]
151
+ CONDITIONS_FIELD_NUMBER: _ClassVar[int]
152
+ OUTPUT_FIELD_NUMBER: _ClassVar[int]
153
+ meta: ResponseMeta
154
+ desired: State
155
+ results: _containers.RepeatedCompositeFieldContainer[Result]
156
+ context: _struct_pb2.Struct
157
+ requirements: Requirements
158
+ conditions: _containers.RepeatedCompositeFieldContainer[Condition]
159
+ output: _struct_pb2.Struct
160
+ 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]]] = ..., output: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ...
161
+
162
+ class RequestMeta(_message.Message):
163
+ __slots__ = ("tag", "capabilities")
164
+ TAG_FIELD_NUMBER: _ClassVar[int]
165
+ CAPABILITIES_FIELD_NUMBER: _ClassVar[int]
166
+ tag: str
167
+ capabilities: _containers.RepeatedScalarFieldContainer[Capability]
168
+ def __init__(self, tag: _Optional[str] = ..., capabilities: _Optional[_Iterable[_Union[Capability, str]]] = ...) -> None: ...
169
+
170
+ class Requirements(_message.Message):
171
+ __slots__ = ("extra_resources", "resources", "schemas")
172
+ class ExtraResourcesEntry(_message.Message):
173
+ __slots__ = ("key", "value")
174
+ KEY_FIELD_NUMBER: _ClassVar[int]
175
+ VALUE_FIELD_NUMBER: _ClassVar[int]
176
+ key: str
177
+ value: ResourceSelector
178
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[ResourceSelector, _Mapping]] = ...) -> None: ...
179
+ class ResourcesEntry(_message.Message):
180
+ __slots__ = ("key", "value")
181
+ KEY_FIELD_NUMBER: _ClassVar[int]
182
+ VALUE_FIELD_NUMBER: _ClassVar[int]
183
+ key: str
184
+ value: ResourceSelector
185
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[ResourceSelector, _Mapping]] = ...) -> None: ...
186
+ class SchemasEntry(_message.Message):
187
+ __slots__ = ("key", "value")
188
+ KEY_FIELD_NUMBER: _ClassVar[int]
189
+ VALUE_FIELD_NUMBER: _ClassVar[int]
190
+ key: str
191
+ value: SchemaSelector
192
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[SchemaSelector, _Mapping]] = ...) -> None: ...
193
+ EXTRA_RESOURCES_FIELD_NUMBER: _ClassVar[int]
194
+ RESOURCES_FIELD_NUMBER: _ClassVar[int]
195
+ SCHEMAS_FIELD_NUMBER: _ClassVar[int]
196
+ extra_resources: _containers.MessageMap[str, ResourceSelector]
197
+ resources: _containers.MessageMap[str, ResourceSelector]
198
+ schemas: _containers.MessageMap[str, SchemaSelector]
199
+ def __init__(self, extra_resources: _Optional[_Mapping[str, ResourceSelector]] = ..., resources: _Optional[_Mapping[str, ResourceSelector]] = ..., schemas: _Optional[_Mapping[str, SchemaSelector]] = ...) -> None: ...
200
+
201
+ class SchemaSelector(_message.Message):
202
+ __slots__ = ("api_version", "kind")
203
+ API_VERSION_FIELD_NUMBER: _ClassVar[int]
204
+ KIND_FIELD_NUMBER: _ClassVar[int]
205
+ api_version: str
206
+ kind: str
207
+ def __init__(self, api_version: _Optional[str] = ..., kind: _Optional[str] = ...) -> None: ...
208
+
209
+ class Schema(_message.Message):
210
+ __slots__ = ("openapi_v3",)
211
+ OPENAPI_V3_FIELD_NUMBER: _ClassVar[int]
212
+ openapi_v3: _struct_pb2.Struct
213
+ def __init__(self, openapi_v3: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ...
214
+
215
+ class ResourceSelector(_message.Message):
216
+ __slots__ = ("api_version", "kind", "match_name", "match_labels", "namespace")
217
+ API_VERSION_FIELD_NUMBER: _ClassVar[int]
218
+ KIND_FIELD_NUMBER: _ClassVar[int]
219
+ MATCH_NAME_FIELD_NUMBER: _ClassVar[int]
220
+ MATCH_LABELS_FIELD_NUMBER: _ClassVar[int]
221
+ NAMESPACE_FIELD_NUMBER: _ClassVar[int]
222
+ api_version: str
223
+ kind: str
224
+ match_name: str
225
+ match_labels: MatchLabels
226
+ namespace: str
227
+ def __init__(self, api_version: _Optional[str] = ..., kind: _Optional[str] = ..., match_name: _Optional[str] = ..., match_labels: _Optional[_Union[MatchLabels, _Mapping]] = ..., namespace: _Optional[str] = ...) -> None: ...
228
+
229
+ class MatchLabels(_message.Message):
230
+ __slots__ = ("labels",)
231
+ class LabelsEntry(_message.Message):
232
+ __slots__ = ("key", "value")
233
+ KEY_FIELD_NUMBER: _ClassVar[int]
234
+ VALUE_FIELD_NUMBER: _ClassVar[int]
235
+ key: str
236
+ value: str
237
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
238
+ LABELS_FIELD_NUMBER: _ClassVar[int]
239
+ labels: _containers.ScalarMap[str, str]
240
+ def __init__(self, labels: _Optional[_Mapping[str, str]] = ...) -> None: ...
241
+
242
+ class ResponseMeta(_message.Message):
243
+ __slots__ = ("tag", "ttl")
244
+ TAG_FIELD_NUMBER: _ClassVar[int]
245
+ TTL_FIELD_NUMBER: _ClassVar[int]
246
+ tag: str
247
+ ttl: _duration_pb2.Duration
248
+ def __init__(self, tag: _Optional[str] = ..., ttl: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ...) -> None: ...
249
+
250
+ class State(_message.Message):
251
+ __slots__ = ("composite", "resources")
252
+ class ResourcesEntry(_message.Message):
253
+ __slots__ = ("key", "value")
254
+ KEY_FIELD_NUMBER: _ClassVar[int]
255
+ VALUE_FIELD_NUMBER: _ClassVar[int]
256
+ key: str
257
+ value: Resource
258
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[Resource, _Mapping]] = ...) -> None: ...
259
+ COMPOSITE_FIELD_NUMBER: _ClassVar[int]
260
+ RESOURCES_FIELD_NUMBER: _ClassVar[int]
261
+ composite: Resource
262
+ resources: _containers.MessageMap[str, Resource]
263
+ def __init__(self, composite: _Optional[_Union[Resource, _Mapping]] = ..., resources: _Optional[_Mapping[str, Resource]] = ...) -> None: ...
264
+
265
+ class Resource(_message.Message):
266
+ __slots__ = ("resource", "connection_details", "ready")
267
+ class ConnectionDetailsEntry(_message.Message):
268
+ __slots__ = ("key", "value")
269
+ KEY_FIELD_NUMBER: _ClassVar[int]
270
+ VALUE_FIELD_NUMBER: _ClassVar[int]
271
+ key: str
272
+ value: bytes
273
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[bytes] = ...) -> None: ...
274
+ RESOURCE_FIELD_NUMBER: _ClassVar[int]
275
+ CONNECTION_DETAILS_FIELD_NUMBER: _ClassVar[int]
276
+ READY_FIELD_NUMBER: _ClassVar[int]
277
+ resource: _struct_pb2.Struct
278
+ connection_details: _containers.ScalarMap[str, bytes]
279
+ ready: Ready
280
+ def __init__(self, resource: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., connection_details: _Optional[_Mapping[str, bytes]] = ..., ready: _Optional[_Union[Ready, str]] = ...) -> None: ...
281
+
282
+ class Result(_message.Message):
283
+ __slots__ = ("severity", "message", "reason", "target")
284
+ SEVERITY_FIELD_NUMBER: _ClassVar[int]
285
+ MESSAGE_FIELD_NUMBER: _ClassVar[int]
286
+ REASON_FIELD_NUMBER: _ClassVar[int]
287
+ TARGET_FIELD_NUMBER: _ClassVar[int]
288
+ severity: Severity
289
+ message: str
290
+ reason: str
291
+ target: Target
292
+ def __init__(self, severity: _Optional[_Union[Severity, str]] = ..., message: _Optional[str] = ..., reason: _Optional[str] = ..., target: _Optional[_Union[Target, str]] = ...) -> None: ...
293
+
294
+ class Condition(_message.Message):
295
+ __slots__ = ("type", "status", "reason", "message", "target")
296
+ TYPE_FIELD_NUMBER: _ClassVar[int]
297
+ STATUS_FIELD_NUMBER: _ClassVar[int]
298
+ REASON_FIELD_NUMBER: _ClassVar[int]
299
+ MESSAGE_FIELD_NUMBER: _ClassVar[int]
300
+ TARGET_FIELD_NUMBER: _ClassVar[int]
301
+ type: str
302
+ status: Status
303
+ reason: str
304
+ message: str
305
+ target: Target
306
+ 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.pythonic.proto.v1 import run_function_pb2 as crossplane_dot_pythonic_dot_proto_dot_v1_dot_run__function__pb2
7
+
8
+ GRPC_GENERATED_VERSION = '1.80.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
+ + ' but the generated code in crossplane/pythonic/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 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_pythonic_dot_proto_dot_v1_dot_run__function__pb2.RunFunctionRequest.SerializeToString,
41
+ response_deserializer=crossplane_dot_pythonic_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 function.
47
+ """
48
+
49
+ def RunFunction(self, request, context):
50
+ """RunFunction runs the 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_pythonic_dot_proto_dot_v1_dot_run__function__pb2.RunFunctionRequest.FromString,
62
+ response_serializer=crossplane_dot_pythonic_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 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_pythonic_dot_proto_dot_v1_dot_run__function__pb2.RunFunctionRequest.SerializeToString,
92
+ crossplane_dot_pythonic_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)
@@ -897,6 +897,32 @@ class Value:
897
897
  return False
898
898
  return False
899
899
 
900
+ def __or__(self, other):
901
+ kind = self._kind
902
+ if kind not in ('struct_value', 'Struct'):
903
+ return NotImplemented
904
+ if not isinstance(other, (Value, dict)):
905
+ return NotImplemented
906
+ result = Map()
907
+ for key, value in self:
908
+ result[key] = value
909
+ items = other.items() if isinstance(other, dict) else iter(other)
910
+ for key, value in items:
911
+ result[key] = value
912
+ return result
913
+
914
+ def __ror__(self, other):
915
+ if not isinstance(other, dict):
916
+ return NotImplemented
917
+ result = Map()
918
+ for key, value in other.items():
919
+ result[key] = value
920
+ if self._kind not in ('struct_value', 'Struct'):
921
+ return NotImplemented
922
+ for key, value in self:
923
+ result[key] = value
924
+ return result
925
+
900
926
  def __str__(self):
901
927
  return format(self, '')
902
928
 
@@ -9,7 +9,6 @@ import logging
9
9
  import pathlib
10
10
  import sys
11
11
  import yaml
12
- from crossplane.function.proto.v1 import run_function_pb2 as fnv1
13
12
 
14
13
  from . import (
15
14
  command,
@@ -17,6 +16,8 @@ from . import (
17
16
  protobuf,
18
17
  )
19
18
  from .composite import BaseComposite
19
+ from .proto.v1 import run_function_pb2 as fnv1
20
+
20
21
 
21
22
  INFLECT = inflect.engine()
22
23
  INFLECT.classical(all=False)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crossplane-function-pythonic
3
- Version: 0.6.0
3
+ Version: 0.6.1
4
4
  Summary: A Python centric Crossplane Function
5
5
  Project-URL: Documentation, https://github.com/crossplane-contrib/function-pythonic#readme
6
6
  Project-URL: Issues, https://github.com/crossplane-contrib/function-pythonic/issues
@@ -14,14 +14,15 @@ Classifier: Programming Language :: Python :: 3.12
14
14
  Classifier: Programming Language :: Python :: 3.13
15
15
  Classifier: Programming Language :: Python :: 3.14
16
16
  Requires-Python: <3.15,>=3.12
17
- Requires-Dist: crossplane-function-sdk-python==0.11.0
17
+ Requires-Dist: grpcio==1.80.0
18
18
  Requires-Dist: inflect==7.5.0
19
19
  Requires-Dist: kr8s==0.20.15
20
+ Requires-Dist: protobuf==7.35.0
20
21
  Requires-Dist: pyyaml==6.0.3
21
22
  Provides-Extra: packages
22
- Requires-Dist: kopf==1.44.4; extra == 'packages'
23
+ Requires-Dist: kopf==1.44.5; extra == 'packages'
23
24
  Provides-Extra: pip-install
24
- Requires-Dist: pip==26.0.1; extra == 'pip-install'
25
+ Requires-Dist: pip==26.1.1; extra == 'pip-install'
25
26
  Description-Content-Type: text/markdown
26
27
 
27
28
  # function-pythonic
@@ -0,0 +1,22 @@
1
+ crossplane/pythonic/__about__.py,sha256=BmpWZgjXb-VKaTW2Ok13c3aMep0Fd7G8hL8yn1f5Ak0,73
2
+ crossplane/pythonic/__init__.py,sha256=cRk12kc18RLhc9s5dW6sQqZSCEp80fooRO5zxXqc1oA,292
3
+ crossplane/pythonic/__main__.py,sha256=6vYRlYDJtqFgLyiTamnl3htiNOtz8QlDl5WlIP98I8o,31
4
+ crossplane/pythonic/auto_ready.py,sha256=sPetUuJRhwZbg9muaDmbdqmtTIIUDmY4qoadoJA0EtQ,7201
5
+ crossplane/pythonic/command.py,sha256=aT58WBrhU_scaOGeqmsBfofIDnXyW1CQOpCktVGBj5s,4211
6
+ crossplane/pythonic/composite.py,sha256=jEMXPy9PchOLZxWDGq5ni6lq3g9guItU5hMZi98ZO34,34440
7
+ crossplane/pythonic/function.py,sha256=sea1BJ9_lOPlhYyD8tO9PV6ieeRb-iQOeez07pG2vZk,18535
8
+ crossplane/pythonic/grpc.py,sha256=F3BrfjISGRS2TKeoxUjWeA1LopBaFlZ6nCq_Hei4Di8,5681
9
+ crossplane/pythonic/main.py,sha256=ujUa_FYElQSGqnhZ-0NJrD3kSyYjfRbIp79FV2Yl7hs,599
10
+ crossplane/pythonic/packages.py,sha256=cOlF-wo2CzknwFPAfuwgCiwdT5vDE4n7oBMfQErVzbA,7023
11
+ crossplane/pythonic/protobuf.py,sha256=1Yj8Cgku0w0UYU3dOh6QIaE8HFtkdkhL9b5UERzwAQ0,53978
12
+ crossplane/pythonic/render.py,sha256=lz65rwcg3EvzdWMTUMMA6PvSHqMVTTkrEK11lLe-0XY,33804
13
+ crossplane/pythonic/version.py,sha256=-RiB0p146ayqJj0SXfYxTNv49u9Fx9pPgm59Ji2blhc,214
14
+ crossplane/pythonic/proto/v1/run_function.proto,sha256=GbJ0wVUEjfpMsn2DsnhiPvtmL09z3oyMbWwf6viQtiw,16676
15
+ crossplane/pythonic/proto/v1/run_function_pb2.py,sha256=adoDilRP8JNSsNWtvLQv8egrlnmpnZk8qbo3REMR8EY,14440
16
+ crossplane/pythonic/proto/v1/run_function_pb2.pyi,sha256=MvjcY39d1xJ4ZZmRibhehCKF1mHVGb6qfpoCQO8XYqE,14374
17
+ crossplane/pythonic/proto/v1/run_function_pb2_grpc.py,sha256=mwfE6i_TQHEfh-KemCT10fKA6jlyZ1A0Ih1z6nELkXk,3968
18
+ crossplane_function_pythonic-0.6.1.dist-info/METADATA,sha256=4RBD7g6NimpRSnPQ_qj54B7-k4uk8iSH5Xc7EzHOFfQ,36686
19
+ crossplane_function_pythonic-0.6.1.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
20
+ crossplane_function_pythonic-0.6.1.dist-info/entry_points.txt,sha256=jJ4baywFDviB9WyAhyhNYF2VOCb6XtbRSjKf7bnBwhg,68
21
+ crossplane_function_pythonic-0.6.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
22
+ crossplane_function_pythonic-0.6.1.dist-info/RECORD,,
@@ -1,18 +0,0 @@
1
- crossplane/pythonic/__about__.py,sha256=v3R2QlL6bK_t2oKW7b96iHro1p7Iag8djZQbp6xQLPE,73
2
- crossplane/pythonic/__init__.py,sha256=cRk12kc18RLhc9s5dW6sQqZSCEp80fooRO5zxXqc1oA,292
3
- crossplane/pythonic/__main__.py,sha256=6vYRlYDJtqFgLyiTamnl3htiNOtz8QlDl5WlIP98I8o,31
4
- crossplane/pythonic/auto_ready.py,sha256=sPetUuJRhwZbg9muaDmbdqmtTIIUDmY4qoadoJA0EtQ,7201
5
- crossplane/pythonic/command.py,sha256=aT58WBrhU_scaOGeqmsBfofIDnXyW1CQOpCktVGBj5s,4211
6
- crossplane/pythonic/composite.py,sha256=gQ7DzY0kn8J2lUWH9hYVLZB6NYDBo0IJJwUDBooTNsc,34459
7
- crossplane/pythonic/function.py,sha256=2f8-J5sgDrtn3z6Fxu2JODnr6VsjBESIVSJ5Hd4LssY,18573
8
- crossplane/pythonic/grpc.py,sha256=WFyxkIh-nNtOswQhtN1V3e-8Qr79fDcNht8OpvihHYM,5694
9
- crossplane/pythonic/main.py,sha256=ujUa_FYElQSGqnhZ-0NJrD3kSyYjfRbIp79FV2Yl7hs,599
10
- crossplane/pythonic/packages.py,sha256=cOlF-wo2CzknwFPAfuwgCiwdT5vDE4n7oBMfQErVzbA,7023
11
- crossplane/pythonic/protobuf.py,sha256=-HFHlGV1zMi5DmTOxe9qcBMJ0bZKH2hEkJH1CF7nvp4,53128
12
- crossplane/pythonic/render.py,sha256=qIcUsE6iCka6VwUlhpN1BZhHvbl3GL6X3dPepmdlDV8,33822
13
- crossplane/pythonic/version.py,sha256=-RiB0p146ayqJj0SXfYxTNv49u9Fx9pPgm59Ji2blhc,214
14
- crossplane_function_pythonic-0.6.0.dist-info/METADATA,sha256=kaKnXE14jueu5X-kf8k2H904NIg9qV-o4WGOJOaUqqs,36678
15
- crossplane_function_pythonic-0.6.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
16
- crossplane_function_pythonic-0.6.0.dist-info/entry_points.txt,sha256=jJ4baywFDviB9WyAhyhNYF2VOCb6XtbRSjKf7bnBwhg,68
17
- crossplane_function_pythonic-0.6.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
18
- crossplane_function_pythonic-0.6.0.dist-info/RECORD,,