sovereign 0.27.0__tar.gz → 0.28.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.

Potentially problematic release.


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

Files changed (61) hide show
  1. {sovereign-0.27.0 → sovereign-0.28.0}/PKG-INFO +1 -1
  2. {sovereign-0.27.0 → sovereign-0.28.0}/pyproject.toml +1 -1
  3. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/discovery.py +2 -0
  4. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/schemas.py +14 -3
  5. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/templates/resources.html +16 -6
  6. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/views/interface.py +2 -2
  7. {sovereign-0.27.0 → sovereign-0.28.0}/LICENSE.txt +0 -0
  8. {sovereign-0.27.0 → sovereign-0.28.0}/README.md +0 -0
  9. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/__init__.py +0 -0
  10. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/app.py +0 -0
  11. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/config_loader.py +0 -0
  12. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/configuration.py +0 -0
  13. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/constants.py +0 -0
  14. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/context.py +0 -0
  15. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/error_info.py +0 -0
  16. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/logging/access_logger.py +0 -0
  17. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/logging/application_logger.py +0 -0
  18. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/logging/base_logger.py +0 -0
  19. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/logging/bootstrapper.py +0 -0
  20. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/logging/types.py +0 -0
  21. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/middlewares.py +0 -0
  22. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/modifiers/__init__.py +0 -0
  23. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/modifiers/lib.py +0 -0
  24. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/response_class.py +0 -0
  25. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/server.py +0 -0
  26. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/sources/__init__.py +0 -0
  27. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/sources/file.py +0 -0
  28. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/sources/inline.py +0 -0
  29. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/sources/lib.py +0 -0
  30. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/sources/poller.py +0 -0
  31. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/static/sass/style.scss +0 -0
  32. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/static/style.css +0 -0
  33. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/statistics.py +0 -0
  34. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/templates/base.html +0 -0
  35. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/templates/err.html +0 -0
  36. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/templates/ul_filter.html +0 -0
  37. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/testing/loaders.py +0 -0
  38. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/testing/modifiers.py +0 -0
  39. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/__init__.py +0 -0
  40. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/auth.py +0 -0
  41. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/crypto/__init__.py +0 -0
  42. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/crypto/crypto.py +0 -0
  43. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/crypto/suites/__init__.py +0 -0
  44. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/crypto/suites/aes_gcm_cipher.py +0 -0
  45. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/crypto/suites/base_cipher.py +0 -0
  46. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/crypto/suites/disabled_cipher.py +0 -0
  47. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/crypto/suites/fernet_cipher.py +0 -0
  48. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/dictupdate.py +0 -0
  49. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/eds.py +0 -0
  50. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/entry_point_loader.py +0 -0
  51. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/mock.py +0 -0
  52. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/resources.py +0 -0
  53. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/templates.py +0 -0
  54. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/timer.py +0 -0
  55. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/version_info.py +0 -0
  56. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/utils/weighted_clusters.py +0 -0
  57. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/views/__init__.py +0 -0
  58. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/views/admin.py +0 -0
  59. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/views/crypto.py +0 -0
  60. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/views/discovery.py +0 -0
  61. {sovereign-0.27.0 → sovereign-0.28.0}/src/sovereign/views/healthchecks.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sovereign
3
- Version: 0.27.0
3
+ Version: 0.28.0
4
4
  Summary: Envoy Proxy control-plane written in Python
5
5
  Home-page: https://pypi.org/project/sovereign/
6
6
  License: Apache-2.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "sovereign"
3
- version = "0.27.0"
3
+ version = "0.28.0"
4
4
  description = "Envoy Proxy control-plane written in Python"
5
5
  license = "Apache-2.0"
6
6
  packages = [
@@ -163,6 +163,8 @@ def filter_resources(
163
163
  that does not match the name of the resource.
164
164
  If Envoy did not specifically request anything, every resource is retained.
165
165
  """
166
+ if len(requested) == 0:
167
+ return generated
166
168
  return [resource for resource in generated if resource_name(resource) in requested]
167
169
 
168
170
 
@@ -294,7 +294,9 @@ class Resources(List[str]):
294
294
  """
295
295
 
296
296
  def __contains__(self, item: object) -> bool:
297
- if len(self) == 0:
297
+ if (
298
+ len(self) == 0
299
+ ): # TODO: refactor to remove overriding __contains__; its being used in multiple places
298
300
  return True
299
301
  return super().__contains__(item)
300
302
 
@@ -305,13 +307,17 @@ class Status(BaseModel):
305
307
  details: List[Any]
306
308
 
307
309
 
310
+ def resources_factory() -> Resources:
311
+ return Resources()
312
+
313
+
308
314
  class DiscoveryRequest(BaseModel):
309
315
  node: Node = Field(..., title="Node information about the envoy proxy")
310
316
  version_info: str = Field(
311
317
  "0", title="The version of the envoy clients current configuration"
312
318
  )
313
- resource_names: list[str] | Resources = Field(
314
- Resources(), title="List of requested resource names"
319
+ resource_names: Resources = Field(
320
+ default_factory=resources_factory, title="List of requested resource names"
315
321
  )
316
322
  hide_private_keys: bool = False
317
323
  type_url: Optional[str] = Field(
@@ -353,6 +359,11 @@ class DiscoveryRequest(BaseModel):
353
359
  self.desired_controlplane,
354
360
  )
355
361
 
362
+ @field_validator("resource_names", mode="before")
363
+ @classmethod
364
+ def validate_resources(cls, v: Union[Resources, List[str]]) -> Resources:
365
+ return Resources(v)
366
+
356
367
 
357
368
  class DiscoveryResponse(BaseModel):
358
369
  version_info: str = Field(
@@ -88,14 +88,24 @@
88
88
  1: 'resource'
89
89
  } %}
90
90
  {% for resource in res %}
91
+ {% if "sovereign_error" in resource %}
92
+ <span class="panel-icon">
93
+ <i class="fas fa-arrow-right" aria-hidden="true"></i>
94
+ </span>
95
+ <div class="notification is-danger">
96
+ {{ resource["sovereign_error"] }}
97
+ </div>
98
+ {{ resource["sovereign_error"] }}
99
+ {% else %}
91
100
  {% set name = resource.get('name') or resource['cluster_name'] %}
92
101
  <a class="panel-block has-text-weight-medium"
93
- href="/ui/resources/{{ resource_type }}/{{ name }}">
94
- <span class="panel-icon">
95
- <i class="fas fa-arrow-right" aria-hidden="true"></i>
96
- </span>
97
- {{ name }}
98
- </a>
102
+ href="/ui/resources/{{ resource_type }}/{{ name }}">
103
+ <span class="panel-icon">
104
+ <i class="fas fa-arrow-right" aria-hidden="true"></i>
105
+ </span>
106
+ {{ name }}
107
+ </a>
108
+ {% endif %}
99
109
  {% endfor %}
100
110
  <div class="panel-block">
101
111
  <p class="content is-small">
@@ -103,8 +103,8 @@ async def resources(
103
103
  resource_type=xds_type,
104
104
  skip_auth=True,
105
105
  )
106
- except KeyError:
107
- ret["resources"] = []
106
+ except KeyError as e:
107
+ ret["resources"] = [{"sovereign_error": str(e)}]
108
108
  else:
109
109
  ret["resources"] += response.deserialize_resources()
110
110
  return html_templates.TemplateResponse(
File without changes
File without changes