sovereign 1.0.0a4__py3-none-any.whl → 1.0.0b148__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.

Potentially problematic release.


This version of sovereign might be problematic. Click here for more details.

Files changed (65) hide show
  1. sovereign/__init__.py +2 -2
  2. sovereign/app.py +3 -6
  3. sovereign/cache/__init__.py +12 -85
  4. sovereign/cache/backends/__init__.py +1 -1
  5. sovereign/cache/backends/s3.py +6 -24
  6. sovereign/cache/filesystem.py +5 -6
  7. sovereign/cache/types.py +0 -2
  8. sovereign/configuration.py +8 -42
  9. sovereign/context.py +9 -8
  10. sovereign/dynamic_config/__init__.py +4 -3
  11. sovereign/dynamic_config/deser.py +1 -1
  12. sovereign/dynamic_config/loaders.py +3 -3
  13. sovereign/error_info.py +3 -2
  14. sovereign/events.py +3 -3
  15. sovereign/logging/access_logger.py +1 -1
  16. sovereign/logging/application_logger.py +1 -1
  17. sovereign/logging/bootstrapper.py +1 -1
  18. sovereign/modifiers/lib.py +1 -1
  19. sovereign/rendering.py +90 -22
  20. sovereign/response_class.py +2 -2
  21. sovereign/server.py +26 -45
  22. sovereign/sources/__init__.py +3 -0
  23. sovereign/sources/file.py +21 -0
  24. sovereign/sources/inline.py +39 -0
  25. sovereign/sources/lib.py +41 -0
  26. sovereign/sources/poller.py +537 -0
  27. sovereign/statistics.py +1 -2
  28. sovereign/testing/loaders.py +0 -1
  29. sovereign/tracing.py +5 -6
  30. sovereign/types.py +10 -15
  31. sovereign/utils/auth.py +2 -3
  32. sovereign/utils/crypto/suites/disabled_cipher.py +2 -2
  33. sovereign/utils/dictupdate.py +1 -1
  34. sovereign/utils/eds.py +1 -3
  35. sovereign/utils/entry_point_loader.py +2 -2
  36. sovereign/utils/mock.py +3 -4
  37. sovereign/utils/resources.py +1 -1
  38. sovereign/utils/templates.py +2 -4
  39. sovereign/utils/timer.py +3 -5
  40. sovereign/utils/weighted_clusters.py +1 -2
  41. sovereign/views/__init__.py +3 -6
  42. sovereign/views/api.py +7 -28
  43. sovereign/views/crypto.py +1 -1
  44. sovereign/views/discovery.py +5 -20
  45. sovereign/views/healthchecks.py +27 -45
  46. sovereign/views/interface.py +10 -70
  47. sovereign/worker.py +31 -20
  48. {sovereign-1.0.0a4.dist-info → sovereign-1.0.0b148.dist-info}/METADATA +3 -4
  49. sovereign-1.0.0b148.dist-info/RECORD +77 -0
  50. {sovereign-1.0.0a4.dist-info → sovereign-1.0.0b148.dist-info}/entry_points.txt +0 -8
  51. sovereign/rendering_common.py +0 -91
  52. sovereign/v2/__init__.py +0 -0
  53. sovereign/v2/data/data_store.py +0 -621
  54. sovereign/v2/data/render_discovery_response.py +0 -24
  55. sovereign/v2/data/repositories.py +0 -90
  56. sovereign/v2/data/utils.py +0 -33
  57. sovereign/v2/data/worker_queue.py +0 -273
  58. sovereign/v2/jobs/refresh_context.py +0 -117
  59. sovereign/v2/jobs/render_discovery_job.py +0 -145
  60. sovereign/v2/logging.py +0 -81
  61. sovereign/v2/types.py +0 -41
  62. sovereign/v2/web.py +0 -101
  63. sovereign/v2/worker.py +0 -199
  64. sovereign-1.0.0a4.dist-info/RECORD +0 -85
  65. {sovereign-1.0.0a4.dist-info → sovereign-1.0.0b148.dist-info}/WHEEL +0 -0
