crossplane-function-pythonic 0.1.5__tar.gz → 0.2.1__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 (171) hide show
  1. crossplane_function_pythonic-0.1.5/README.md → crossplane_function_pythonic-0.2.1/PKG-INFO +110 -50
  2. crossplane_function_pythonic-0.1.5/PKG-INFO → crossplane_function_pythonic-0.2.1/README.md +86 -74
  3. crossplane_function_pythonic-0.2.1/crossplane/pythonic/__about__.py +2 -0
  4. crossplane_function_pythonic-0.2.1/crossplane/pythonic/__main__.py +2 -0
  5. crossplane_function_pythonic-0.2.1/crossplane/pythonic/command.py +102 -0
  6. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/crossplane/pythonic/composite.py +26 -23
  7. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/crossplane/pythonic/function.py +7 -7
  8. crossplane_function_pythonic-0.2.1/crossplane/pythonic/grpc.py +128 -0
  9. crossplane_function_pythonic-0.2.1/crossplane/pythonic/main.py +28 -0
  10. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/crossplane/pythonic/protobuf.py +107 -30
  11. crossplane_function_pythonic-0.2.1/crossplane/pythonic/render.py +462 -0
  12. crossplane_function_pythonic-0.2.1/crossplane/pythonic/version.py +13 -0
  13. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/.dev/functions.yaml +2 -2
  14. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/aks-cluster/cluster-function-pythonic.yaml +1 -1
  15. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/aks-cluster/composition.yaml +2 -2
  16. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/aks-cluster/functions.yaml +2 -2
  17. crossplane_function_pythonic-0.2.1/examples/aks-cluster/render.sh +10 -0
  18. crossplane_function_pythonic-0.2.1/examples/connections/composite-connection.yaml +8 -0
  19. crossplane_function_pythonic-0.2.1/examples/connections/composition.yaml +39 -0
  20. crossplane_function_pythonic-0.2.1/examples/connections/rds-connection.yaml +8 -0
  21. crossplane_function_pythonic-0.2.1/examples/connections/rds-observed.yaml +21 -0
  22. crossplane_function_pythonic-0.2.1/examples/connections/render.sh +9 -0
  23. crossplane_function_pythonic-0.2.1/examples/connections/step-credential.yaml +8 -0
  24. crossplane_function_pythonic-0.2.1/examples/connections/xr.yaml +8 -0
  25. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/eks-cluster/composition-v2.yaml +3 -3
  26. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/eks-cluster/composition.yaml +3 -3
  27. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/eks-cluster/definition.yaml +3 -3
  28. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/eks-cluster/functions.yaml +2 -2
  29. crossplane_function_pythonic-0.2.1/examples/eks-cluster/render-v2.sh +4 -0
  30. {crossplane_function_pythonic-0.1.5/examples/import-existing-vpc → crossplane_function_pythonic-0.2.1/examples/eks-cluster}/render.sh +1 -1
  31. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/eks-cluster/xr.yaml +2 -2
  32. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/filing-system/composition.yaml +1 -1
  33. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/filing-system/function.yaml +2 -2
  34. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/conditions/composition.yaml +1 -5
  35. {crossplane_function_pythonic-0.1.5/examples/function-go-templating/extra-resources → crossplane_function_pythonic-0.2.1/examples/function-go-templating/conditions}/functions.yaml +3 -2
  36. crossplane_function_pythonic-0.2.1/examples/function-go-templating/conditions/render.sh +4 -0
  37. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/context/composition.yaml +6 -17
  38. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/context/environmentConfigs.yaml +1 -1
  39. {crossplane_function_pythonic-0.1.5/examples/function-go-templating/functions/getComposedResource → crossplane_function_pythonic-0.2.1/examples/function-go-templating/context}/functions.yaml +3 -2
  40. crossplane_function_pythonic-0.2.1/examples/function-go-templating/context/render.sh +4 -0
  41. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/extra-resources/composition.yaml +1 -1
  42. {crossplane_function_pythonic-0.1.5/examples/function-go-templating/functions/fromYaml → crossplane_function_pythonic-0.2.1/examples/function-go-templating/extra-resources}/functions.yaml +2 -2
  43. crossplane_function_pythonic-0.2.1/examples/function-go-templating/extra-resources/render.sh +4 -0
  44. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/functions/fromYaml/composition.yaml +1 -1
  45. {crossplane_function_pythonic-0.1.5/examples/function-go-templating/functions/getCompositeResource → crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/fromYaml}/functions.yaml +2 -2
  46. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/fromYaml/render.sh +4 -0
  47. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/functions/getComposedResource/composition.yaml +1 -1
  48. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/getComposedResource/functions.yaml +9 -0
  49. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/getComposedResource/render.sh +4 -0
  50. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/functions/getCompositeResource/composition.yaml +1 -1
  51. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/getCompositeResource/functions.yaml +9 -0
  52. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/getCompositeResource/render.sh +4 -0
  53. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/getCredentialData/composition.yaml +27 -0
  54. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/getCredentialData/credentials.yaml +9 -0
  55. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/getCredentialData/functions.yaml +9 -0
  56. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/getCredentialData/render.sh +4 -0
  57. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/getCredentialData/xr.yaml +5 -0
  58. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/functions/getResourceCondition/composition.yaml +1 -1
  59. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/getResourceCondition/functions.yaml +9 -0
  60. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/getResourceCondition/render.sh +4 -0
  61. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/functions/include/composition.yaml +1 -1
  62. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/include/functions.yaml +9 -0
  63. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/include/render.sh +4 -0
  64. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/functions/toYaml/composition.yaml +1 -1
  65. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/toYaml/functions.yaml +9 -0
  66. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/toYaml/render.sh +4 -0
  67. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/inline/composition.yaml +1 -1
  68. crossplane_function_pythonic-0.2.1/examples/function-go-templating/inline/functions.yaml +9 -0
  69. crossplane_function_pythonic-0.2.1/examples/function-go-templating/inline/render.sh +4 -0
  70. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/recursive/composition-real.yaml +1 -1
  71. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/recursive/composition-wrapper.yaml +1 -1
  72. crossplane_function_pythonic-0.2.1/examples/function-go-templating/recursive/functions.yaml +9 -0
  73. crossplane_function_pythonic-0.2.1/examples/function-go-templating/recursive/render.sh +7 -0
  74. crossplane_function_pythonic-0.2.1/examples/function-sequencer/composition.yaml +48 -0
  75. {crossplane_function_pythonic-0.1.5/examples/single-purpose → crossplane_function_pythonic-0.2.1/examples/function-sequencer}/functions.yaml +2 -2
  76. crossplane_function_pythonic-0.2.1/examples/function-sequencer/observed.yaml +27 -0
  77. crossplane_function_pythonic-0.2.1/examples/function-sequencer/render.sh +12 -0
  78. crossplane_function_pythonic-0.2.1/examples/function-sequencer/sequencer.py +12 -0
  79. crossplane_function_pythonic-0.2.1/examples/function-sequencer/xr.yaml +6 -0
  80. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/get-started-app/composition.yaml +1 -1
  81. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/get-started-app/functions.yaml +2 -2
  82. crossplane_function_pythonic-0.2.1/examples/get-started-app/render.sh +4 -0
  83. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/helm-copy-secret/composition.yaml +1 -1
  84. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/helm-copy-secret/functions.yaml +2 -2
  85. crossplane_function_pythonic-0.2.1/examples/helm-copy-secret/render.sh +4 -0
  86. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/helm-copy-secret/vcluster.py +1 -1
  87. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/import-existing-vpc/composition.yaml +2 -2
  88. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/import-existing-vpc/functions.yaml +2 -2
  89. crossplane_function_pythonic-0.2.1/examples/import-existing-vpc/render.sh +7 -0
  90. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/import-existing-vpc/xr.yaml +1 -1
  91. crossplane_function_pythonic-0.2.1/examples/single-purpose/functions.yaml +8 -0
  92. crossplane_function_pythonic-0.2.1/examples/single-purpose/render.sh +4 -0
  93. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/single-purpose/xr.yaml +1 -1
  94. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/usages-extra/composition.yaml +1 -1
  95. crossplane_function_pythonic-0.2.1/examples/usages-extra/functions.yaml +9 -0
  96. crossplane_function_pythonic-0.2.1/examples/usages-extra/render.sh +4 -0
  97. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/pyproject.toml +10 -10
  98. crossplane_function_pythonic-0.1.5/crossplane/pythonic/main.py +0 -198
  99. crossplane_function_pythonic-0.1.5/examples/aks-cluster/render.sh +0 -9
  100. crossplane_function_pythonic-0.1.5/examples/eks-cluster/render-v2.sh +0 -3
  101. crossplane_function_pythonic-0.1.5/examples/eks-cluster/render.sh +0 -3
  102. crossplane_function_pythonic-0.1.5/examples/function-go-templating/conditions/functions.yaml +0 -25
  103. crossplane_function_pythonic-0.1.5/examples/function-go-templating/conditions/render.sh +0 -3
  104. crossplane_function_pythonic-0.1.5/examples/function-go-templating/context/functions.yaml +0 -25
  105. crossplane_function_pythonic-0.1.5/examples/function-go-templating/context/render.sh +0 -3
  106. crossplane_function_pythonic-0.1.5/examples/function-go-templating/extra-resources/render.sh +0 -3
  107. crossplane_function_pythonic-0.1.5/examples/function-go-templating/functions/fromYaml/render.sh +0 -3
  108. crossplane_function_pythonic-0.1.5/examples/function-go-templating/functions/getComposedResource/render.sh +0 -3
  109. crossplane_function_pythonic-0.1.5/examples/function-go-templating/functions/getCompositeResource/render.sh +0 -3
  110. crossplane_function_pythonic-0.1.5/examples/function-go-templating/functions/getResourceCondition/functions.yaml +0 -9
  111. crossplane_function_pythonic-0.1.5/examples/function-go-templating/functions/getResourceCondition/render.sh +0 -3
  112. crossplane_function_pythonic-0.1.5/examples/function-go-templating/functions/include/functions.yaml +0 -9
  113. crossplane_function_pythonic-0.1.5/examples/function-go-templating/functions/include/render.sh +0 -3
  114. crossplane_function_pythonic-0.1.5/examples/function-go-templating/functions/toYaml/functions.yaml +0 -9
  115. crossplane_function_pythonic-0.1.5/examples/function-go-templating/functions/toYaml/render.sh +0 -3
  116. crossplane_function_pythonic-0.1.5/examples/function-go-templating/inline/functions.yaml +0 -9
  117. crossplane_function_pythonic-0.1.5/examples/function-go-templating/inline/render.sh +0 -3
  118. crossplane_function_pythonic-0.1.5/examples/function-go-templating/recursive/functions.yaml +0 -9
  119. crossplane_function_pythonic-0.1.5/examples/function-go-templating/recursive/render.sh +0 -4
  120. crossplane_function_pythonic-0.1.5/examples/get-started-app/render.sh +0 -3
  121. crossplane_function_pythonic-0.1.5/examples/helm-copy-secret/render.sh +0 -3
  122. crossplane_function_pythonic-0.1.5/examples/single-purpose/render.sh +0 -3
  123. crossplane_function_pythonic-0.1.5/examples/usages-extra/functions.yaml +0 -9
  124. crossplane_function_pythonic-0.1.5/examples/usages-extra/render.sh +0 -3
  125. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/.gitignore +0 -0
  126. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/LICENSE +0 -0
  127. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/crossplane/pythonic/__init__.py +0 -0
  128. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/crossplane/pythonic/packages.py +0 -0
  129. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/aks-cluster/README.md +0 -0
  130. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/aks-cluster/aks/kubernetescluster.py +0 -0
  131. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/aks-cluster/aks/resourcegroup.py +0 -0
  132. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/aks-cluster/definition.yaml +0 -0
  133. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/aks-cluster/install.sh +0 -0
  134. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/aks-cluster/kustomization.yaml +0 -0
  135. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/aks-cluster/providers.yaml +0 -0
  136. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/aks-cluster/xr.yaml +0 -0
  137. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/filing-system/README.md +0 -0
  138. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/filing-system/definition.yaml +0 -0
  139. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/filing-system/kustomization.yaml +0 -0
  140. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/filing-system/runtime.yaml +0 -0
  141. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/filing-system/vcluster.py +0 -0
  142. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/filing-system/vcluster.yaml +0 -0
  143. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/conditions/xr.yaml +0 -0
  144. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/conditions/xrd.yaml +0 -0
  145. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/context/xr.yaml +0 -0
  146. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/context/xrd.yaml +0 -0
  147. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/extra-resources/extraResources.yaml +0 -0
  148. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/extra-resources/xr.yaml +0 -0
  149. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/functions/fromYaml/xr.yaml +0 -0
  150. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/functions/getComposedResource/observed.yaml +0 -0
  151. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/functions/getComposedResource/xr.yaml +0 -0
  152. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/functions/getCompositeResource/xr.yaml +0 -0
  153. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/functions/getResourceCondition/observed.yaml +0 -0
  154. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/functions/getResourceCondition/xr.yaml +0 -0
  155. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/functions/include/xr.yaml +0 -0
  156. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/functions/toYaml/xr.yaml +0 -0
  157. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/inline/xr.yaml +0 -0
  158. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/function-go-templating/recursive/xr.yaml +0 -0
  159. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/get-started-app/definition.yaml +0 -0
  160. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/get-started-app/xr.yaml +0 -0
  161. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/helm-copy-secret/kustomization.yaml +0 -0
  162. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/helm-copy-secret/run-function.sh +0 -0
  163. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/helm-copy-secret/xr.yaml +0 -0
  164. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/helm-copy-secret/xrd.yaml +0 -0
  165. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/import-existing-vpc/README.md +0 -0
  166. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/import-existing-vpc/definition.yaml +0 -0
  167. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/import-existing-vpc/observed.yaml +0 -0
  168. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/import-existing-vpc/provider-ec2.yaml +0 -0
  169. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/usages-extra/extraResources.yaml +0 -0
  170. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/usages-extra/observedResources.yaml +0 -0
  171. {crossplane_function_pythonic-0.1.5 → crossplane_function_pythonic-0.2.1}/examples/usages-extra/xr.yaml +0 -0
