Skip to content

Commit af91922

Browse files
Merge pull request #482 from adorton-adobe/feature/click
Feature - CLI Refactor
2 parents 131c074 + db2fac0 commit af91922

File tree

10 files changed

+268
-197
lines changed

10 files changed

+268
-197
lines changed

.build/pre_build.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,23 @@
1+
import os
2+
import shutil
3+
4+
5+
def cd():
6+
os.chdir(os.path.realpath(os.path.join(os.path.dirname(__file__), '..')))
7+
8+
9+
def bundle_example_config():
10+
examples_dir = os.path.join('examples', 'config files - basic')
11+
files = [os.path.join(examples_dir, f) for f in os.listdir(examples_dir) if
12+
os.path.isfile(os.path.join(examples_dir, f))]
13+
bundle_dir = os.path.join('user_sync', 'resources', 'examples')
14+
if not os.path.exists(bundle_dir):
15+
os.mkdir(bundle_dir)
16+
for f in files:
17+
dest = os.path.join(bundle_dir, os.path.split(f)[-1])
18+
shutil.copy(f, dest)
19+
20+
121
if __name__ == '__main__':
2-
pass
22+
cd()
23+
bundle_example_config()

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,8 @@ ENV/
9595
_site
9696
.sass-cache
9797
.jekyll-metadata
98+
99+
user_sync/resources/*
100+
!user_sync/resources/__init__.py
101+
!user_sync/resources/README.md
102+
!user_sync/resources/manual_url

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ endif
1818
pex:
1919
python -m pip install --upgrade pip
2020
python -m pip install --upgrade 'wheel<0.30.0' requests pex==1.5.3
21+
python .build/pre_build.py
2122
-$(RM) $(output_dir)
2223
pex -v -o $(output_dir)/$(output_filename)$(output_file_extension) -m user_sync.app \
2324
-f $(prebuilt_dir) \

setup.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1919
# SOFTWARE.
2020

21-
from setuptools import setup
21+
from setuptools import setup, find_packages
2222

2323
version_namespace = {}
2424
with open('user_sync/version.py') as f:
@@ -44,7 +44,7 @@
4444
maintainer='Daniel Brotsky',
4545
maintainer_email='[email protected]',
4646
license='MIT',
47-
packages=['user_sync', 'user_sync.connector'],
47+
packages=find_packages(),
4848
install_requires=[
4949
'keyring',
5050
'okta==0.0.3.1',
@@ -54,6 +54,8 @@
5454
'PyYAML',
5555
'six',
5656
'umapi-client>=2.12',
57+
'click',
58+
'click-default-group',
5759
],
5860
extras_require={
5961
':sys_platform=="linux" or sys_platform=="linux2"': [
@@ -73,4 +75,5 @@
7375
'user_sync = user_sync.app:main'
7476
]
7577
},
78+
package_data={'user_sync.resources': ['*', 'examples/*']},
7679
zip_safe=False)

tests/conftest.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,27 @@
11
import os
22
import pytest
3+
from user_sync import config
34

45

56
@pytest.fixture
67
def fixture_dir():
78
return os.path.abspath(
89
os.path.join(
910
os.path.dirname(__file__), 'fixture'))
11+
12+
13+
@pytest.fixture
14+
def cli_args():
15+
def _cli_args(args_in):
16+
"""
17+
:param dict args:
18+
:return dict:
19+
"""
20+
21+
args_out = {}
22+
for k in config.ConfigLoader.invocation_defaults:
23+
args_out[k] = None
24+
for k, v in args_in.items():
25+
args_out[k] = v
26+
return args_out
27+
return _cli_args

tests/test_config.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,13 @@ def test_load_root(root_config_file):
8282
'invocation_defaults' in config)
8383

8484

85-
def test_max_adobe_percentage(modify_root_config, caplog):
85+
def test_max_adobe_percentage(modify_root_config, cli_args):
8686
root_config_file = modify_root_config(['limits', 'max_adobe_only_users'], "50%")
8787
config = ConfigFileLoader.load_root_config(root_config_file)
8888
assert ('limits' in config and 'max_adobe_only_users' in config['limits'] and
8989
config['limits']['max_adobe_only_users'] == "50%")
9090

91-
args = app.process_args(['-c', root_config_file])
91+
args = cli_args({'config_filename': root_config_file})
9292
options = ConfigLoader(args).get_rule_options()
9393
assert 'max_adobe_only_users' in options and options['max_adobe_only_users'] == '50%'
9494

@@ -97,7 +97,7 @@ def test_max_adobe_percentage(modify_root_config, caplog):
9797
ConfigLoader(args).get_rule_options()
9898

9999

100-
def test_additional_groups_config(modify_root_config, caplog):
100+
def test_additional_groups_config(modify_root_config, cli_args):
101101
addl_groups = [
102102
{"source": r"ACL-(.+)", "target": r"ACL-Grp-(\1)"},
103103
{"source": r"(.+)-ACL", "target": r"ACL-Grp-(\1)"},
@@ -107,17 +107,17 @@ def test_additional_groups_config(modify_root_config, caplog):
107107
assert ('additional_groups' in config['directory_users'] and
108108
len(config['directory_users']['additional_groups']) == 2)
109109

110-
args = app.process_args(['-c', root_config_file])
110+
args = cli_args({'config_filename': root_config_file})
111111
options = ConfigLoader(args).get_rule_options()
112112
assert addl_groups[0]['source'] in options['additional_groups'][0]['source'].pattern
113113
assert addl_groups[1]['source'] in options['additional_groups'][1]['source'].pattern
114114

115115

116-
def test_twostep_config(tmp_config_files, modify_ldap_config, caplog):
116+
def test_twostep_config(tmp_config_files, modify_ldap_config, cli_args):
117117
(root_config_file, ldap_config_file, _) = tmp_config_files
118118
modify_ldap_config(['two_steps_lookup'], {})
119119

120-
args = app.process_args(['-c', root_config_file])
120+
args = cli_args({'config_filename': root_config_file})
121121

122122
# test invalid "two_steps_lookup" config
123123
with pytest.raises(AssertionException):
@@ -138,9 +138,9 @@ def test_twostep_config(tmp_config_files, modify_ldap_config, caplog):
138138
assert options['two_steps_lookup']['group_member_attribute_name'] == 'member'
139139

140140

141-
def test_adobe_users_config(tmp_config_files, modify_root_config):
141+
def test_adobe_users_config(tmp_config_files, modify_root_config, cli_args):
142142
(root_config_file, _, _) = tmp_config_files
143-
args = app.process_args(['-c', root_config_file])
143+
args = cli_args({'config_filename': root_config_file})
144144

145145
# test default
146146
config_loader = ConfigLoader(args)
@@ -157,7 +157,7 @@ def test_adobe_users_config(tmp_config_files, modify_root_config):
157157

158158
# test command line param
159159
modify_root_config(['invocation_defaults', 'adobe_users'], "all")
160-
args = app.process_args(['-c', root_config_file, '--adobe-users', 'mapped'])
160+
args = cli_args({'config_filename': root_config_file, 'adobe_users': ['mapped']})
161161
config_loader = ConfigLoader(args)
162162
options = config_loader.load_invocation_options()
163163
assert 'adobe_users' in options

0 commit comments

Comments
 (0)