Skip to content

Commit

Permalink
Addressing feedback
Browse files Browse the repository at this point in the history
Importing configs directly

fix warnings

fix warnings

fix warnings
  • Loading branch information
pragatimodi committed Jun 12, 2023
1 parent 160f983 commit 8b87e10
Show file tree
Hide file tree
Showing 8 changed files with 56 additions and 45 deletions.
11 changes: 6 additions & 5 deletions firebase_admin/multi_factor_config_mgt.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,25 +44,25 @@ class MultiFactorServerConfig:
def __init__(self, data):
if not isinstance(data, dict):
raise ValueError(
'Invalid data argument in MultiFactorConfig constructor: {0}'.format(data))
'Invalid data argument in MultiFactorServerConfig constructor: {0}'.format(data))
self._data = data

@property
def provider_configs(self):
data = self._data.get('providerConfigs', None)
if data is not None:
return [self.ProviderConfigServerConfig(d) for d in data]
return [self.ProviderServerConfig(d) for d in data]
return None

class ProviderConfigServerConfig:
class ProviderServerConfig:
"""Represents provider configuration response received from the server and converts
it to user format.
"""

def __init__(self, data):
if not isinstance(data, dict):
raise ValueError(
'Invalid data argument in ProviderConfig constructor: {0}'.format(data))
'Invalid data argument in ProviderServerConfig constructor: {0}'.format(data))
self._data = data

@property
Expand All @@ -84,7 +84,8 @@ class TOTPProviderServerConfig:
def __init__(self, data):
if not isinstance(data, dict):
raise ValueError(
'Invalid data argument in TOTPProviderConfig constructor: {0}'.format(data))
'Invalid data argument in TOTPProviderServerConfig'
' constructor: {0}'.format(data))
self._data = data

@property
Expand Down
1 change: 0 additions & 1 deletion firebase_admin/project_config_mgt.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@

__all__ = [
'ProjectConfig',

'get_project_config',
'update_project_config',
]
Expand Down
32 changes: 19 additions & 13 deletions firebase_admin/tenant_mgt.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,11 @@

import firebase_admin
from firebase_admin import auth
from firebase_admin import multi_factor_config_mgt
from firebase_admin import _auth_utils
from firebase_admin import _http_client
from firebase_admin import _utils
from firebase_admin.multi_factor_config_mgt import MultiFactorConfig
from firebase_admin.multi_factor_config_mgt import MultiFactorServerConfig


_TENANT_MGT_ATTRIBUTE = '_tenant_mgt'
Expand Down Expand Up @@ -93,7 +94,7 @@ def get_tenant(tenant_id, app=None):