@@ -1,3 +1,27 @@
1
+ Metadata-Version: 2.4
2
+ Name: crossplane-function-pythonic
3
+ Version: 0.2.1
4
+ Summary: A Python centric Crossplane Function
5
+ Project-URL: Documentation, https://github.com/crossplane-contrib/function-pythonic#readme
6
+ Project-URL: Issues, https://github.com/crossplane-contrib/function-pythonic/issues
7
+ Project-URL: Source, https://github.com/crossplane-contrib/function-pythonic
8
+ Author-email: Patrick J McNerthney <pat@mcnerthney.com>
9
+ License-Expression: Apache-2.0
10
+ License-File: LICENSE
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Programming Language :: Python
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Programming Language :: Python :: 3.14
16
+ Requires-Python: <3.15,>=3.12
17
+ Requires-Dist: crossplane-function-sdk-python==0.10.0
18
+ Requires-Dist: pyyaml==6.0.3
19
+ Provides-Extra: packages
20
+ Requires-Dist: kopf==1.39.1; extra == 'packages'
21
+ Provides-Extra: pip-install
22
+ Requires-Dist: pip==25.3; extra == 'pip-install'
23
+ Description-Content-Type: text/markdown
24
+
1
25
  # function-pythonic
2
26
 
3
27
  ## Introduction
