Skip to content

Commit

Permalink
feat: deprecation warnings on select application attributes
Browse files Browse the repository at this point in the history
  • Loading branch information
dimaqq committed Oct 8, 2024
1 parent 50b42d0 commit b359e0d
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 12 deletions.
42 changes: 40 additions & 2 deletions juju/application.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
import hashlib
import json
import logging
import typing
from typing import Dict, List, Union
from pathlib import Path

from typing_extensions import deprecated

from . import jasyncio, model, tag, utils
from .annotationhelper import _get_annotations, _set_annotations
from .bundle import get_charm_series, is_local_charm
Expand All @@ -24,6 +26,42 @@


class Application(model.ModelEntity):
@property
def name(self) -> str:
return self.entity_id

@property
def exposed(self) -> bool:
return self.safe_data["exposed"]

@property
@deprecated("Application.owner_tag is deprecated and will be removed in v4")
def owner_tag(self) -> str:
return self.safe_data["owner-tag"]

@property
def life(self) -> str:
return self.safe_data["life"]

@property
@deprecated("Application.min_units is deprecated and will be removed in v4")
def min_units(self) -> int:
return self.safe_data["min-units"]

@property
def constraints(self) -> Dict[str, Union[str, int, bool]]:
return self.safe_data["constraints"]

@property
@deprecated("Application.subordinate is deprecated and will be removed in v4")
def subordinate(self) -> bool:
return self.safe_data["subordinate"]

@property
@deprecated("Application.workload_version is deprecated and will be removed in v4, use Unit.workload_version instead.")
def workload_version(self) -> str:
return self.safe_data["workload-version"]

@property
def _unit_match_pattern(self):
return r'^{}.*$'.format(self.entity_id)
Expand Down Expand Up @@ -63,7 +101,7 @@ def subordinate_units(self):
return [u for u in self.units if u.is_subordinate]

@property
def relations(self) -> typing.List[Relation]:
def relations(self) -> List[Relation]:
return [rel for rel in self.model.relations if rel.matches(self.name)]

def related_applications(self, endpoint_name=None):
Expand Down
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
'kubernetes>=12.0.1,<31.0.0',
'hvac',
'packaging',
'typing-extensions>=4.5.0',
],
include_package_data=True,
maintainer='Juju Ecosystem Engineering',
Expand Down
15 changes: 5 additions & 10 deletions tests/unit/test_application.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ async def test_expose_with_exposed_endpoints_as_raw_dict(self, mock_conn):
mock_facade().Expose.return_value.set_result([])

app = Application(entity_id="app-id", model=Model())
app.name = "panther"
app._facade = mock_facade
app._facade_version = mock_facade_version

Expand All @@ -37,7 +36,7 @@ async def test_expose_with_exposed_endpoints_as_raw_dict(self, mock_conn):
})

mock_facade().Expose.assert_called_once_with(
application="panther",
application="app-id",
exposed_endpoints={
"": {
"expose-to-spaces": ["alpha"],
Expand All @@ -53,7 +52,6 @@ async def test_expose_with_exposed_endpoints(self, mock_conn):
mock_facade().Expose.return_value.set_result([])

app = Application(entity_id="app-id", model=Model())
app.name = "panther"
app._facade = mock_facade
app._facade_version = mock_facade_version

Expand All @@ -67,7 +65,7 @@ async def test_expose_with_exposed_endpoints(self, mock_conn):
})

mock_facade().Expose.assert_called_once_with(
application="panther",
application="app-id",
exposed_endpoints={
"": {
"expose-to-spaces": ["alpha"],
Expand All @@ -89,7 +87,6 @@ async def test_expose_endpoints_on_older_controller(self, mock_conn):
mock_facade().Expose.return_value.set_result([])

app = Application(entity_id="app-id", model=Model())
app.name = "panther"
app._facade = mock_facade
app._facade_version = mock_facade_version

Expand Down Expand Up @@ -125,7 +122,7 @@ async def test_expose_endpoints_on_older_controller(self, mock_conn):

# Check that we call the facade with the right arity.
await app.expose()
mock_facade().Expose.assert_called_once_with(application="panther")
mock_facade().Expose.assert_called_once_with(application="app-id")


class TestUnExposeApplication(unittest.IsolatedAsyncioTestCase):
Expand All @@ -137,7 +134,6 @@ async def test_unexpose_endpoints_on_older_controller(self, mock_conn):
mock_facade().Unexpose.return_value.set_result([])

app = Application(entity_id="app-id", model=Model())
app.name = "panther"
app._facade = mock_facade
app._facade_version = mock_facade_version

Expand All @@ -148,7 +144,7 @@ async def test_unexpose_endpoints_on_older_controller(self, mock_conn):

# Check that we call the facade with the right arity.
await app.unexpose()
mock_facade().Unexpose.assert_called_once_with(application="panther")
mock_facade().Unexpose.assert_called_once_with(application="app-id")

@mock.patch("juju.model.Model.connection")
async def test_unexpose_endpoints_on_29_controller(self, mock_conn):
Expand All @@ -158,14 +154,13 @@ async def test_unexpose_endpoints_on_29_controller(self, mock_conn):
mock_facade().Unexpose.return_value.set_result([])

app = Application(entity_id="app-id", model=Model())
app.name = "panther"
app._facade = mock_facade
app._facade_version = mock_facade_version

await app.unexpose(exposed_endpoints=["alpha", "beta"])

mock_facade().Unexpose.assert_called_once_with(
application="panther",
application="app-id",
exposed_endpoints=["alpha", "beta"]
)

Expand Down

0 comments on commit b359e0d

Please sign in to comment.