sovereign 0.19.0__tar.gz → 0.19.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.

Potentially problematic release.


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

Files changed (47) hide show
  1. {sovereign-0.19.0 → sovereign-0.19.1}/PKG-INFO +1 -1
  2. {sovereign-0.19.0 → sovereign-0.19.1}/pyproject.toml +1 -1
  3. {sovereign-0.19.0 → sovereign-0.19.1}/setup.py +1 -1
  4. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/context.py +18 -13
  5. {sovereign-0.19.0 → sovereign-0.19.1}/LICENSE.txt +0 -0
  6. {sovereign-0.19.0 → sovereign-0.19.1}/README.md +0 -0
  7. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/__init__.py +0 -0
  8. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/app.py +0 -0
  9. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/config_loader.py +0 -0
  10. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/discovery.py +0 -0
  11. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/error_info.py +0 -0
  12. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/logs.py +0 -0
  13. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/middlewares.py +0 -0
  14. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/modifiers/__init__.py +0 -0
  15. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/modifiers/lib.py +0 -0
  16. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/modifiers/test.py +0 -0
  17. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/schemas.py +0 -0
  18. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/server.py +0 -0
  19. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/sources/__init__.py +0 -0
  20. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/sources/file.py +0 -0
  21. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/sources/inline.py +0 -0
  22. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/sources/lib.py +0 -0
  23. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/sources/poller.py +0 -0
  24. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/static/sass/style.scss +0 -0
  25. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/static/style.css +0 -0
  26. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/statistics.py +0 -0
  27. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/templates/base.html +0 -0
  28. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/templates/err.html +0 -0
  29. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/templates/resources.html +0 -0
  30. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/templates/ul_filter.html +0 -0
  31. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/utils/__init__.py +0 -0
  32. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/utils/auth.py +0 -0
  33. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/utils/crypto.py +0 -0
  34. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/utils/dictupdate.py +0 -0
  35. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/utils/eds.py +0 -0
  36. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/utils/entry_point_loader.py +0 -0
  37. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/utils/mock.py +0 -0
  38. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/utils/templates.py +0 -0
  39. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/utils/timer.py +0 -0
  40. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/utils/version_info.py +0 -0
  41. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/utils/weighted_clusters.py +0 -0
  42. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/views/__init__.py +0 -0
  43. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/views/admin.py +0 -0
  44. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/views/crypto.py +0 -0
  45. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/views/discovery.py +0 -0
  46. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/views/healthchecks.py +0 -0
  47. {sovereign-0.19.0 → sovereign-0.19.1}/src/sovereign/views/interface.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sovereign
3
- Version: 0.19.0
3
+ Version: 0.19.1
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.19.0"
3
+ version = "0.19.1"
4
4
  description = "Envoy Proxy control-plane written in Python"
5
5
  license = "Apache-2.0"
