crossplane-function-pythonic 0.2.1__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/.gitignore +1 -0
  2. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/PKG-INFO +38 -6
  3. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/README.md +36 -4
  4. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/crossplane/pythonic/__about__.py +1 -1
  5. crossplane_function_pythonic-0.3.0/crossplane/pythonic/auto_ready.py +153 -0
  6. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/crossplane/pythonic/command.py +5 -0
  7. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/crossplane/pythonic/composite.py +244 -64
  8. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/crossplane/pythonic/function.py +33 -23
  9. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/crossplane/pythonic/grpc.py +1 -1
  10. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/crossplane/pythonic/protobuf.py +26 -3
  11. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/crossplane/pythonic/render.py +2 -2
  12. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/.dev/functions.yaml +1 -1
  13. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/aks-cluster/cluster-function-pythonic.yaml +1 -1
  14. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/aks-cluster/functions.yaml +1 -1
  15. crossplane_function_pythonic-0.3.0/examples/connection-details-composition/access-keys.yaml +30 -0
  16. crossplane_function_pythonic-0.3.0/examples/connection-details-composition/composition.yaml +30 -0
  17. crossplane_function_pythonic-0.3.0/examples/connection-details-composition/definition.yaml +26 -0
  18. {crossplane_function_pythonic-0.2.1/examples/function-sequencer → crossplane_function_pythonic-0.3.0/examples/connection-details-composition}/functions.yaml +1 -1
  19. crossplane_function_pythonic-0.3.0/examples/connection-details-composition/render.sh +8 -0
  20. crossplane_function_pythonic-0.3.0/examples/connection-details-composition/secrets.yaml +18 -0
  21. crossplane_function_pythonic-0.3.0/examples/connection-details-composition/user.yaml +18 -0
  22. crossplane_function_pythonic-0.3.0/examples/connection-details-composition/xr.yaml +8 -0
  23. {crossplane_function_pythonic-0.2.1/examples/import-existing-vpc → crossplane_function_pythonic-0.3.0/examples/eks-cluster}/functions.yaml +1 -1
  24. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/filing-system/function.yaml +1 -1
  25. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/conditions/functions.yaml +1 -1
  26. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/context/functions.yaml +1 -1
  27. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/context/render.sh +1 -1
  28. {crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/getComposedResource → crossplane_function_pythonic-0.3.0/examples/function-go-templating/functions/fromYaml}/functions.yaml +1 -1
  29. {crossplane_function_pythonic-0.2.1/examples/function-go-templating/extra-resources → crossplane_function_pythonic-0.3.0/examples/function-go-templating/functions/getComposedResource}/functions.yaml +1 -1
  30. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/getCompositeResource/functions.yaml +1 -1
  31. {crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/fromYaml → crossplane_function_pythonic-0.3.0/examples/function-go-templating/functions/getCredentialData}/functions.yaml +1 -1
  32. crossplane_function_pythonic-0.3.0/examples/function-go-templating/functions/getResourceCondition/functions.yaml +9 -0
  33. crossplane_function_pythonic-0.3.0/examples/function-go-templating/functions/include/functions.yaml +9 -0
  34. crossplane_function_pythonic-0.3.0/examples/function-go-templating/functions/toYaml/functions.yaml +9 -0
  35. crossplane_function_pythonic-0.3.0/examples/function-go-templating/inline/functions.yaml +9 -0
  36. crossplane_function_pythonic-0.3.0/examples/function-go-templating/recursive/functions.yaml +9 -0
  37. crossplane_function_pythonic-0.3.0/examples/function-go-templating/required-resources/functions.yaml +9 -0
  38. {crossplane_function_pythonic-0.2.1/examples/function-go-templating/extra-resources → crossplane_function_pythonic-0.3.0/examples/function-go-templating/required-resources}/render.sh +1 -1
  39. {crossplane_function_pythonic-0.2.1/examples/helm-copy-secret → crossplane_function_pythonic-0.3.0/examples/function-sequencer}/functions.yaml +1 -1
  40. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/get-started-app/composition.yaml +0 -2
  41. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/get-started-app/definition.yaml +1 -1
  42. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/get-started-app/functions.yaml +1 -1
  43. crossplane_function_pythonic-0.3.0/examples/get-started-app/render.sh +4 -0
  44. {crossplane_function_pythonic-0.2.1/examples/single-purpose → crossplane_function_pythonic-0.3.0/examples/helm-copy-secret}/functions.yaml +1 -1
  45. {crossplane_function_pythonic-0.2.1/examples/eks-cluster → crossplane_function_pythonic-0.3.0/examples/import-existing-vpc}/functions.yaml +1 -1
  46. crossplane_function_pythonic-0.3.0/examples/single-purpose/functions.yaml +8 -0
  47. crossplane_function_pythonic-0.3.0/examples/usages-extra/functions.yaml +9 -0
  48. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/usages-extra/render.sh +1 -1
  49. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/pyproject.toml +1 -1
  50. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/getCredentialData/functions.yaml +0 -9
  51. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/getResourceCondition/functions.yaml +0 -9
  52. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/include/functions.yaml +0 -9
  53. crossplane_function_pythonic-0.2.1/examples/function-go-templating/functions/toYaml/functions.yaml +0 -9
  54. crossplane_function_pythonic-0.2.1/examples/function-go-templating/inline/functions.yaml +0 -9
  55. crossplane_function_pythonic-0.2.1/examples/function-go-templating/recursive/functions.yaml +0 -9
  56. crossplane_function_pythonic-0.2.1/examples/get-started-app/render.sh +0 -4
  57. crossplane_function_pythonic-0.2.1/examples/usages-extra/functions.yaml +0 -9
  58. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/LICENSE +0 -0
  59. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/crossplane/pythonic/__init__.py +0 -0
  60. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/crossplane/pythonic/__main__.py +0 -0
  61. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/crossplane/pythonic/main.py +0 -0
  62. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/crossplane/pythonic/packages.py +0 -0
  63. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/crossplane/pythonic/version.py +0 -0
  64. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/aks-cluster/README.md +0 -0
  65. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/aks-cluster/aks/kubernetescluster.py +0 -0
  66. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/aks-cluster/aks/resourcegroup.py +0 -0
  67. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/aks-cluster/composition.yaml +0 -0
  68. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/aks-cluster/definition.yaml +0 -0
  69. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/aks-cluster/install.sh +0 -0
  70. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/aks-cluster/kustomization.yaml +0 -0
  71. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/aks-cluster/providers.yaml +0 -0
  72. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/aks-cluster/render.sh +0 -0
  73. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/aks-cluster/xr.yaml +0 -0
  74. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/connections/composite-connection.yaml +0 -0
  75. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/connections/composition.yaml +0 -0
  76. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/connections/rds-connection.yaml +0 -0
  77. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/connections/rds-observed.yaml +0 -0
  78. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/connections/render.sh +0 -0
  79. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/connections/step-credential.yaml +0 -0
  80. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/connections/xr.yaml +0 -0
  81. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/eks-cluster/composition-v2.yaml +0 -0
  82. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/eks-cluster/composition.yaml +0 -0
  83. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/eks-cluster/definition.yaml +0 -0
  84. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/eks-cluster/render-v2.sh +0 -0
  85. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/eks-cluster/render.sh +0 -0
  86. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/eks-cluster/xr.yaml +0 -0
  87. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/filing-system/README.md +0 -0
  88. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/filing-system/composition.yaml +0 -0
  89. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/filing-system/definition.yaml +0 -0
  90. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/filing-system/kustomization.yaml +0 -0
  91. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/filing-system/runtime.yaml +0 -0
  92. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/filing-system/vcluster.py +0 -0
  93. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/filing-system/vcluster.yaml +0 -0
  94. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/conditions/composition.yaml +0 -0
  95. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/conditions/render.sh +0 -0
  96. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/conditions/xr.yaml +0 -0
  97. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/conditions/xrd.yaml +0 -0
  98. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/context/composition.yaml +0 -0
  99. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/context/environmentConfigs.yaml +0 -0
  100. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/context/xr.yaml +0 -0
  101. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/context/xrd.yaml +0 -0
  102. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/fromYaml/composition.yaml +0 -0
  103. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/fromYaml/render.sh +0 -0
  104. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/fromYaml/xr.yaml +0 -0
  105. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/getComposedResource/composition.yaml +0 -0
  106. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/getComposedResource/observed.yaml +0 -0
  107. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/getComposedResource/render.sh +0 -0
  108. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/getComposedResource/xr.yaml +0 -0
  109. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/getCompositeResource/composition.yaml +0 -0
  110. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/getCompositeResource/render.sh +0 -0
  111. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/getCompositeResource/xr.yaml +0 -0
  112. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/getCredentialData/composition.yaml +0 -0
  113. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/getCredentialData/credentials.yaml +0 -0
  114. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/getCredentialData/render.sh +0 -0
  115. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/getCredentialData/xr.yaml +0 -0
  116. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/getResourceCondition/composition.yaml +0 -0
  117. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/getResourceCondition/observed.yaml +0 -0
  118. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/getResourceCondition/render.sh +0 -0
  119. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/getResourceCondition/xr.yaml +0 -0
  120. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/include/composition.yaml +0 -0
  121. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/include/render.sh +0 -0
  122. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/include/xr.yaml +0 -0
  123. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/toYaml/composition.yaml +0 -0
  124. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/toYaml/render.sh +0 -0
  125. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/functions/toYaml/xr.yaml +0 -0
  126. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/inline/composition.yaml +0 -0
  127. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/inline/render.sh +0 -0
  128. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/inline/xr.yaml +0 -0
  129. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/recursive/composition-real.yaml +0 -0
  130. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/recursive/composition-wrapper.yaml +0 -0
  131. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/recursive/render.sh +0 -0
  132. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-go-templating/recursive/xr.yaml +0 -0
  133. {crossplane_function_pythonic-0.2.1/examples/function-go-templating/extra-resources → crossplane_function_pythonic-0.3.0/examples/function-go-templating/required-resources}/composition.yaml +0 -0
  134. /crossplane_function_pythonic-0.2.1/examples/function-go-templating/extra-resources/extraResources.yaml → /crossplane_function_pythonic-0.3.0/examples/function-go-templating/required-resources/required-resources.yaml +0 -0
  135. {crossplane_function_pythonic-0.2.1/examples/function-go-templating/extra-resources → crossplane_function_pythonic-0.3.0/examples/function-go-templating/required-resources}/xr.yaml +0 -0
  136. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-sequencer/composition.yaml +0 -0
  137. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-sequencer/observed.yaml +0 -0
  138. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-sequencer/render.sh +0 -0
  139. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-sequencer/sequencer.py +0 -0
  140. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/function-sequencer/xr.yaml +0 -0
  141. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/get-started-app/xr.yaml +0 -0
  142. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/helm-copy-secret/composition.yaml +0 -0
  143. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/helm-copy-secret/kustomization.yaml +0 -0
  144. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/helm-copy-secret/render.sh +0 -0
  145. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/helm-copy-secret/run-function.sh +0 -0
  146. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/helm-copy-secret/vcluster.py +0 -0
  147. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/helm-copy-secret/xr.yaml +0 -0
  148. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/helm-copy-secret/xrd.yaml +0 -0
  149. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/import-existing-vpc/README.md +0 -0
  150. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/import-existing-vpc/composition.yaml +0 -0
  151. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/import-existing-vpc/definition.yaml +0 -0
  152. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/import-existing-vpc/observed.yaml +0 -0
  153. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/import-existing-vpc/provider-ec2.yaml +0 -0
  154. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/import-existing-vpc/render.sh +0 -0
  155. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/import-existing-vpc/xr.yaml +0 -0
  156. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/single-purpose/render.sh +0 -0
  157. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/single-purpose/xr.yaml +0 -0
  158. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/usages-extra/composition.yaml +0 -0
  159. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/usages-extra/extraResources.yaml +0 -0
  160. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/usages-extra/observedResources.yaml +0 -0
  161. {crossplane_function_pythonic-0.2.1 → crossplane_function_pythonic-0.3.0}/examples/usages-extra/xr.yaml +0 -0