def create_tenant(
display_name, allow_password_sign_up=None, enable_email_link_sign_in=None,
multi_factor_config: multi_factor_config_mgt.MultiFactorConfig = None, app=None):
multi_factor_config: MultiFactorConfig = None, app=None):
"""Creates a new tenant from the given options.
Args:
Expand Down Expand Up @@ -122,7 +123,7 @@ def create_tenant(

def update_tenant(
tenant_id, display_name=None, allow_password_sign_up=None, enable_email_link_sign_in=None,
multi_factor_config: multi_factor_config_mgt.MultiFactorConfig = None, app=None):
multi_factor_config: MultiFactorConfig = None, app=None):
"""Updates an existing tenant with the given options.
Args:
Expand Down Expand Up @@ -189,6 +190,7 @@ def list_tenants(page_token=None, max_results=_MAX_LIST_TENANTS_RESULTS, app=Non
FirebaseError: If an error occurs while retrieving the user accounts.
"""
tenant_mgt_service = _get_tenant_mgt_service(app)

def download(page_token, max_results):
return tenant_mgt_service.list_tenants(page_token, max_results)
return ListTenantsPage(download, page_token, max_results)
Expand All @@ -211,7 +213,8 @@ class Tenant:

def __init__(self, data):
if not isinstance(data, dict):
raise ValueError('Invalid data argument in Tenant constructor: {0}'.format(data))
raise ValueError(
'Invalid data argument in Tenant constructor: {0}'.format(data))
if not 'name' in data:
raise ValueError('Tenant response missing required keys.')

Expand All @@ -238,7 +241,7 @@ def enable_email_link_sign_in(self):
def multi_factor_config(self):
data = self._data.get('mfaConfig', None)
if data is not None:
return multi_factor_config_mgt.MultiFactorServerConfig(data)
return MultiFactorServerConfig(data)
return None


Expand All @@ -250,7 +253,8 @@ class _TenantManagementService:
def __init__(self, app):
credential = app.credential.get_credential()
version_header = 'Python/Admin/{0}'.format(firebase_admin.__version__)
base_url = '{0}/projects/{1}'.format(self.TENANT_MGT_URL, app.project_id)
base_url = '{0}/projects/{1}'.format(
self.TENANT_MGT_URL, app.project_id)
self.app = app
self.client = _http_client.JsonHttpClient(
credential=credential, base_url=base_url, headers={'X-Client-Version': version_header})
Expand All @@ -269,7 +273,7 @@ def auth_for_tenant(self, tenant_id):

client = auth.Client(self.app, tenant_id=tenant_id)
self.tenant_clients[tenant_id] = client
return client
return client

def get_tenant(self, tenant_id):
"""Gets the tenant corresponding to the given ``tenant_id``."""
Expand All @@ -286,7 +290,7 @@ def get_tenant(self, tenant_id):

def create_tenant(
self, display_name, allow_password_sign_up=None, enable_email_link_sign_in=None,
multi_factor_config: multi_factor_config_mgt.MultiFactorConfig = None):
multi_factor_config: MultiFactorConfig = None):
"""Creates a new tenant from the given parameters."""

payload = {'displayName': _validate_display_name(display_name)}
Expand All @@ -297,7 +301,7 @@ def create_tenant(
payload['enableEmailLinkSignin'] = _auth_utils.validate_boolean(
enable_email_link_sign_in, 'enableEmailLinkSignin')
if multi_factor_config is not None:
if not isinstance(multi_factor_config, multi_factor_config_mgt.MultiFactorConfig):
if not isinstance(multi_factor_config, MultiFactorConfig):
raise ValueError(
'multi_factor_config must be of type MultiFactorConfig.')
payload['mfaConfig'] = multi_factor_config.build_server_request()
Expand All @@ -311,7 +315,7 @@ def create_tenant(
def update_tenant(
self, tenant_id, display_name=None, allow_password_sign_up=None,
enable_email_link_sign_in=None,
multi_factor_config: multi_factor_config_mgt.MultiFactorConfig = None):
multi_factor_config: MultiFactorConfig = None):
"""Updates the specified tenant with the given parameters."""
if not isinstance(tenant_id, str) or not tenant_id:
raise ValueError('Tenant ID must be a non-empty string.')
Expand All @@ -326,12 +330,14 @@ def update_tenant(
payload['enableEmailLinkSignin'] = _auth_utils.validate_boolean(
enable_email_link_sign_in, 'enableEmailLinkSignin')
if multi_factor_config is not None:
if not isinstance(multi_factor_config, multi_factor_config_mgt.MultiFactorConfig):
raise ValueError('multi_factor_config must be of type MultiFactorConfig.')
if not isinstance(multi_factor_config, MultiFactorConfig):
raise ValueError(
'multi_factor_config must be of type MultiFactorConfig.')
payload['mfaConfig'] = multi_factor_config.build_server_request()

if not payload:
raise ValueError('At least one parameter must be specified for update.')
raise ValueError(
'At least one parameter must be specified for update.')

url = '/tenants/{0}'.format(tenant_id)
update_mask = ','.join(_auth_utils.build_update_mask(payload))
Expand Down
9 changes: 5 additions & 4 deletions integration/test_project_config_mgt.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
from firebase_admin import project_config_mgt
from firebase_admin import multi_factor_config_mgt

ADJACENT_INTERVALS = 5

@pytest.fixture(scope='module')
def sample_mfa_config():
Expand All @@ -27,7 +28,7 @@ def sample_mfa_config():
{
'state': 'ENABLED',
'totpProviderConfig': {
'adjacentIntervals': 5
'adjacentIntervals': ADJACENT_INTERVALS
}
}
]
Expand Down Expand Up @@ -61,9 +62,9 @@ def _assert_multi_factor_config(multi_factor_config):
assert isinstance(multi_factor_config.provider_configs, list)
for provider_config in multi_factor_config.provider_configs:
assert isinstance(provider_config, multi_factor_config_mgt.MultiFactorServerConfig
.ProviderConfigServerConfig)
.ProviderServerConfig)
assert provider_config.state == 'ENABLED'
assert isinstance(provider_config.totp_provider_config,
multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig
multi_factor_config_mgt.MultiFactorServerConfig.ProviderServerConfig
.TOTPProviderServerConfig)
assert provider_config.totp_provider_config.adjacent_intervals == 5
assert provider_config.totp_provider_config.adjacent_intervals == ADJACENT_INTERVALS
4 changes: 2 additions & 2 deletions integration/test_tenant_mgt.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,10 @@ def _assert_multi_factor_config(mfa_config):
assert isinstance(mfa_config.provider_configs, list)
for provider_config in mfa_config.provider_configs:
assert isinstance(provider_config, multi_factor_config_mgt.MultiFactorServerConfig.\
ProviderConfigServerConfig)
ProviderServerConfig)
assert provider_config.state == 'ENABLED'
assert isinstance(provider_config.totp_provider_config,
multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig
multi_factor_config_mgt.MultiFactorServerConfig.ProviderServerConfig
.TOTPProviderServerConfig)
assert provider_config.totp_provider_config.adjacent_intervals == 5

Expand Down
14 changes: 7 additions & 7 deletions tests/test_multi_factor_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,22 +135,22 @@ def test_invalid_multi_factor_config_response(self):
test_config = 'invalid'
with pytest.raises(ValueError) as excinfo:
multi_factor_config_mgt.MultiFactorServerConfig(test_config)
assert str(excinfo.value).startswith('Invalid data argument in MultiFactorConfig'
assert str(excinfo.value).startswith('Invalid data argument in MultiFactorServerConfig'
' constructor: {0}'.format(test_config))

def test_invalid_provider_config_response(self):
test_config = 'invalid'
with pytest.raises(ValueError) as excinfo:
multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig(test_config)
assert str(excinfo.value).startswith('Invalid data argument in ProviderConfig'
multi_factor_config_mgt.MultiFactorServerConfig.ProviderServerConfig(test_config)
assert str(excinfo.value).startswith('Invalid data argument in ProviderServerConfig'
' constructor: {0}'.format(test_config))

def test_invalid_totp_provider_config_response(self):
test_config = 'invalid'
with pytest.raises(ValueError) as excinfo:
multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig.\
multi_factor_config_mgt.MultiFactorServerConfig.ProviderServerConfig.\
TOTPProviderServerConfig(test_config)
assert str(excinfo.value).startswith('Invalid data argument in TOTPProviderConfig'
assert str(excinfo.value).startswith('Invalid data argument in TOTPProviderServerConfig'
' constructor: {0}'.format(test_config))

def test_valid_server_response(self):
Expand All @@ -173,9 +173,9 @@ def _assert_multi_factor_config(mfa_config):
for provider_config in mfa_config.provider_configs:
assert isinstance(
provider_config,
multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig)
multi_factor_config_mgt.MultiFactorServerConfig.ProviderServerConfig)
assert provider_config.state == 'ENABLED'
assert isinstance(provider_config.totp_provider_config,
multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig
multi_factor_config_mgt.MultiFactorServerConfig.ProviderServerConfig
.TOTPProviderServerConfig)
assert provider_config.totp_provider_config.adjacent_intervals == 5
14 changes: 8 additions & 6 deletions tests/test_project_config_mgt.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
from firebase_admin import multi_factor_config_mgt


ADJACENT_INTERVALS = 5

GET_PROJECT_RESPONSE = """{
"mfaConfig":{
"providerConfigs":[
Expand Down Expand Up @@ -75,7 +77,7 @@ def test_project_config(self):
{
'state': 'ENABLED',
'totpProviderConfig': {
'adjacentIntervals': 5,
'adjacentIntervals': ADJACENT_INTERVALS,
}
}
]
Expand Down Expand Up @@ -129,7 +131,7 @@ def test_update_project_config(self, project_config_mgt_app):
multi_factor_config_mgt.ProviderConfig(
state=multi_factor_config_mgt.ProviderConfig.State.ENABLED,
totp_provider_config=multi_factor_config_mgt.TOTPProviderConfig(
adjacent_intervals=5
adjacent_intervals=ADJACENT_INTERVALS
)
)
]
Expand All @@ -146,7 +148,7 @@ def test_update_project_config(self, project_config_mgt_app):
{
'state': 'ENABLED',
'totpProviderConfig': {
'adjacentIntervals': 5,
'adjacentIntervals': ADJACENT_INTERVALS,
}
}
]
Expand All @@ -168,12 +170,12 @@ def _assert_multi_factor_config(multi_factor_config):
assert isinstance(multi_factor_config.provider_configs, list)
for provider_config in multi_factor_config.provider_configs:
assert isinstance(provider_config, multi_factor_config_mgt.MultiFactorServerConfig
.ProviderConfigServerConfig)
.ProviderServerConfig)
assert provider_config.state == 'ENABLED'
assert isinstance(provider_config.totp_provider_config,
multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig
multi_factor_config_mgt.MultiFactorServerConfig.ProviderServerConfig
.TOTPProviderServerConfig)
assert provider_config.totp_provider_config.adjacent_intervals == 5
assert provider_config.totp_provider_config.adjacent_intervals == ADJACENT_INTERVALS