@@ -21,11 +45,11 @@ spec:
21
45
  kind: XR
22
46
  mode: Pipeline
23
47
  pipeline:
24
- - step:
48
+ - step:
25
49
  functionRef:
26
50
  name: function-pythonic
27
51
  input:
28
- apiVersion: pythonic.fn.fortra.com/v1alpha1
52
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
29
53
  kind: Composite
30
54
  composite: |
31
55
  class VpcComposite(BaseComposite):
@@ -57,7 +81,7 @@ kind: Function
57
81
  metadata:
58
82
  name: function-pythonic
59
83
  spec:
60
- package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.1.5
84
+ package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.2.1
61
85
  ```
62
86
  ## Composed Resource Dependencies
63
87
 
@@ -203,9 +227,10 @@ The BaseComposite class provides the following fields for manipulating the Compo
203
227
  | self.spec | Map | The composite observed spec |
204
228
  | self.status | Map | The composite desired and observed status, read from observed if not in desired |
205
229
  | self.conditions | Conditions | The composite desired and observed conditions, read from observed if not in desired |
206
- | self.events | Events | Returned events against the Composite and optionally on the Claim |
207
- | self.connection | Connection | The composite desired and observed connection detials, read from observed if not in desired |
230
+ | self.results | Results | Returned results applied to the Composite and optionally on the Claim |
231
+ | self.connection | Map | The composite desired connection detials |
208
232
  | self.ready | Boolean | The composite desired ready state |
233
+ | self.observed.connection | Map | The composite observed connection detials |
209
234
 
210
235
  The BaseComposite also provides access to the following Crossplane Function level features:
211
236
 
@@ -246,7 +271,7 @@ Resource class:
246
271
  | Resource.data | Map | The resource data |
247
272
  | Resource.status | Map | The resource status |
248
273
  | Resource.conditions | Conditions | The resource conditions |
249
- | Resource.connection | Connection | The resource connection details |
274
+ | Resource.connection | Map | The resource observed connection details |
250
275
  | Resource.ready | Boolean | The resource ready state |
251
276
  | Resource.unknownsFatal | Boolean | Terminate the composition if this resource has been created and is assigned unknown values, default is Composite.unknownsFatal |
252
277
  | Resource.usages | Boolean | Generate Crossplane Usages for this resource, default is Composite.autoReady |
@@ -286,6 +311,7 @@ Each resource in the list is the following RequiredResource class:
286
311
  | RequiredResource.data | Map | The required resource data |
287
312
  | RequiredResource.status | Map | The required resource status |
288
313
  | RequiredResource.conditions | Map | The required resource conditions |
314
+ | RequiredResource.connection | Map | The required resource connection details |
289
315
 
290
316
  ### Conditions
291
317
 
@@ -302,19 +328,19 @@ The fields are read only for `Resource.conditions` and `RequiredResource.conditi
302
328
  | Condition.lastTransitionTime | Timestamp | Last transition time, read only |
