Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ For more code samples on how to integrate the auth0-python SDK in your Python ap
- Jobs() ( `Auth0().jobs` )
- LogStreams() ( `Auth0().log_streams` )
- Logs() ( `Auth0().logs` )
- NetworkAcls() ( `Auth0().network_acls` )
- Organizations() ( `Auth0().organizations` )
- Prompts() ( `Auth0().prompts` )
- ResourceServers() (`Auth0().resource_servers` )
Expand Down
2 changes: 2 additions & 0 deletions auth0/management/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
from .jobs import Jobs
from .log_streams import LogStreams
from .logs import Logs
from .network_acls import NetworkAcls
from .organizations import Organizations
from .resource_servers import ResourceServers
from .roles import Roles
Expand Down Expand Up @@ -55,6 +56,7 @@
"Jobs",
"LogStreams",
"Logs",
"NetworkAcls"
"Organizations",
"ResourceServers",
"Roles",
Expand Down
2 changes: 2 additions & 0 deletions auth0/management/auth0.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from .jobs import Jobs
from .log_streams import LogStreams
from .logs import Logs
from .network_acls import NetworkAcls
from .organizations import Organizations
from .prompts import Prompts
from .resource_servers import ResourceServers
Expand Down Expand Up @@ -79,6 +80,7 @@ def __init__(
self.jobs = Jobs(domain, token, rest_options=rest_options)
self.log_streams = LogStreams(domain, token, rest_options=rest_options)
self.logs = Logs(domain, token, rest_options=rest_options)
self.network_acls = NetworkAcls(domain, token, rest_options=rest_options)
self.organizations = Organizations(domain, token, rest_options=rest_options)
self.prompts = Prompts(domain, token, rest_options=rest_options)
self.resource_servers = ResourceServers(
Expand Down
138 changes: 138 additions & 0 deletions auth0/management/network_acls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
from __future__ import annotations

from typing import Any, List # List is being used as list is already a method.

from ..rest import RestClient, RestClientOptions
from ..types import TimeoutType


class NetworkAcls:
"""Auth0 Netwrok Acls endpoints

Args:
domain (str): Your Auth0 domain, e.g: 'username.auth0.com'

token (str): Management API v2 Token

telemetry (bool, optional): Enable or disable Telemetry
(defaults to True)

timeout (float or tuple, optional): Change the requests
connect and read timeout. Pass a tuple to specify
both values separately or a float to set both to it.
(defaults to 5.0 for both)

protocol (str, optional): Protocol to use when making requests.
(defaults to "https")

rest_options (RestClientOptions): Pass an instance of
RestClientOptions to configure additional RestClient
options, such as rate-limit retries.
(defaults to None)
"""

def __init__(
self,
domain: str,
token: str,
telemetry: bool = True,
timeout: TimeoutType = 5.0,
protocol: str = "https",
rest_options: RestClientOptions | None = None,
) -> None:
self.domain = domain
self.protocol = protocol
self.client = RestClient(
jwt=token, telemetry=telemetry, timeout=timeout, options=rest_options
)

def _url(self, id: str | None = None) -> str:
url = f"{self.protocol}://{self.domain}/api/v2/network-acls"
if id is not None:
return f"{url}/{id}"
return url

def all(
self,
page: int = 0,
per_page: int = 25,
include_totals: bool = True,
) -> List[dict[str, Any]]:
"""List self-service profiles.

Args:
page (int, optional): The result's page number (zero based). By default,
retrieves the first page of results.

per_page (int, optional): The amount of entries per page. By default,
retrieves 25 results per page.

include_totals (bool, optional): True if the query summary is
to be included in the result, False otherwise. Defaults to True.

See: https://auth0.com/docs/api/management/v2/network-acls/get-network-acls
"""

params = {
"page": page,
"per_page": per_page,
"include_totals": str(include_totals).lower(),
}

return self.client.get(self._url(), params=params)

def create(self, body: dict[str, Any]) -> dict[str, Any]:
"""Create a new self-service profile.

Args:
body (dict): Attributes for the new access control list.

See: https://auth0.com/docs/api/management/v2/network-acls/post-network-acls
"""

return self.client.post(self._url(), data=body)

def get(self, id: str) -> dict[str, Any]:
"""Get a self-service profile.

Args:
id (str): The id of the access control list to retrieve.

See: https://auth0.com/docs/api/management/v2/network-acls/get-network-acls-by-id
"""

return self.client.get(self._url(id))

def delete(self, id: str) -> None:
"""Delete a self-service profile.

Args:
id (str): The id of the access control list to delete.

See: https://auth0.com/docs/api/management/v2/network-acls/delete-network-acls-by-id
"""

self.client.delete(self._url(id))

def update(self, id: str, body: dict[str, Any]) -> dict[str, Any]:
"""Update a access control list.

Args:
id (str): The id of the access control list to update.

body (dict): Attributes of the access control list to modify.

See: https://auth0.com/docs/api/management/v2/network-acls/put-network-acls-by-id
"""

return self.client.put(self._url(id), data=body)

def update_partial(self, id: str, body: dict[str, Any]) -> dict[str, Any]:
"""Update partially the access control list.

See: https://auth0.com/docs/api/management/v2/network-acls/patch-network-acls-by-id
"""

return self.client.patch(self._url(id), data=body)


4 changes: 4 additions & 0 deletions auth0/test/management/test_auth0.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from ...management.jobs import Jobs
from ...management.log_streams import LogStreams
from ...management.logs import Logs
from ...management.network_acls import NetworkAcls
from ...management.organizations import Organizations
from ...management.prompts import Prompts
from ...management.resource_servers import ResourceServers
Expand Down Expand Up @@ -89,6 +90,9 @@ def test_log_streams(self):

def test_logs(self):
self.assertIsInstance(self.a0.logs, Logs)

def test_network_acls(self):
self.assertIsInstance(self.a0.network_acls, NetworkAcls)

def test_organizations(self):
self.assertIsInstance(self.a0.organizations, Organizations)
Expand Down
90 changes: 90 additions & 0 deletions auth0/test/management/test_network_acls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import unittest
Comment thread Dismissed
from unittest import mock

from ...management.network_acls import NetworkAcls


class TestNetworkAcls(unittest.TestCase):
def test_init_with_optionals(self):
t = NetworkAcls(
domain="domain", token="jwttoken", telemetry=False, timeout=(10, 2)
)
self.assertEqual(t.client.options.timeout, (10, 2))
telemetry_header = t.client.base_headers.get("Auth0-Client", None)
self.assertEqual(telemetry_header, None)

@mock.patch("auth0.management.network_acls.RestClient")
def test_all(self, mock_rc):
mock_instance = mock_rc.return_value

s = NetworkAcls(domain="domain", token="jwttoken")
s.all()

mock_instance.get.assert_called_with(
"https://domain/api/v2/network-acls",
params={"page": 0, "per_page": 25, "include_totals": "true"},
)

s.all(page=1, per_page=50, include_totals=False)

mock_instance.get.assert_called_with(
"https://domain/api/v2/network-acls",
params={"page": 1, "per_page": 50, "include_totals": "false"},
)

@mock.patch("auth0.management.network_acls.RestClient")
def test_create(self, mock_rc):
mock_instance = mock_rc.return_value

s = NetworkAcls(domain="domain", token="jwttoken")
s.create({"name": "test"})

mock_instance.post.assert_called_with(
"https://domain/api/v2/network-acls", data={"name": "test"}
)

@mock.patch("auth0.management.network_acls.RestClient")
def test_get(self, mock_rc):
mock_instance = mock_rc.return_value

s = NetworkAcls(domain="domain", token="jwttoken")
s.get("an-id")

mock_instance.get.assert_called_with(
"https://domain/api/v2/network-acls/an-id"
)

@mock.patch("auth0.management.network_acls.RestClient")
def test_delete(self, mock_rc):
mock_instance = mock_rc.return_value

s = NetworkAcls(domain="domain", token="jwttoken")
s.delete("an-id")

mock_instance.delete.assert_called_with(
"https://domain/api/v2/network-acls/an-id"
)

@mock.patch("auth0.management.network_acls.RestClient")
def test_update(self, mock_rc):
mock_instance = mock_rc.return_value

s = NetworkAcls(domain="domain", token="jwttoken")
s.update("an-id", {"a": "b", "c": "d"})

mock_instance.put.assert_called_with(
"https://domain/api/v2/network-acls/an-id",
data={"a": "b", "c": "d"},
)

@mock.patch("auth0.management.network_acls.RestClient")
def test_update_partial(self, mock_rc):
mock_instance = mock_rc.return_value

s = NetworkAcls(domain="domain", token="jwttoken")
s.update_partial("an-id", {"a": "b", "c": "d"})

mock_instance.patch.assert_called_with(
"https://domain/api/v2/network-acls/an-id",
data={"a": "b", "c": "d"},
)
10 changes: 9 additions & 1 deletion docs/source/management.rst
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,14 @@ management.logs module
:undoc-members:
:show-inheritance:

management.network\_acls module
-----------------------------------------

.. automodule:: auth0.management.network_acls
:members:
:undoc-members:
:show-inheritance:

management.organizations module
----------------------------------

Expand Down Expand Up @@ -177,7 +185,7 @@ management.rules module
:undoc-members:
:show-inheritance:

management.self_service_profiles module
management.self\_service\_profiles module
-----------------------------------------

.. automodule:: auth0.management.self_service_profiles
Expand Down