def _assert_project_config(project_config):
if project_config.multi_factor_config is not None:
Expand Down
16 changes: 9 additions & 7 deletions tests/test_tenant_mgt.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
from tests import test_token_gen


ADJACENT_INTERVALS = 5

GET_TENANT_RESPONSE = """{
"name": "projects/mock-project-id/tenants/tenant-id",
"displayName": "Test Tenant",
Expand Down Expand Up @@ -260,7 +262,7 @@ def test_create_tenant(self, tenant_mgt_app):
multi_factor_config_mgt.ProviderConfig(
state=multi_factor_config_mgt.ProviderConfig.State.ENABLED,
totp_provider_config=multi_factor_config_mgt.TOTPProviderConfig(
adjacent_intervals=5
adjacent_intervals=ADJACENT_INTERVALS
)
)
]
Expand All @@ -279,7 +281,7 @@ def test_create_tenant(self, tenant_mgt_app):
{
'state': 'ENABLED',
'totpProviderConfig': {
'adjacentIntervals': 5
'adjacentIntervals': ADJACENT_INTERVALS
}
}
]
Expand Down Expand Up @@ -379,7 +381,7 @@ def test_update_tenant(self, tenant_mgt_app):
multi_factor_config_mgt.ProviderConfig(
state=multi_factor_config_mgt.ProviderConfig.State.ENABLED,
totp_provider_config=multi_factor_config_mgt.TOTPProviderConfig(
adjacent_intervals=5
adjacent_intervals=ADJACENT_INTERVALS
)
)
]
Expand All @@ -399,7 +401,7 @@ def test_update_tenant(self, tenant_mgt_app):
{
'state': 'ENABLED',
'totpProviderConfig': {
'adjacentIntervals': 5
'adjacentIntervals': ADJACENT_INTERVALS
}
}
]
Expand Down Expand Up @@ -1068,12 +1070,12 @@ def _assert_multi_factor_config(mfa_config):
assert isinstance(mfa_config.provider_configs, list)
for provider_config in mfa_config.provider_configs:
assert isinstance(provider_config, multi_factor_config_mgt.MultiFactorServerConfig.\
ProviderConfigServerConfig)
ProviderServerConfig)
assert provider_config.state == 'ENABLED'
assert isinstance(provider_config.totp_provider_config,
multi_factor_config_mgt.MultiFactorServerConfig.ProviderConfigServerConfig
multi_factor_config_mgt.MultiFactorServerConfig.ProviderServerConfig
.TOTPProviderServerConfig)
assert provider_config.totp_provider_config.adjacent_intervals == 5
assert provider_config.totp_provider_config.adjacent_intervals == ADJACENT_INTERVALS

def _assert_tenant(tenant, tenant_id='tenant-id'):
assert isinstance(tenant, tenant_mgt.Tenant)
Expand Down

0 comments on commit 8b87e10

Please sign in to comment.