303
329
  | Condition.claim | Boolean | Also apply the condition the claim |
304
330
 
305
- ### Events
331
+ ### Results
306
332
 
307
- The `BaseComposite.events` field is a list of events to apply to the Composite and
333
+ The `BaseComposite.results` field is a list of results to apply to the Composite and
308
334
  optionally to the Claim.
309
335
 
310
336
  | Field | Type | Description |
311
337
  | ----- | ---- | ----------- |
312
- | Event.info | Boolean | Normal informational event |
313
- | Event.warning | Boolean | Warning level event |
314
- | Event.fatal | Boolean | Fatal events also terminate composing the Composite |
315
- | Event.reason | String | PascalCase, machine-readable reason for this event |
316
- | Event.message | String | Human-readable details about the event |
317
- | Event.claim | Boolean | Also apply the event to the claim |
338
+ | Result.info | Boolean | Normal informational result |
339
+ | Result.warning | Boolean | Warning level result |
340
+ | Result.fatal | Boolean | Fatal results also terminate composing the Composite |
341
+ | Result.reason | String | PascalCase, machine-readable reason for this result |
342
+ | Result.message | String | Human-readable details about the result |
343
+ | Result.claim | Boolean | Also apply the result to the claim |
318
344
 
319
345
  ## Single use Composites
320
346
 
@@ -324,7 +350,7 @@ just to run that Composition once in a single use or initialize task?
324
350
  function-pythonic installs a `Composite` CompositeResourceDefinition that enables
325
351
  creating such tasks using a single Composite resource:
326
352
  ```yaml
327
- apiVersion: pythonic.fortra.com/v1alpha1
353
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
328
354
  kind: Composite
329
355
  metadata:
330
356
  name: composite-example
@@ -337,16 +363,62 @@ spec:
337
363
 
338
364
  ## Quick Start Development
339
365
 
340
- The following example demonstrates how to locally render function-python
341
- compositions. First, install the `crossplane-function-pythonic` python
342
- package into the python environment:
366
+ function-pythonic includes a pure python implementation of the `crossplane render ...`
367
+ command, which can be used to render Compositions that only use function-pythonic. This
368
+ makes it very easy to test and debug using your IDE of choice. It is also blindingly
369
+ fast compared to `crossplane render`. To use, install the `crossplane-function-pythonic`
370
+ python package into the python environment.
343
371
  ```shell
344
372
  $ pip install crossplane-function-pythonic