@@ -215,3 +215,4 @@ crossplane/pythonic/__version__.py
215
215
  pocs/
216
216
  pythonic-packages/
217
217
  tests/protobuf/pytest_pb2*
218
+ scripts/.aws-credentials
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crossplane-function-pythonic
3
- Version: 0.2.1
3
+ Version: 0.3.0
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
@@ -17,7 +17,7 @@ Requires-Python: <3.15,>=3.12
17
17
  Requires-Dist: crossplane-function-sdk-python==0.10.0
18
18
  Requires-Dist: pyyaml==6.0.3
19
19
  Provides-Extra: packages
20
- Requires-Dist: kopf==1.39.1; extra == 'packages'
20
+ Requires-Dist: kopf==1.40.0; extra == 'packages'
21
21
  Provides-Extra: pip-install
22
22
  Requires-Dist: pip==25.3; extra == 'pip-install'
23
23
  Description-Content-Type: text/markdown
@@ -81,8 +81,39 @@ kind: Function
81
81
  metadata:
82
82
  name: function-pythonic
83
83
  spec:
84
- package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.2.1
84
+ package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.3.0
85
85
  ```
86
+
87
+ ### Crossplane V1
88
+ When running function-pythonic in Crossplane V1, the `--crossplane-v1` command line
89
+ option should be specified. This requires using a Crossplane DeploymentRuntimeConfig.
90
+ ```yaml
91
+ apiVersion: pkg.crossplane.io/v1
92
+ kind: Function
93
+ metadata:
94
+ name: function-pythonic
95
+ spec:
96
+ package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.3.0
97
+ runtimeConfigRef:
98
+ name: function-pythonic
99
+ --
100
+ apiVersion: pkg.crossplane.io/v1beta1
101
+ kind: DeploymentRuntimeConfig
102
+ metadata:
103
+ name: function-pythonic
104
+ spec:
105
+ deploymentTemplate:
106
+ spec:
107
+ selector: {}
108
+ template:
109
+ spec:
110
+ containers:
111
+ - name: package-runtime
112
+ args:
113
+ - --debug
114
+ - --crossplane-v1
115
+ ```
116
+
86
117
  ## Composed Resource Dependencies
87
118
 
88
119
  function-pythonic automatically handles dependencies between composed resources.
@@ -228,9 +259,10 @@ The BaseComposite class provides the following fields for manipulating the Compo
228
259
  | self.status | Map | The composite desired and observed status, read from observed if not in desired |
229
260
  | self.conditions | Conditions | The composite desired and observed conditions, read from observed if not in desired |
230
261
  | self.results | Results | Returned results applied to the Composite and optionally on the Claim |
262
+ | self.connectionSecret | Map | The name, namespace, and resourceName to use when generating the connection secret in Crossplane v2 |
231
263
  | self.connection | Map | The composite desired connection detials |
264
+ | self.connection.observed | Map | The composite observed connection detials |
232
265
  | self.ready | Boolean | The composite desired ready state |
233
- | self.observed.connection | Map | The composite observed connection detials |
234
266
 
235
267
  The BaseComposite also provides access to the following Crossplane Function level features:
236
268
 
@@ -277,7 +309,7 @@ Resource class:
277
309
  | Resource.usages | Boolean | Generate Crossplane Usages for this resource, default is Composite.autoReady |
278
310
  | Resource.autoReady | Boolean | Perform auto ready processing on this resource, default is Composite.autoReady |
279
311
 
280
- ### Required Resources (AKA Extra Resources)
312
+ ### Required Resources
281
313
 
282
314
  Creating and accessing required resources is performed using the `BaseComposite.requireds` field.
283
315
  `BaseComposite.requireds` is a dictionary of the required resources whose key is the required
@@ -547,7 +579,7 @@ kind: Function
547
579
  metadata:
548
580
  name: function-pythonic
549
581
  spec:
550
- package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.2.1
582
+ package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.3.0
551
583
  runtimeConfigRef:
552
584
  name: function-pythonic
553
585
  ---
@@ -57,8 +57,39 @@ kind: Function
57
57
  metadata:
58
58
  name: function-pythonic
59
59
  spec:
60
- package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.2.1
60
+ package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.3.0
61
61
  ```