6
6
  packages = [
@@ -47,7 +47,7 @@ entry_points = \
47
47
 
48
48
  setup_kwargs = {
49
49
  'name': 'sovereign',
50
- 'version': '0.19.0',
50
+ 'version': '0.19.1',
51
51
  'description': 'Envoy Proxy control-plane written in Python',
52
52
  'long_description': 'sovereign\n=========\n\nMission statement\n-----------------\nThis project implements a JSON control-plane based on the [envoy](https://envoyproxy.io) [data-plane-api](https://github.com/envoyproxy/data-plane-api)\n\nThe purpose of `sovereign` is to supply downstream envoy proxies with \nconfiguration in near-realtime by responding to discovery requests.\n\nMechanism of Operation\n----------------------\ntl;dr version:\n```\n* Polls HTTP/File/Other for data\n* (optional) Applies transforms to the data\n* Uses the data to generate Envoy configuration from templates\n```\n\nIn a nutshell, Sovereign \ngathers contextual data (*"sources"* and *"template context"*), \noptionally applies transforms to that data (using *"modifiers"*) and finally \nuses the data to generate envoy configuration from either python code, or jinja2 templates.\n\nThis is performed in a semi-stateless way, where the only state is data cached in memory.\n\nTemplate context is intended to be statically configured, whereas *Sources* \nare meant to be dynamic - for example, fetching from an API, an S3 bucket, \nor a file that receives updates.\n\n*Modifiers* can mutate the data retrieved from sources, just in case the data \nis in a less than favorable structure.\n\nBoth modifiers and sources are pluggable, i.e. it\'s easy to write your own and \nplug them into Sovereign for your use-case.\n\nCurrently, Sovereign supports only providing configuration to Envoy as JSON. \nThat is to say, gRPC is not supported yet. Contributions in this area are highly\nappreciated!\n\nThe JSON configuration can be viewed in real-time with Sovereign\'s read-only web interface.\n\nRequirements\n------------\n* Python 3.8+\n\nInstallation\n------------\n```\npip install sovereign\n```\n\nDocumentation\n-------------\n[Read the docs here!](https://vsyrakis.bitbucket.io/sovereign/docs/)\n\n:new: Read-only user interface\n------------------------\nAdded in `v0.5.3`!\n\nThis interface allows you to browse the resources currently returned by Sovereign.\n\n![Sovereign User Interface Screenshot](https://bitbucket.org/atlassian/sovereign/src/master/assets/sovereign_ui.png)\n\nLocal development\n=================\n\nRequirements\n------------\n* Docker\n* Docker-compose\n\nInstalling dependencies for dev\n-------------------------------\nI recommend creating a virtualenv before doing any dev work\n\n```\npython3 -m venv venv\nsource venv/bin/activate\npip install -r requirements-dev.txt\n```\n\nRunning locally\n---------------\nRunning the test env\n\n```\nmake run\n```\n \nRunning the test env daemonized\n\n```\nmake run-daemon\n```\n\nPylint\n\n```\nmake lint\n```\n\nUnit tests\n\n```\nmake unit\n```\n\nAcceptance tests\n\n```\nmake run-daemon acceptance\n```\n\n\nContributors\n============\n\nPull requests, issues and comments welcome. For pull requests:\n\n* Add tests for new features and bug fixes\n* Follow the existing style\n* Separate unrelated changes into multiple pull requests\n\nSee the existing issues for things to start contributing.\n\nFor bigger changes, make sure you start a discussion first by creating\nan issue and explaining the intended change.\n\nAtlassian requires contributors to sign a Contributor License Agreement,\nknown as a CLA. This serves as a record stating that the contributor is\nentitled to contribute the code/documentation/translation to the project\nand is willing to have it used in distributions and derivative works\n(or is willing to transfer ownership).\n\nPrior to accepting your contributions we ask that you please follow the appropriate\nlink below to digitally sign the CLA. The Corporate CLA is for those who are\ncontributing as a member of an organization and the individual CLA is for\nthose contributing as an individual.\n\n* [CLA for corporate contributors](https://na2.docusign.net/Member/PowerFormSigning.aspx?PowerFormId=e1c17c66-ca4d-4aab-a953-2c231af4a20b)\n* [CLA for individuals](https://na2.docusign.net/Member/PowerFormSigning.aspx?PowerFormId=3f94fbdc-2fbe-46ac-b14c-5d152700ae5d)\n\n\nLicense\n========\n\nCopyright (c) 2018 Atlassian and others.\nApache 2.0 licensed, see [LICENSE.txt](LICENSE.txt) file.\n\n\n',
53
53
  'author': 'Vasili Syrakis',
@@ -26,10 +26,10 @@ class TemplateContext:
26
26
  self.configured_context = configured_context
27
27
  self.crypto = encryption_suite
28
28
  self.disabled_suite = disabled_suite
29
- # initial load
30
- self.context = self.load_context_variables()
31
29
  self.logger = logger
32
30
  self.stats = stats
31
+ # initial load
32
+ self.context = self.load_context_variables()
33
33
 
34
34
  async def start_refresh_context(self) -> NoReturn:
35
35
  if self.refresh_cron is not None:
@@ -40,21 +40,26 @@ class TemplateContext:
40
40
  raise RuntimeError("Failed to start refresh_context, this should never happen")
41
41
 
42
42
  async def refresh_context(self) -> None:
43
- try:
44
- self.context = self.load_context_variables()
45
- self.stats.increment("context.refresh.success")
46
- # pylint: disable=broad-except
47
- except Exception as e:
48
- self.logger(event=e)
49
- self.stats.increment("context.refresh.error")
43
+ self.context = self.load_context_variables()
50
44
 
51
45
  def load_context_variables(self) -> Dict[str, Any]:
52
46
  ret = dict()
53
47
  for k, v in self.configured_context.items():
54
- if isinstance(v, Loadable):
55
- ret[k] = v.load()
56
- elif isinstance(v, str):
57
- ret[k] = Loadable.from_legacy_fmt(v).load()
48
+ try:
49
+ if isinstance(v, Loadable):
50
+ ret[k] = v.load()
51
+ elif isinstance(v, str):
52
+ ret[k] = Loadable.from_legacy_fmt(v).load()
53
+ self.stats.increment(
54
+ "context.refresh.success",
55
+ tags=[f"context:{k}"],
56
+ )
57
+ except Exception as e: # pylint: disable=broad-exception-caught
58
+ self.logger(event=e)
59
+ self.stats.increment(
60
+ "context.refresh.error",
61
+ tags=[f"context:{k}"],
62
+ )
58
63
  if "crypto" not in ret:
59
64
  ret["crypto"] = self.crypto
60
65
  return ret
File without changes
File without changes