345
373
  ```
346
- Next, create the following files:
374
+ Then to render function-pythonic Compositions, use the `function-pythonic render ...`
375
+ command.
376
+ ```shell
377
+ $ function-pythonic render -h
378
+ usage: Crossplane Function Pythonic render [-h] [--debug] [--log-name-width WIDTH] [--python-path DIRECTORY] [--render-unknowns]
379
+ [--allow-oversize-protos] [--context-files KEY=PATH] [--context-values KEY=VALUE]
380
+ [--observed-resources PATH] [--required-resources PATH] [--secret-store PATH] [--include-full-xr]
381
+ [--include-connection-xr] [--include-function-results] [--include-context]
382
+ PATH [PATH/CLASS]
383
+
384
+ positional arguments:
385
+ PATH A YAML file containing the Composite resource to render.
386
+ PATH/CLASS A YAML file containing the Composition resource or the complete path of a function=-pythonic BaseComposite subclass.
387
+
388
+ options:
389
+ -h, --help show this help message and exit
390
+ --debug, -d Emit debug logs.
391
+ --log-name-width WIDTH
392
+ Width of the logger name in the log output, default 40.
393
+ --python-path DIRECTORY
394
+ Filing system directories to add to the python path.
395
+ --render-unknowns, -u
396
+ Render resources with unknowns, useful during local development.
397
+ --allow-oversize-protos
398
+ Allow oversized protobuf messages
399
+ --context-files KEY=PATH
400
+ Context key-value pairs to pass to the Function pipeline. Values must be files containing YAML/JSON.
401
+ --context-values KEY=VALUE
402
+ Context key-value pairs to pass to the Function pipeline. Values must be YAML/JSON. Keys take precedence over --context-files.
403
+ --observed-resources, -o PATH
404
+ A YAML file or directory of YAML files specifying the observed state of composed resources.
405
+ --required-resources, -e PATH
406
+ A YAML file or directory of YAML files specifying required resources to pass to the Function pipeline.
407
+ --secret-store, -s PATH
408
+ A YAML file or directory of YAML files specifying Secrets to use to resolve connections and credentials.
409
+ --include-full-xr, -x
410
+ Include a direct copy of the input XR's spedc and metadata fields in the rendered output.
411
+ --include-connection-xr
412
+ Include the Composite connection values in the rendered output as a resource of kind: Connection.
413
+ --include-function-results, -r
414
+ Include informational and warning messages from Functions in the rendered output as resources of kind: Result..
415
+ --include-context, -c
416
+ Include the context in the rendered output as a resource of kind: Context.
417
+ ```
418
+ The following example demonstrates how to locally render function-python compositions. First, create the following files:
347
419
  #### xr.yaml
348
420
  ```yaml
349
- apiVersion: pythonic.fortra.com/v1alpha1
421
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
350
422
  kind: Hello
351
423
  metadata:
352
424
  name: world
@@ -358,10 +430,10 @@ spec:
358
430
  apiVersion: apiextensions.crossplane.io/v1
359
431
  kind: Composition
360
432
  metadata:
361
- name: hellos.pythonic.fortra.com
433
+ name: hellos.pythonic.crossplane.io
362
434
  spec:
363
435
  compositeTypeRef:
364
- apiVersion: pythonic.fortra.com/v1alpha1
436
+ apiVersion: pythonic.crossplane.io/v1alpha1
365
437
  kind: Hello
366
438
  mode: Pipeline
367
439
  pipeline:
@@ -369,50 +441,38 @@ spec:
369
441
  functionRef:
370
442
  name: function-pythonic
371
443
  input:
372
- apiVersion: pythonic.fn.fortra.com/v1alpha1
444
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
373
445
  kind: Composite
374
446
  composite: |
375
447
  class GreetingComposite(BaseComposite):
376
448
  def compose(self):
377
449
  self.status.greeting = f"Hello, {self.spec.who}!"
378
450
  ```
379
- #### functions.yaml
380
- ```yaml
381
- apiVersion: pkg.crossplane.io/v1beta1
382
- kind: Function
383
- metadata:
384
- name: function-pythonic
385
- annotations:
386
- render.crossplane.io/runtime: Development
387
- spec:
388
- package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.1.5
389
- ```
390
- In one terminal session, run function-pythonic:
391
- ```shell
392
- $ function-pythonic --insecure --debug --render-unknowns
393
- [2025-08-21 15:32:37.966] grpc._cython.cygrpc [DEBUG ] Using AsyncIOEngine.POLLER as I/O engine
394
- ```
395
- In another terminal session, render the Composite:
451
+ Then, to render the above composite and composition, run:
396
452
  ```shell
397
- $ crossplane render xr.yaml composition.yaml functions.yaml
453
+ $ function-pythonic render --debug --render-unknowns xr.yaml composition.yaml
454
+ [2025-12-29 09:44:57.949] io.crossplane.fn.pythonic.Hello.world [DEBUG ] Starting compose, 1st step, 1st pass
455
+ [2025-12-29 09:44:57.949] io.crossplane.fn.pythonic.Hello.world [INFO ] Completed compose
398
456
  ---
399
- apiVersion: pythonic.fortra.com/v1alpha1
457
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
400
458
  kind: Hello
401
459
  metadata:
402
460
  name: world
403
461
  status:
404
462
  conditions:
405
- - lastTransitionTime: "2024-01-01T00:00:00Z"
463
+ - lastTransitionTime: '2026-01-01T00:00:00Z'
406
464
  reason: Available
407
- status: "True"
465
+ status: 'True'
408
466
  type: Ready
