Merged in issue-32-python-3-6-upgrade (pull request #16)
Upgrade to Python 3.6
This commit is contained in:
commit
6e74a74d57
|
@ -1,4 +1,4 @@
|
||||||
FROM python:3.5
|
FROM python:3.6
|
||||||
MAINTAINER Dorian Pula <dorian.pula@amber-penguin-software.ca>
|
MAINTAINER Dorian Pula <dorian.pula@amber-penguin-software.ca>
|
||||||
|
|
||||||
RUN wget https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64.deb \
|
RUN wget https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64.deb \
|
||||||
|
|
|
@ -46,7 +46,7 @@ def serve_page(slug):
|
||||||
# TODO: Filter by provided APP ID, provided in the header.
|
# TODO: Filter by provided APP ID, provided in the header.
|
||||||
page = db_session.query(models.Page).filter_by(slug=slug).first()
|
page = db_session.query(models.Page).filter_by(slug=slug).first()
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error('Error retrieving "%s" page because of: %s', slug, err)
|
logger.error(f'Error retrieving "{slug}" page because of: {err}')
|
||||||
flask.abort(http.HTTPStatus.INTERNAL_SERVER_ERROR)
|
flask.abort(http.HTTPStatus.INTERNAL_SERVER_ERROR)
|
||||||
|
|
||||||
if page is None:
|
if page is None:
|
||||||
|
@ -72,7 +72,7 @@ def save_page(slug):
|
||||||
content=updated_page['content'])
|
content=updated_page['content'])
|
||||||
db_session.add(page)
|
db_session.add(page)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error('Error retrieving "%s" page because of: %s', slug, err)
|
logger.error(f'Error retrieving "{slug}" page because of: {err}')
|
||||||
flask.abort(http.HTTPStatus.INTERNAL_SERVER_ERROR)
|
flask.abort(http.HTTPStatus.INTERNAL_SERVER_ERROR)
|
||||||
else:
|
else:
|
||||||
page.slug = slug
|
page.slug = slug
|
||||||
|
|
|
@ -36,7 +36,7 @@ def app_config():
|
||||||
try:
|
try:
|
||||||
site = db_session.query(models.Site).filter_by(api_key=api_key).first()
|
site = db_session.query(models.Site).filter_by(api_key=api_key).first()
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error('Error retrieving site because of: %s', err)
|
logger.error(f'Error retrieving site because of: {err}')
|
||||||
flask.abort(http.HTTPStatus.INTERNAL_SERVER_ERROR)
|
flask.abort(http.HTTPStatus.INTERNAL_SERVER_ERROR)
|
||||||
|
|
||||||
if site is None:
|
if site is None:
|
||||||
|
@ -60,7 +60,7 @@ def menu_config():
|
||||||
try:
|
try:
|
||||||
site = db_session.query(models.Site).filter_by(api_key=api_key).first()
|
site = db_session.query(models.Site).filter_by(api_key=api_key).first()
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
logger.error('Error retrieving site because of: %s', err)
|
logger.error(f'Error retrieving site because of: {err}')
|
||||||
flask.abort(http.HTTPStatus.INTERNAL_SERVER_ERROR)
|
flask.abort(http.HTTPStatus.INTERNAL_SERVER_ERROR)
|
||||||
|
|
||||||
if site is None:
|
if site is None:
|
||||||
|
|
|
@ -85,12 +85,12 @@ def test_database(db_connection=DEFAULT_DB_CONNECTION, keep_test_db=False,
|
||||||
yield
|
yield
|
||||||
|
|
||||||
except sql_error.OperationalError as err:
|
except sql_error.OperationalError as err:
|
||||||
print('Unable to connect to the database because of "{message}" \n Stack: \n'.format(message=err))
|
print(f'Unable to connect to the database because of "{err}" \n Stack: \n')
|
||||||
traceback.print_tb(sys.exc_info()[2])
|
traceback.print_tb(sys.exc_info()[2])
|
||||||
raise err
|
raise err
|
||||||
|
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
print('Unable to run server test because of "{message}" \n Stack: \n'.format(message=err))
|
print(f'Unable to run server test because of "{err}" \n Stack: \n')
|
||||||
traceback.print_tb(sys.exc_info()[2])
|
traceback.print_tb(sys.exc_info()[2])
|
||||||
raise err
|
raise err
|
||||||
|
|
||||||
|
|
|
@ -44,5 +44,4 @@ def run(ctx, port=5000, debugging=False):
|
||||||
if debugging:
|
if debugging:
|
||||||
run_debug_server(port)
|
run_debug_server(port)
|
||||||
else:
|
else:
|
||||||
inv.run(
|
inv.run(f'uwsgi --http :{port} --master --processes 4 --module "rookeries:make_rookeries_app()"')
|
||||||
'uwsgi --http :{port} --master --processes 4 --module "rookeries:make_rookeries_app()"'.format(port=port))
|
|
||||||
|
|
|
@ -39,15 +39,14 @@ def _prepare_py_test_command(test_path, check_coverage_on='', verbosity=0, **ext
|
||||||
verbose_flag = '-{}'.format('v' * verbosity)
|
verbose_flag = '-{}'.format('v' * verbosity)
|
||||||
|
|
||||||
if verbosity >= 3:
|
if verbosity >= 3:
|
||||||
verbose_flag = '{} -r a'.format(verbose_flag)
|
verbose_flag = f'{verbose_flag} -r a'
|
||||||
|
|
||||||
coverage_flag = ''
|
coverage_flag = ''
|
||||||
if check_coverage_on:
|
if check_coverage_on:
|
||||||
coverage_flag = '--cov {pkg} --cov-report=term-missing --capture=no'.format(pkg=check_coverage_on)
|
coverage_flag = f'--cov {check_coverage_on} --cov-report=term-missing --capture=no'
|
||||||
additional_test_params = ' '.join(
|
additional_test_params = ' '.join(
|
||||||
['--{}={}'.format(key.replace('_', '-'), value) for (key, value) in extra_test_params.items()])
|
['--{}={}'.format(key.replace('_', '-'), value) for (key, value) in extra_test_params.items()])
|
||||||
return 'py.test {path} {coverage} {verbose} {extra_options}'.format(
|
return f'py.test {test_path} {coverage_flag} {verbose_flag} {additional_test_params}'
|
||||||
path=test_path, coverage=coverage_flag, verbose=verbose_flag, extra_options=additional_test_params)
|
|
||||||
|
|
||||||
|
|
||||||
@inv.task
|
@inv.task
|
||||||
|
|
|
@ -59,11 +59,11 @@ def environment(environ_modifier):
|
||||||
"""
|
"""
|
||||||
current_env = copy.deepcopy(os.environ)
|
current_env = copy.deepcopy(os.environ)
|
||||||
if not isinstance(environ_modifier, dict):
|
if not isinstance(environ_modifier, dict):
|
||||||
raise ValueError('Provided environment "{}" is a not a dict!'.format(environ_modifier))
|
raise ValueError(f'Provided environment "{environ_modifier}" is a not a dict!')
|
||||||
|
|
||||||
non_string_keys = [key for key in environ_modifier.keys() if not isinstance(key, str)]
|
non_string_keys = [key for key in environ_modifier.keys() if not isinstance(key, str)]
|
||||||
if non_string_keys:
|
if non_string_keys:
|
||||||
raise ValueError('Provided environment contains invalid keys: "{}"!'.format(non_string_keys))
|
raise ValueError(f'Provided environment contains invalid keys: "{non_string_keys}"!')
|
||||||
|
|
||||||
for environ_key, value in environ_modifier.items():
|
for environ_key, value in environ_modifier.items():
|
||||||
os.environ[environ_key] = value
|
os.environ[environ_key] = value
|
||||||
|
|
|
@ -25,4 +25,4 @@ def api_base_uri(request):
|
||||||
"""
|
"""
|
||||||
server_hostname = request.config.getoption("--server-hostname")
|
server_hostname = request.config.getoption("--server-hostname")
|
||||||
server_port = request.config.getoption("--server-port")
|
server_port = request.config.getoption("--server-port")
|
||||||
return "http://{hostname}:{port}".format(hostname=server_hostname, port=server_port)
|
return f"http://{server_hostname}:{server_port}"
|
||||||
|
|
|
@ -20,55 +20,55 @@ USER_ROLE_JWT_MAPPING = {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@mark.skip(reason="Test scenarios need work")
|
@mark.skip(reason='Test scenarios need work')
|
||||||
@bdd.scenario('site_management.feature', 'Admin user can create a new site')
|
@bdd.scenario('site_management.feature', 'Admin user can create a new site')
|
||||||
def test_site_creation_by_admin():
|
def test_site_creation_by_admin():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@mark.skip(reason="Test scenarios need work")
|
@mark.skip(reason='Test scenarios need work')
|
||||||
@bdd.scenario('site_management.feature', 'Editor user can not create a new site')
|
@bdd.scenario('site_management.feature', 'Editor user can not create a new site')
|
||||||
def test_site_creation_permissions_for_editor():
|
def test_site_creation_permissions_for_editor():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@mark.skip(reason="Test scenarios need work")
|
@mark.skip(reason='Test scenarios need work')
|
||||||
@bdd.scenario('site_management.feature', 'Any user can get an existing site')
|
@bdd.scenario('site_management.feature', 'Any user can get an existing site')
|
||||||
def test_site_fetch():
|
def test_site_fetch():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@mark.skip(reason="Test scenarios need work")
|
@mark.skip(reason='Test scenarios need work')
|
||||||
@bdd.scenario('site_management.feature', 'Admin user can modify a site')
|
@bdd.scenario('site_management.feature', 'Admin user can modify a site')
|
||||||
def test_site_modification_by_admin():
|
def test_site_modification_by_admin():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@mark.skip(reason="Test scenarios need work")
|
@mark.skip(reason='Test scenarios need work')
|
||||||
@bdd.scenario('site_management.feature', 'Editor user can not modify a site')
|
@bdd.scenario('site_management.feature', 'Editor user can not modify a site')
|
||||||
def test_site_modifications_permissions_for_editor():
|
def test_site_modifications_permissions_for_editor():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@mark.skip(reason="Test scenarios need work")
|
@mark.skip(reason='Test scenarios need work')
|
||||||
@bdd.scenario('site_management.feature', 'Admin user can modify a site\'s menu')
|
@bdd.scenario('site_management.feature', 'Admin user can modify a site\'s menu')
|
||||||
def test_site_menu_modification_by_admin():
|
def test_site_menu_modification_by_admin():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@mark.skip(reason="Test scenarios need work")
|
@mark.skip(reason='Test scenarios need work')
|
||||||
@bdd.scenario('site_management.feature', 'Editor user can not modify a site\'s menu')
|
@bdd.scenario('site_management.feature', 'Editor user can not modify a site\'s menu')
|
||||||
def test_site_menu_modifications_permissions_for_editor():
|
def test_site_menu_modifications_permissions_for_editor():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@mark.skip(reason="Test scenarios need work")
|
@mark.skip(reason='Test scenarios need work')
|
||||||
@bdd.scenario('site_management.feature', 'Admin user can delete a site')
|
@bdd.scenario('site_management.feature', 'Admin user can delete a site')
|
||||||
def test_site_deletion_by_admin():
|
def test_site_deletion_by_admin():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@mark.skip(reason="Test scenarios need work")
|
@mark.skip(reason='Test scenarios need work')
|
||||||
@bdd.scenario('site_management.feature', 'Editor user can not delete a site')
|
@bdd.scenario('site_management.feature', 'Editor user can not delete a site')
|
||||||
def test_site_deletion_permissions_for_editor():
|
def test_site_deletion_permissions_for_editor():
|
||||||
pass
|
pass
|
||||||
|
@ -82,7 +82,7 @@ def user_credentials(user_role):
|
||||||
@bdd.when('I create a site')
|
@bdd.when('I create a site')
|
||||||
def posted_response_from_auth_endpoint(user_credentials, api_base_uri):
|
def posted_response_from_auth_endpoint(user_credentials, api_base_uri):
|
||||||
# TODO: Needs work
|
# TODO: Needs work
|
||||||
response = requests.post("{}/auth".format(api_base_uri), json={
|
response = requests.post(f'{api_base_uri}/auth', json={
|
||||||
'username': user_credentials.username,
|
'username': user_credentials.username,
|
||||||
'password': user_credentials.password,
|
'password': user_credentials.password,
|
||||||
})
|
})
|
||||||
|
|
|
@ -52,7 +52,7 @@ def user_credentials(user_type, login_type):
|
||||||
|
|
||||||
@bdd.when('I post my credentials against the auth endpoint')
|
@bdd.when('I post my credentials against the auth endpoint')
|
||||||
def posted_response_from_auth_endpoint(user_credentials, api_base_uri):
|
def posted_response_from_auth_endpoint(user_credentials, api_base_uri):
|
||||||
response = requests.post("{}/auth".format(api_base_uri), json={
|
response = requests.post(f'{api_base_uri}/auth', json={
|
||||||
'username': user_credentials.username,
|
'username': user_credentials.username,
|
||||||
'password': user_credentials.password,
|
'password': user_credentials.password,
|
||||||
})
|
})
|
||||||
|
|
|
@ -18,6 +18,6 @@ def convert_response_into_json(response: wrappers.Response) -> dict:
|
||||||
"""
|
"""
|
||||||
content_type = response.content_type.lower()
|
content_type = response.content_type.lower()
|
||||||
if content_type != "application/json":
|
if content_type != "application/json":
|
||||||
raise ValueError("Expected a JSON response. Got \"{}\" instead.".format(content_type))
|
raise ValueError(f"Expected a JSON response. Got \"{content_type}\" instead.")
|
||||||
json_text = response.get_data(as_text=True)
|
json_text = response.get_data(as_text=True)
|
||||||
return json.loads(json_text)
|
return json.loads(json_text)
|
||||||
|
|
Loading…
Reference in New Issue