62
+
63
+ ### Crossplane V1
64
+ When running function-pythonic in Crossplane V1, the `--crossplane-v1` command line
65
+ option should be specified. This requires using a Crossplane DeploymentRuntimeConfig.
66
+ ```yaml
67
+ apiVersion: pkg.crossplane.io/v1
68
+ kind: Function
69
+ metadata:
70
+ name: function-pythonic
71
+ spec:
72
+ package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.3.0
73
+ runtimeConfigRef:
74
+ name: function-pythonic
75
+ --
76
+ apiVersion: pkg.crossplane.io/v1beta1
77
+ kind: DeploymentRuntimeConfig
78
+ metadata:
79
+ name: function-pythonic
80
+ spec:
81
+ deploymentTemplate:
82
+ spec:
83
+ selector: {}
84
+ template:
85
+ spec:
86
+ containers:
87
+ - name: package-runtime
88
+ args:
89
+ - --debug
90
+ - --crossplane-v1
91
+ ```
92
+
62
93
  ## Composed Resource Dependencies
63
94
 
64
95
  function-pythonic automatically handles dependencies between composed resources.
@@ -204,9 +235,10 @@ The BaseComposite class provides the following fields for manipulating the Compo
204
235
  | self.status | Map | The composite desired and observed status, read from observed if not in desired |