409
- - lastTransitionTime: "2024-01-01T00:00:00Z"
467
+ - lastTransitionTime: '2026-01-01T00:00:00Z'
410
468
  message: All resources are composed
411
469
  reason: AllComposed
412
- status: "True"
470
+ status: 'True'
413
471
  type: ResourcesComposed
414
472
  greeting: Hello, World!
415
473
  ```
474
+ Most of the examples contain a `render.sh` command which uses `function-pythonic render` to
475
+ render the example.
416
476
 
417
477
  ## ConfigMap Packages
418
478
 
@@ -441,7 +501,7 @@ Then, in your Composition:
441
501
  functionRef:
442
502
  name: function-pythonic
443
503
  input:
444
- apiVersion: pythonic.fn.fortra.com/v1alpha1
504
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
445
505
  kind: Composite
446
506
  composite: |
447
507
  from example.pythonic import features
@@ -473,7 +533,7 @@ data:
473
533
  functionRef:
474
534
  name: function-pythonic
475
535
  input:
476
- apiVersion: pythonic.fn.fortra.com/v1alpha1
536
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
477
537
  kind: Composite
478
538
  composite: example.pythonic.features.FeatureOneComposite
479
539
  ...
@@ -487,7 +547,7 @@ kind: Function
487
547
  metadata:
488
548
  name: function-pythonic
489
549
  spec:
490
- package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.1.5
550
+ package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.2.1
491
551
  runtimeConfigRef:
492
552
  name: function-pythonic
493
553
  ---
@@ -580,7 +640,7 @@ data:
580
640
  functionRef:
581
641
  name: function-pythonic
582
642
  input:
583
- apiVersion: pythonic.fn.fortra.com/v1alpha1
643
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
584
644
  kind: Composite
585
645
  parameters:
586
646
  who: World
@@ -1,27 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: crossplane-function-pythonic
3
- Version: 0.1.5
4
- Summary: A Python centric Crossplane Function
5
- Project-URL: Documentation, https://github.com/fortra/function-pythonic#readme
6
- Project-URL: Issues, https://github.com/fortra/function-pythonic/issues
7
- Project-URL: Source, https://github.com/fortra/function-pythonic
8
- Author-email: Patrick J McNerthney <pat@mcnerthney.com>
9
- License-Expression: Apache-2.0
10
- License-File: LICENSE
11
- Classifier: Development Status :: 4 - Beta
12
- Classifier: Programming Language :: Python
13
- Classifier: Programming Language :: Python :: 3.12
14
- Classifier: Programming Language :: Python :: 3.13
15
- Classifier: Programming Language :: Python :: 3.14
16
- Requires-Python: <3.15,>=3.12
17
- Requires-Dist: crossplane-function-sdk-python==0.10.0
18
- Requires-Dist: pyyaml==6.0.3
19
- Provides-Extra: packages
20
- Requires-Dist: kopf==1.39.0; extra == 'packages'
21
- Provides-Extra: pip-install
22
- Requires-Dist: pip==25.3; extra == 'pip-install'
23
- Description-Content-Type: text/markdown
24
-
25
1
  # function-pythonic
26
2
 
27
3
  ## Introduction
@@ -45,11 +21,11 @@ spec:
45
21
  kind: XR
46
22
  mode: Pipeline
47
23
  pipeline:
48
- - step:
24
+ - step:
49
25
  functionRef:
50
26
  name: function-pythonic
51
27
  input:
52
- apiVersion: pythonic.fn.fortra.com/v1alpha1
28
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
53
29
  kind: Composite
54
30
  composite: |
55
31
  class VpcComposite(BaseComposite):
@@ -81,7 +57,7 @@ kind: Function
81
57
  metadata:
82
58
  name: function-pythonic
83
59
  spec:
84
- package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.1.5
60
+ package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.2.1
85
61
  ```
86
62
  ## Composed Resource Dependencies
87
63
 
@@ -227,9 +203,10 @@ The BaseComposite class provides the following fields for manipulating the Compo
227
203
  | self.spec | Map | The composite observed spec |
228
204
  | self.status | Map | The composite desired and observed status, read from observed if not in desired |
229
205
  | self.conditions | Conditions | The composite desired and observed conditions, read from observed if not in desired |
230
- | self.events | Events | Returned events against the Composite and optionally on the Claim |
231
- | self.connection | Connection | The composite desired and observed connection detials, read from observed if not in desired |
206
+ | self.results | Results | Returned results applied to the Composite and optionally on the Claim |
207
+ | self.connection | Map | The composite desired connection detials |
232
208
  | self.ready | Boolean | The composite desired ready state |
209
+ | self.observed.connection | Map | The composite observed connection detials |
233
210
 
234
211
  The BaseComposite also provides access to the following Crossplane Function level features:
235
212
 
@@ -270,7 +247,7 @@ Resource class:
270
247
  | Resource.data | Map | The resource data |
271
248
  | Resource.status | Map | The resource status |
272
249
  | Resource.conditions | Conditions | The resource conditions |
273
- | Resource.connection | Connection | The resource connection details |
250
+ | Resource.connection | Map | The resource observed connection details |
274
251
  | Resource.ready | Boolean | The resource ready state |
275
252
  | Resource.unknownsFatal | Boolean | Terminate the composition if this resource has been created and is assigned unknown values, default is Composite.unknownsFatal |
276
253
  | Resource.usages | Boolean | Generate Crossplane Usages for this resource, default is Composite.autoReady |