@@ -0,0 +1,77 @@
1
+ sovereign/__init__.py,sha256=9fOh4r27OcCcKWKvNBp3CcHmADJhc1sJIi7qsbNY97g,1069
2
+ sovereign/app.py,sha256=07CJEiqCMlz9R32r0_nh9Y426uztw1tY81mBCgEOeoY,5030
3
+ sovereign/configuration.py,sha256=lBRUyep4VBRj1VDDfOhYv50kH7qup_Di6HQQn6XOHrs,20053
4
+ sovereign/constants.py,sha256=qdWD1lTvkaW5JGF7TmZhfksQHlRAJFVqbG7v6JQA9k8,46
5
+ sovereign/context.py,sha256=m2-VAZANSlnLbcJ6mmTl2XipE6l-BXyYeQiy3WN8jtY,9077
6
+ sovereign/error_info.py,sha256=r2KXBYq9Fo7AI2pmIpATWFm0pykr2MqfrKH0WWW5Sfk,1488
7
+ sovereign/events.py,sha256=8WEIJo0C7mnx-pLjOTXPUFWYySvVXqDsj6p2e9LR9Jg,1203
8
+ sovereign/middlewares.py,sha256=6w4JpvtNGvQA4rocQsYQjuu-ckhpKT6gKYA16T-kiqA,3082
9
+ sovereign/rendering.py,sha256=kzNSv6Rszz-sy5rCAL9hq3Z7xvqcT39BnXPNxv58pQs,6940
10
+ sovereign/response_class.py,sha256=beMAFV-4L6DwyWzJzy71GkEW4gb7fzH1jd8-Tul13cU,427
11
+ sovereign/server.py,sha256=6aZEaGn1RibMMqJ1uBDvaXKsw9-DCRiyp9j9TNkPyo8,2985
12
+ sovereign/statistics.py,sha256=wZ7skpaKE4Zk8jvFpVdrSFqlW_hG8qWH3HE5pYeBhP0,2044
13
+ sovereign/tracing.py,sha256=egA8O5VryajsI90NXVdQVVT7sGWIrclgEd559qznDn0,2685
14
+ sovereign/types.py,sha256=u0BYH5ldcvGMCJrY_zWffDpo2gd8GSJV5eGMDwuuCHg,9898
15
+ sovereign/worker.py,sha256=dzXd3fckYYcKVKv_-3YnZf40o1Z5cMvA6a1DMV85Sw4,6072
16
+ sovereign/cache/__init__.py,sha256=UjcRkreQrm0FcBmaZ0868eYffIueZ_rDG3ToxzounqU,6337
17
+ sovereign/cache/filesystem.py,sha256=LrywZkmiV_SCdpu4nz6ru4LdbaJPtkD2Wn4RBuZstDw,2395
18
+ sovereign/cache/types.py,sha256=UdJRlARVLWidFWEfMvaa5NnGHONCGB-xStbFdBb2B-M,241
19
+ sovereign/cache/backends/__init__.py,sha256=6mPpf9OzyCBvRqpZzIBNy6jrDimEmg8yIiUYpNVTkQk,3160
20
+ sovereign/cache/backends/s3.py,sha256=LoChgNI_Ht1gg9K3RiN2tL41ANHke9GIlESs6loo7MI,5206
21
+ sovereign/dynamic_config/__init__.py,sha256=NXCG_-IM_TKCApJns-GsZka8jv_EqKUiF5S8kRSd7Y0,3547
22
+ sovereign/dynamic_config/deser.py,sha256=N3iUvDpuNHWjxUbGFydMVKicx4o8DyfvNukorqnQdt8,1834
23
+ sovereign/dynamic_config/loaders.py,sha256=gPkxTL7gep20HIMRvjgOqAdUWqtb3970VBCAcUrIM4c,2915
24
+ sovereign/logging/access_logger.py,sha256=QVjrN6tmAemmCQ1NDWoarVrl7vogaHoCPL7SjwjthNk,2989
25
+ sovereign/logging/application_logger.py,sha256=BAEmm9Iszz9AL3a32g8t6fTbgZTzJuN5zyZB2kNaj78,1806
26
+ sovereign/logging/base_logger.py,sha256=ScOzHs8Rt1RZaUZGvaJSAlDEjD0BxkD5sLKSm2GgM0I,1243
27
+ sovereign/logging/bootstrapper.py,sha256=2eawwirMH_3gN3K8Gy9DZojBnk38NQaccCrvdMqPO4M,1302
28
+ sovereign/logging/types.py,sha256=rGqJAEVvgvzHy4aPfvEH6yQ-yblXNkEcWG7G8l9ALEA,282
29
+ sovereign/modifiers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ sovereign/modifiers/lib.py,sha256=Cx0VrpTKbSjb3YmHyG4Jy6YEaPlrwpeqNaom3zu1_hw,2885
31
+ sovereign/sources/__init__.py,sha256=g9hEpFk8j5i1ApHQpbc9giTyJW41Ppgsqv5P9zGxOJk,78
32
+ sovereign/sources/file.py,sha256=prUThsDCSPNwZaZpkKXhAm-GVRZWbBoGKGU0It4HHXs,690
33
+ sovereign/sources/inline.py,sha256=pP77m7bHjqE3sSoqZthcuw1ARVMf9gooVwbz4B8OAek,1003
34
+ sovereign/sources/lib.py,sha256=0hk_G6mKJrB65WokVZnqF5kdJ3vsQZMNPuJqJO0mBsI,1031
35
+ sovereign/sources/poller.py,sha256=Cy3zx3xS2JcihOlZ16Nymkw3SWQAgOLjeSWsw2K9IPI,19347
36
+ sovereign/templates/base.html,sha256=MMhhvvClTixKibYfhXm8Ezx6ttu6Sqki44niciCPMO4,2990
37
+ sovereign/templates/err.html,sha256=a3cEzOqyqWOIe3YxfTEjkxbTfxBxq1knD6GwzEFljfs,603
38
+ sovereign/templates/resources.html,sha256=5MfXHW8s3tAWda66Q48zVgDhZNLwHGsdCKkKHLZohIs,10420
39
+ sovereign/testing/loaders.py,sha256=mcmErhI9ZkJUBZl8jv2qP-PCBRFeAIgyBFlfCgU4Vvk,199
40
+ sovereign/testing/modifiers.py,sha256=YI0aJOEbb1C_1T5VDrZKyLopk8JiIlKtUtxXMFfsCtk,290
41
+ sovereign/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ sovereign/utils/auth.py,sha256=7cc-WrIJBWfUkF5xvV98rRDU8BcKVL1ERinDqNqTGs0,2286
43
+ sovereign/utils/dictupdate.py,sha256=Bi7QaC7en-k3EOepwNJqpOKRNBgp6ZsBZVOvH_0nMtc,2558
44
+ sovereign/utils/eds.py,sha256=QkBf-_zOj3w5-fJkhvr_uYeltpLn5kiCj-A2bRPsCig,4389
45
+ sovereign/utils/entry_point_loader.py,sha256=BEVodk-um70RvT1nSOu_IB-hr1K4ppthXod0VZEiZJ8,526
46
+ sovereign/utils/mock.py,sha256=U0ydUX9Tv4dUOjd96tsXMUqiZ-i6S2CFOny3uo4h6_Q,2395
47
+ sovereign/utils/resources.py,sha256=rPrWgcIt4YhV-Dz88_kr5WrQNiSKt-jTlOZ8EIJxJx8,472
48
+ sovereign/utils/templates.py,sha256=FE_H_oE7VrS3X_VN1z_g10b9-rpmi1_gL-cMxi5XtXU,1057
49
+ sovereign/utils/timer.py,sha256=_dUtEasj0BKbWYuQ_T3HFIyjurXXj-La-dNSMAwKMSo,795
50
+ sovereign/utils/version_info.py,sha256=adBfu0z6jsg8E5-BIUjZyBwZvfLASj7fpCpYeIvBeMY,576
51
+ sovereign/utils/weighted_clusters.py,sha256=bPzuRE7Qgvv04HcR2AhMDvBrFlZ8AfteweLKhY9SvWg,1166
52
+ sovereign/utils/crypto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
+ sovereign/utils/crypto/crypto.py,sha256=FMo4TikqWcPJ5fyc6j2WEHkkwZU3WY3qJKr7VLfckv0,4532
54
+ sovereign/utils/crypto/suites/__init__.py,sha256=smMvNa1VsQ0PvsNj6lnRNh4ktB7dMnas1CqeTOFqgGA,526
55
+ sovereign/utils/crypto/suites/aes_gcm_cipher.py,sha256=Yjfj1LCQDGTzHBjrZR3-koh29L_N34v65kPoIfta0aw,1239
56
+ sovereign/utils/crypto/suites/base_cipher.py,sha256=kUOZh_ZIILyo5zv99-qzbJZDpeMmt76vhkBDEPvAt4A,454
57
+ sovereign/utils/crypto/suites/disabled_cipher.py,sha256=0_vzydVdVIUlX4pYEAMgB_RvHpyZ25uDC4pz1jRJ5wE,573
58
+ sovereign/utils/crypto/suites/fernet_cipher.py,sha256=rP6M5ys1vctyadOxDGNFoyerWPUOunLQdZ2jjS1pxzc,701
59
+ sovereign/views/__init__.py,sha256=oe_kK9egBp9jghG4EujFsAx6c2-eeZurjEtQ3dTlJRo,59
60
+ sovereign/views/api.py,sha256=gKz3ad1tdKlL1Dg01yRu6X2A5Fs_PJbDwpEHy-M-yek,2239
61
+ sovereign/views/crypto.py,sha256=nGD0Bac6jQeK8u0Qe71EJfbY1a-rYqN7wz7BulrOrFw,3366
62
+ sovereign/views/discovery.py,sha256=tR1D1HX8PyZdzjC1XdqYs8-YWeSYZMoJ1Npow5PC_Gc,2512
63
+ sovereign/views/healthchecks.py,sha256=Md4UTiZE9JoZJofrPM2jV-9bJfxDiViRSQmoyTw7SO0,3447
64
+ sovereign/views/interface.py,sha256=ZOnYCxyab6VagwCewQL3oBDaCqgoQRcE32h3ui9uZFw,7241
65
+ sovereign_files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
+ sovereign_files/static/darkmode.js,sha256=3ip-eKGctDvNhN7UgmaHhzls7r5qIY-Jvh2EpefHbQ0,1449
67
+ sovereign_files/static/node_expression.js,sha256=GKxKTSRc_96IbL3H4L_31ueJFXq4N7scm5R1RNqxP24,1489
68
+ sovereign_files/static/panel.js,sha256=i5mGExjv-I4Gtt9dQiTyFwPZa8pg5rXeuTeidXNUiTE,2695
69
+ sovereign_files/static/resources.css,sha256=Rt_ir_FkoI-VIAOqPhk0vILy8kB2egAYbQU26SOs1io,4500
70
+ sovereign_files/static/resources.js,sha256=-TaXZ6tohyKA1SkX5YwrTcV5M8mOZ68cvEXpvZWznTo,24506
71
+ sovereign_files/static/style.css,sha256=kmvkJ2820RKehWxhddkucbgFkvnpUgBMteOtpEuXjvQ,601347
72
+ sovereign_files/static/style.css.map,sha256=h1ufjfDVX-8z-FuJqFG2-U9AVdi66U-e8uyiGdUZjDw,66576
73
+ sovereign_files/static/sass/style.scss,sha256=LdGXXuHi_tyMc7XhijIOrlIxyfLt827AAs2Z7DYpFpg,990
74
+ sovereign-1.0.0b148.dist-info/METADATA,sha256=oem0ksW8OtXbGl21BjKSJUi4sKmVqWjXCtIYrAUnHX0,5917
75
+ sovereign-1.0.0b148.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
76
+ sovereign-1.0.0b148.dist-info/entry_points.txt,sha256=Rt_U9pHxxYT132TIfj6ESPKxfM0d5hByvggUcuFk_NI,1526
77
+ sovereign-1.0.0b148.dist-info/RECORD,,
@@ -6,10 +6,6 @@ sovereign-worker = sovereign.server:worker
6
6
  [sovereign.cache.backends]