205
236
  | self.conditions | Conditions | The composite desired and observed conditions, read from observed if not in desired |
206
237
  | self.results | Results | Returned results applied to the Composite and optionally on the Claim |
238
+ | self.connectionSecret | Map | The name, namespace, and resourceName to use when generating the connection secret in Crossplane v2 |
207
239
  | self.connection | Map | The composite desired connection detials |
240
+ | self.connection.observed | Map | The composite observed connection detials |
208
241
  | self.ready | Boolean | The composite desired ready state |
209
- | self.observed.connection | Map | The composite observed connection detials |
210
242
 
211
243
  The BaseComposite also provides access to the following Crossplane Function level features:
212
244
 
@@ -253,7 +285,7 @@ Resource class:
253
285
  | Resource.usages | Boolean | Generate Crossplane Usages for this resource, default is Composite.autoReady |
254
286
  | Resource.autoReady | Boolean | Perform auto ready processing on this resource, default is Composite.autoReady |
255
287
 
256
- ### Required Resources (AKA Extra Resources)
288
+ ### Required Resources
257
289
 
258
290
  Creating and accessing required resources is performed using the `BaseComposite.requireds` field.
259
291
  `BaseComposite.requireds` is a dictionary of the required resources whose key is the required
@@ -523,7 +555,7 @@ kind: Function
523
555
  metadata:
524
556
  name: function-pythonic
525
557
  spec:
526
- package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.2.1
558
+ package: xpkg.upbound.io/crossplane-contrib/function-pythonic:v0.3.0
527
559
  runtimeConfigRef:
528
560
  name: function-pythonic
529
561
  ---
@@ -1,2 +1,2 @@
1
1
  # This is set at build time, using "hatch version"
2
- __version__ = "0.2.1"
2
+ __version__ = "0.3.0"
@@ -0,0 +1,153 @@
1
+
2
+
3
+ def process(composite):
4
+ for name, resource in composite.resources:
5
+ if resource.observed:
6
+ if resource.autoReady or (resource.autoReady is None and composite.autoReady):
7
+ if resource.ready is None:
8
+ if _checks.get((resource.apiVersion, resource.kind), _check_default).ready(resource):
9
+ resource.ready = True
10
+
11
+
12
+ class ConditionReady:
13
+ def ready(self, resource):
14
+ return bool(resource.conditions.Ready.status)
15
+
16
+ _checks = {}
17
+ _check_default = ConditionReady()
18
+
19
+ class Check:
20
+ @classmethod
21
+ def __init_subclass__(cls, **kwargs):
22
+ super().__init_subclass__(**kwargs)
23
+ if hasattr(cls, 'apiVersion'):
24
+ _checks[(cls.apiVersion, cls.__name__)] = cls()
25
+
26
+ def ready(self, resource):
27
+ raise NotImplementedError()
28
+
29
+ class AlwaysReady(Check):
30
+ def ready(self, resource):
31
+ return True
32
+
33
+
34
+ class ClusterRole(AlwaysReady):
35
+ apiVersion = 'rbac.authorization.k8s.io/v1'
36
+
37
+ class ClusterRoleBinding(AlwaysReady):
38
+ apiVersion = 'rbac.authorization.k8s.io/v1'
39
+
40
+ class ConfigMap(AlwaysReady):
41
+ apiVersion = 'v1'
42
+
43
+ class CronJob(Check):
44
+ apiVersion = 'batch/v1'
45
+ def ready(self, resource):
46
+ if resource.observed.spec.suspend and len(resource.observed.spec.suspend):
47
+ return True
48
+ if not resource.status.lastScheduleTime:
49
+ return False
50
+ if resource.status.active:
51
+ return True
52
+ if not resource.status.lastSuccessfulTime:
53
+ return False
54
+ return str(resource.status.lastSuccessfulTime) >= str(resource.status.lastScheduleTime)
55
+
56
+ class DaemonSet(Check):
57
+ apiVersion = 'apps/v1'
58
+ def ready(self, resource):
59
+ if not resource.status.desiredNumberScheduled:
60
+ return False
61
+ scheduled = resource.status.desiredNumberScheduled
62
+ return (scheduled == resource.status.numberReady and
63
+ scheduled == resource.status.updatedNumberScheduled and
64
+ scheduled == resource.status.numberAvailable
65
+ )
66
+
67
+ class Deployment(Check):
68
+ apiVersion = 'apps/v1'
69
+ def ready(self, resource):
70
+ replicas = resource.observed.spec.replicas or 1
71
+ if resource.status.updatedReplicas != replicas or resource.status.availableReplicas != replicas:
72
+ return False
73
+ return bool(resource.conditions.Available.status)
74
+
75
+ class HorizontalPodAutoscaler(Check):
76
+ apiVersion = 'autoscaling/v2'
77
+ def ready(self, resource):
78
+ for type in ('FailedGetScale', 'FailedUpdateScale', 'FailedGetResourceMetric', 'InvalidSelector'):
79
+ if resource.conditions[type].status:
80
+ return False
81
+ for type in ('ScalingActive', 'ScalingLimited'):
82
+ if resource.conditions[type].status:
83
+ return True
84
+ return False
85
+
86
+ class Ingress(Check):
87
+ apiVersion = 'networking.k8s.io/v1'
88
+ def ready(self, resource):
89
+ return len(resource.status.loadBalancer.ingress) > 0
90
+
91
+ class Job(Check):
92
+ apiVersion = 'batch/v1'
93
+ def ready(self, resource):
94
+ for type in ('Failed', 'Suspended'):
95
+ if resource.conditions[type].status:
96
+ return False
97
+ return bool(resource.conditions.Complete.status)
98
+
99
+ class Namespace(AlwaysReady):
100
+ apiVersion = 'v1'
101
+
102
+ class PersistentVolumeClaim(Check):
103
+ apiVersion = 'v1'
104
+ def ready(self, resource):
105
+ return resource.status.phase == 'Bound'
106
+
107
+ class Pod(Check):
108
+ apiVersion = 'v1'
109
+ def ready(self, resource):
110
+ if resource.status.phase == 'Succeeded':
111
+ return True
112
+ if resource.status.phase == 'Running':
113
+ if resource.observed.spec.restartPolicy == 'Always':
114
+ if resource.conditions.Ready.status:
115
+ return True
116
+ return False
117
+
118
+ class ReplicaSet(Check):
119
+ apiVersion = 'v1'
120
+ def ready(self, resource):
121
+ if int(resource.status.observedGeneration) < int(resource.observed.metadata.generation):
122
+ return False
123
+ if resource.conditions.ReplicaFailure.status:
124
+ return False
125
+ return int(resource.status.availableReplicas) >= int(resource.observed.spec.replicas or 1)
126
+
127
+ class Role(AlwaysReady):
128
+ apiVersion = 'rbac.authorization.k8s.io/v1'
129
+
130
+ class RoleBinding(AlwaysReady):
131
+ apiVersion = 'rbac.authorization.k8s.io/v1'
132
+
133
+ class Secret(AlwaysReady):
134
+ apiVersion = 'v1'
135
+
136
+ class Service(Check):
137
+ apiVersion = 'v1'
138
+ def ready(self, resource):
139
+ if resource.observed.spec.type != 'LoadBalancer':
140
+ return True
141
+ return len(resource.status.loadBalancer.ingress) > 0
142
+
143
+ class ServiceAccount(AlwaysReady):
144
+ apiVersion = 'v1'
145
+
146
+ class StatefulSet(Check):
147
+ apiVersion = 'apps/v1'
148
+ def ready(self, resource):
149
+ replicas = resource.observed.spec.replicas or 1
150
+ return (resource.status.readyReplicas == replicas and
151
+ resource.status.currentReplicas == replicas and
152
+ resource.status.currentRevision == resource.status.updateRevision
153
+ )
@@ -50,6 +50,11 @@ class Command:
50
50
  action='store_true',
51
51
  help='Allow oversized protobuf messages',
52
52
  )
53
+ parser.add_argument(
54
+ '--crossplane-v1',
55
+ action='store_true',
56
+ help='Enable Crossplane V1 compatibility mode',
57
+ )
53
58
 
54
59
  def __init__(self, args):
55
60
  self.args = args