@@ -310,6 +287,7 @@ Each resource in the list is the following RequiredResource class:
310
287
  | RequiredResource.data | Map | The required resource data |
311
288
  | RequiredResource.status | Map | The required resource status |
312
289
  | RequiredResource.conditions | Map | The required resource conditions |
290
+ | RequiredResource.connection | Map | The required resource connection details |
313
291
 
314
292
  ### Conditions
315
293
 
@@ -326,19 +304,19 @@ The fields are read only for `Resource.conditions` and `RequiredResource.conditi
326
304
  | Condition.lastTransitionTime | Timestamp | Last transition time, read only |
327
305
  | Condition.claim | Boolean | Also apply the condition the claim |
328
306
 
329
- ### Events
307
+ ### Results
330
308
 
331
- The `BaseComposite.events` field is a list of events to apply to the Composite and
309
+ The `BaseComposite.results` field is a list of results to apply to the Composite and
332
310
  optionally to the Claim.
333
311
 
334
312
  | Field | Type | Description |
335
313
  | ----- | ---- | ----------- |
336
- | Event.info | Boolean | Normal informational event |
337
- | Event.warning | Boolean | Warning level event |
338
- | Event.fatal | Boolean | Fatal events also terminate composing the Composite |
339
- | Event.reason | String | PascalCase, machine-readable reason for this event |
340
- | Event.message | String | Human-readable details about the event |
341
- | Event.claim | Boolean | Also apply the event to the claim |
314
+ | Result.info | Boolean | Normal informational result |
315
+ | Result.warning | Boolean | Warning level result |
316
+ | Result.fatal | Boolean | Fatal results also terminate composing the Composite |
317
+ | Result.reason | String | PascalCase, machine-readable reason for this result |
318
+ | Result.message | String | Human-readable details about the result |
319
+ | Result.claim | Boolean | Also apply the result to the claim |
342
320
 
343
321
  ## Single use Composites
344
322
 
@@ -348,7 +326,7 @@ just to run that Composition once in a single use or initialize task?
348
326
  function-pythonic installs a `Composite` CompositeResourceDefinition that enables
349
327
  creating such tasks using a single Composite resource:
350
328
  ```yaml
351
- apiVersion: pythonic.fortra.com/v1alpha1
329
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
352
330
  kind: Composite
353
331
  metadata:
354
332
  name: composite-example
@@ -361,16 +339,62 @@ spec:
361
339
 
362
340
  ## Quick Start Development
363
341
 
364
- The following example demonstrates how to locally render function-python
365
- compositions. First, install the `crossplane-function-pythonic` python
366
- package into the python environment:
342
+ function-pythonic includes a pure python implementation of the `crossplane render ...`
343
+ command, which can be used to render Compositions that only use function-pythonic. This
344
+ makes it very easy to test and debug using your IDE of choice. It is also blindingly
345
+ fast compared to `crossplane render`. To use, install the `crossplane-function-pythonic`
346
+ python package into the python environment.
367
347
  ```shell
368
348
  $ pip install crossplane-function-pythonic
369
349
  ```
370
- Next, create the following files:
350
+ Then to render function-pythonic Compositions, use the `function-pythonic render ...`
351
+ command.
352
+ ```shell
353
+ $ function-pythonic render -h
354
+ usage: Crossplane Function Pythonic render [-h] [--debug] [--log-name-width WIDTH] [--python-path DIRECTORY] [--render-unknowns]
355
+ [--allow-oversize-protos] [--context-files KEY=PATH] [--context-values KEY=VALUE]
356
+ [--observed-resources PATH] [--required-resources PATH] [--secret-store PATH] [--include-full-xr]
357
+ [--include-connection-xr] [--include-function-results] [--include-context]
358
+ PATH [PATH/CLASS]
359
+
360
+ positional arguments:
361
+ PATH A YAML file containing the Composite resource to render.
362
+ PATH/CLASS A YAML file containing the Composition resource or the complete path of a function=-pythonic BaseComposite subclass.
363
+
364
+ options:
365
+ -h, --help show this help message and exit
366
+ --debug, -d Emit debug logs.
367
+ --log-name-width WIDTH
368
+ Width of the logger name in the log output, default 40.
369
+ --python-path DIRECTORY
370
+ Filing system directories to add to the python path.
371
+ --render-unknowns, -u
372
+ Render resources with unknowns, useful during local development.
373
+ --allow-oversize-protos
374
+ Allow oversized protobuf messages
375
+ --context-files KEY=PATH
376
+ Context key-value pairs to pass to the Function pipeline. Values must be files containing YAML/JSON.
377
+ --context-values KEY=VALUE
378
+ Context key-value pairs to pass to the Function pipeline. Values must be YAML/JSON. Keys take precedence over --context-files.
379
+ --observed-resources, -o PATH
380
+ A YAML file or directory of YAML files specifying the observed state of composed resources.
381
+ --required-resources, -e PATH
382
+ A YAML file or directory of YAML files specifying required resources to pass to the Function pipeline.
383
+ --secret-store, -s PATH
384
+ A YAML file or directory of YAML files specifying Secrets to use to resolve connections and credentials.
385
+ --include-full-xr, -x
386
+ Include a direct copy of the input XR's spedc and metadata fields in the rendered output.
387
+ --include-connection-xr
388
+ Include the Composite connection values in the rendered output as a resource of kind: Connection.
389
+ --include-function-results, -r
390
+ Include informational and warning messages from Functions in the rendered output as resources of kind: Result..
391
+ --include-context, -c
392
+ Include the context in the rendered output as a resource of kind: Context.
393
+ ```
394
+ The following example demonstrates how to locally render function-python compositions. First, create the following files:
371
395
  #### xr.yaml