7
7
  s3 = sovereign.cache.backends.s3:S3Backend
8
8
 
9
- [sovereign.data_stores]
10
- memory = sovereign.v2.data.data_store:InMemoryDataStore
11
- sqlite = sovereign.v2.data.data_store:SqliteDataStore
12
-
13
9
  [sovereign.deserializers]
14
10
  jinja = sovereign.dynamic_config.deser:JinjaDeserializer
15
11
  jinja2 = sovereign.dynamic_config.deser:JinjaDeserializer
@@ -37,10 +33,6 @@ s3 = sovereign.dynamic_config.loaders:S3Bucket
37
33
  [sovereign.modifiers]
38
34
  sovereign_3rd_party_test = sovereign.testing.modifiers:Test
39
35
 
40
- [sovereign.queues]
41
- memory = sovereign.v2.data.worker_queue:InMemoryQueue
42
- sqlite = sovereign.v2.data.worker_queue:SqliteQueue
43
-
44
36
  [sovereign.sources]
45
37
  file = sovereign.sources.file:File
46
38
  inline = sovereign.sources.inline:Inline
@@ -1,91 +0,0 @@
1
- import importlib
2
- from typing import Any
3
-
4
- import yaml
5
- from starlette.exceptions import HTTPException
6
- from yaml.parser import ParserError
7
- from yaml.scanner import ScannerError
8
-
9
- from sovereign import config, logs
10
-
11
- type_urls = {
12
- "v2": {
13
- "listeners": "type.googleapis.com/envoy.api.v2.Listener",
14
- "clusters": "type.googleapis.com/envoy.api.v2.Cluster",
15
- "endpoints": "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment",
16
- "secrets": "type.googleapis.com/envoy.api.v2.auth.Secret",
17
- "routes": "type.googleapis.com/envoy.api.v2.RouteConfiguration",
18
- "scoped-routes": "type.googleapis.com/envoy.api.v2.ScopedRouteConfiguration",
19
- },
20
- "v3": {
21
- "listeners": "type.googleapis.com/envoy.config.listener.v3.Listener",
22
- "clusters": "type.googleapis.com/envoy.config.cluster.v3.Cluster",
23
- "endpoints": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment",
24
- "secrets": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret",
25
- "routes": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration",
26
- "scoped-routes": "type.googleapis.com/envoy.config.route.v3.ScopedRouteConfiguration",
27
- "runtime": "type.googleapis.com/envoy.service.runtime.v3.Runtime",
28
- },
29
- }
30
-
31
-
32
- def add_type_urls(api_version, resource_type, resources):
33
- type_url = type_urls.get(api_version, {}).get(resource_type)
34
- if type_url is not None:
35
- for resource in resources:
36
- if not resource.get("@type"):
37
- resource["@type"] = type_url
38
-
39
-
40
- def deserialize_config(content: str) -> dict[str, Any]:
41
- try:
42
- envoy_configuration = yaml.safe_load(content)
43
- except (ParserError, ScannerError) as e:
44
- logs.access_logger.queue_log_fields(
45
- error=repr(e),
46
- YAML_CONTEXT=e.context,
47
- YAML_CONTEXT_MARK=e.context_mark,
48
- YAML_NOTE=e.note,
49
- YAML_PROBLEM=e.problem,
50
- YAML_PROBLEM_MARK=e.problem_mark,
51
- )
52
-
53
- if config.sentry_dsn:
54
- mod = importlib.import_module("sentry_sdk")
55
- mod.capture_exception(e)
56
-
57
- raise HTTPException(
58
- status_code=500,
59
- detail=(
60
- "Failed to load configuration, there may be "
61
- "a syntax error in the configured templates. "
62
- "Please check Sentry if you have configured Sentry DSN"
63
- ),
64
- )
65
- if not isinstance(envoy_configuration, dict):
66
- raise RuntimeError(
67
- f"Deserialized configuration is of unexpected format: {envoy_configuration}"
68
- )
69
- return envoy_configuration
70
-
71
-
72
- def filter_resources(
73
- generated: list[dict[str, Any]], requested: list[str]
74
- ) -> list[dict[str, Any]]:
75
- """
76
- If Envoy specifically requested a resource, this removes everything
77
- that does not match the name of the resource.
78
- If Envoy did not specifically request anything, every resource is retained.
79
- """
80
- if len(requested) == 0:
81
- return generated
82
- return [resource for resource in generated if resource_name(resource) in requested]
83
-
84
-
85
- def resource_name(resource: dict[str, Any]) -> str:
86
- name = resource.get("name") or resource.get("cluster_name")
87
- if isinstance(name, str):
88
- return name
89
- raise KeyError(
90
- f"Failed to determine the name or cluster_name of the following resource: {resource}"
91
- )
sovereign/v2/__init__.py DELETED
File without changes