372
396
  ```yaml
373
- apiVersion: pythonic.fortra.com/v1alpha1
397
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
374
398
  kind: Hello
375
399
  metadata:
376
400
  name: world
@@ -382,10 +406,10 @@ spec:
382
406
  apiVersion: apiextensions.crossplane.io/v1
383
407
  kind: Composition
384
408
  metadata:
385
- name: hellos.pythonic.fortra.com
409
+ name: hellos.pythonic.crossplane.io
386
410
  spec:
387
411
  compositeTypeRef:
388
- apiVersion: pythonic.fortra.com/v1alpha1
412
+ apiVersion: pythonic.crossplane.io/v1alpha1
389
413
  kind: Hello
390
414
  mode: Pipeline
391
415
  pipeline:
@@ -393,50 +417,38 @@ spec:
393
417
  functionRef:
394
418
  name: function-pythonic
395
419
  input:
396
- apiVersion: pythonic.fn.fortra.com/v1alpha1
420
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
397
421
  kind: Composite
398
422
  composite: |
399
423
  class GreetingComposite(BaseComposite):
400
424
  def compose(self):
401
425
  self.status.greeting = f"Hello, {self.spec.who}!"
402
426
  ```
403
- #### functions.yaml
404
- ```yaml
405
- apiVersion: pkg.crossplane.io/v1beta1
406
- kind: Function
407
- metadata:
408
- name: function-pythonic
409
- annotations:
410
- render.crossplane.io/runtime: Development
411
- spec:
412
- package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.1.5
413
- ```
414
- In one terminal session, run function-pythonic:
415
- ```shell
416
- $ function-pythonic --insecure --debug --render-unknowns
417
- [2025-08-21 15:32:37.966] grpc._cython.cygrpc [DEBUG ] Using AsyncIOEngine.POLLER as I/O engine
418
- ```
419
- In another terminal session, render the Composite:
427
+ Then, to render the above composite and composition, run:
420
428
  ```shell
421
- $ crossplane render xr.yaml composition.yaml functions.yaml
429
+ $ function-pythonic render --debug --render-unknowns xr.yaml composition.yaml
430
+ [2025-12-29 09:44:57.949] io.crossplane.fn.pythonic.Hello.world [DEBUG ] Starting compose, 1st step, 1st pass
431
+ [2025-12-29 09:44:57.949] io.crossplane.fn.pythonic.Hello.world [INFO ] Completed compose
422
432
  ---
423
- apiVersion: pythonic.fortra.com/v1alpha1
433
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
424
434
  kind: Hello
425
435
  metadata:
426
436
  name: world
427
437
  status:
428
438
  conditions:
429
- - lastTransitionTime: "2024-01-01T00:00:00Z"
439
+ - lastTransitionTime: '2026-01-01T00:00:00Z'
430
440
  reason: Available
431
- status: "True"
441
+ status: 'True'
432
442
  type: Ready
433
- - lastTransitionTime: "2024-01-01T00:00:00Z"
443
+ - lastTransitionTime: '2026-01-01T00:00:00Z'
434
444
  message: All resources are composed
435
445
  reason: AllComposed
436
- status: "True"
446
+ status: 'True'
437
447
  type: ResourcesComposed
438
448
  greeting: Hello, World!
439
449
  ```
450
+ Most of the examples contain a `render.sh` command which uses `function-pythonic render` to
451
+ render the example.
440
452
 
441
453
  ## ConfigMap Packages
442
454
 
@@ -465,7 +477,7 @@ Then, in your Composition:
465
477
  functionRef:
466
478
  name: function-pythonic
467
479
  input:
468
- apiVersion: pythonic.fn.fortra.com/v1alpha1
480
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
469
481
  kind: Composite
470
482
  composite: |
471
483
  from example.pythonic import features
@@ -497,7 +509,7 @@ data:
497
509
  functionRef:
498
510
  name: function-pythonic
499
511
  input:
500
- apiVersion: pythonic.fn.fortra.com/v1alpha1
512
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
501
513
  kind: Composite
502
514
  composite: example.pythonic.features.FeatureOneComposite
503
515
  ...
@@ -511,7 +523,7 @@ kind: Function
511
523
  metadata:
512
524
  name: function-pythonic
513
525
  spec:
514
- package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.1.5
526
+ package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.2.1
515
527
  runtimeConfigRef:
516
528
  name: function-pythonic
517
529
  ---
@@ -604,7 +616,7 @@ data:
604
616
  functionRef:
605
617
  name: function-pythonic
606
618
  input:
607
- apiVersion: pythonic.fn.fortra.com/v1alpha1
619
+ apiVersion: pythonic.fn.crossplane.io/v1alpha1
608
620
  kind: Composite
609
621
  parameters:
610
622
  who: World
@@ -0,0 +1,2 @@
1
+ # This is set at build time, using "hatch version"
2
+ __version__ = "0.2.1"
@@ -0,0 +1,2 @@
1
+ from . import main
2
+ main.main()