From cf91b6a43948fccd0ccfc9c468e5dacda7a4bb1f Mon Sep 17 00:00:00 2001 From: Andressa Magalhaes Date: Sun, 31 Oct 2021 19:31:48 -0300 Subject: [PATCH] updating string formation to f-string --- actionlogger/actionlogger.py | 6 +- actionlogger/models.py | 2 +- helpers/docker/keystone/create_db.py | 2 +- helpers/docker/vault/create_db.py | 2 +- identity/keystone.py | 23 +++-- identity/tests/fakes.py | 2 +- identity/tests/test_keystone.py | 8 +- identity/views.py | 40 ++++---- storage/models.py | 3 +- storage/utils.py | 12 +-- storage/views/backup.py | 64 +++++------- storage/views/cache.py | 3 +- storage/views/main.py | 120 +++++++++++------------ vault/client.py | 2 +- vault/jsoninfo.py | 18 +--- vault/management/commands/create_user.py | 26 +++-- vault/models.py | 2 +- vault/settings.py | 9 +- vault/utils.py | 2 +- 19 files changed, 152 insertions(+), 194 deletions(-) diff --git a/actionlogger/actionlogger.py b/actionlogger/actionlogger.py index c40e0829..e90d932f 100644 --- a/actionlogger/actionlogger.py +++ b/actionlogger/actionlogger.py @@ -30,7 +30,7 @@ def __init__(self): def log(self, user, action, item): if action not in self._actions.keys(): - raise ActionNotFound("Invalid action: '{}'".format(action)) + raise ActionNotFound(f"Invalid action: '{action}'") audit = Audit(user=user, action=self._actions[action], @@ -41,6 +41,4 @@ def log(self, user, action, item): syslog.syslog(syslog.LOG_INFO, msg) def _make_log_message(self, user, action, item): - return 'Usuario {} {} {}'.format(user, - self._actions[action], - str(item)) + return f'Usuario {user} {self._actions[action]} {str(item)}' diff --git a/actionlogger/models.py b/actionlogger/models.py index a11c4bdb..4cfbcfb1 100644 --- a/actionlogger/models.py +++ b/actionlogger/models.py @@ -15,4 +15,4 @@ class Meta: db_table = 'audit' def __str__(self): - return "{} - {} - {} - {}".format(self.user, self.action, self.item, self.created_at) + return f"{self.user} - {self.action} - {self.item} - {self.created_at}" \ No newline at end of file diff --git a/helpers/docker/keystone/create_db.py b/helpers/docker/keystone/create_db.py index 0d3f3c44..c48456b8 100644 --- a/helpers/docker/keystone/create_db.py +++ b/helpers/docker/keystone/create_db.py @@ -22,7 +22,7 @@ def run(): print('Database server connected!') except MySQLdb.MySQLError: attempt += 1 - print('Database server not connected. Trying again in {} seconds...'.format(INTERVAL)) + print(f'Database server not connected. Trying again in {INTERVAL} seconds...') sleep(INTERVAL) if connected: diff --git a/helpers/docker/vault/create_db.py b/helpers/docker/vault/create_db.py index 6dc30acf..2cb0cfec 100644 --- a/helpers/docker/vault/create_db.py +++ b/helpers/docker/vault/create_db.py @@ -22,7 +22,7 @@ def run(): print('Database server connected!') except MySQLdb.MySQLError: attempt += 1 - print('Database server not connected. Trying again in {} seconds...'.format(INTERVAL)) + print(f'Database server not connected. Trying again in {INTERVAL} seconds...') sleep(INTERVAL) if connected: diff --git a/identity/keystone.py b/identity/keystone.py index caf0abff..55379283 100644 --- a/identity/keystone.py +++ b/identity/keystone.py @@ -227,13 +227,13 @@ def vault_project_create(self, project_name, group_id, description=None, enabled=True, **kwargs) except exceptions.Conflict as err: - log.error('Error: {}'.format(err)) + log.error(f'Error: {err}') return { 'status': False, 'reason': 'Duplicated project name.' } except exceptions.Forbidden as err: - log.error('Error: {}'.format(err)) + log.error(f'Error: {err}') return { 'status': False, 'reason': 'Superuser required.' @@ -245,14 +245,14 @@ def vault_project_create(self, project_name, group_id, description=None, try: admin_password = Keystone.create_password() admin_user = self.user_create( - name='u_{}'.format(project_name), + name=f'u_{project_name}', password=admin_password, role_id=swiftop, project_id=project.id ) except exceptions.Forbidden as err: self.project_delete(project.id) - log.error('Error: {}'.format(err)) + log.error(f'Error: {err}') return { 'status': False, 'reason': 'Admin User required' @@ -260,7 +260,7 @@ def vault_project_create(self, project_name, group_id, description=None, # Creates internal user and add swiftoperator role try: - user_name = 'u_vault_{}'.format(project_name) + user_name = f'u_vault_{project_name}' internal_password = Keystone.create_password() internal_user = self.user_create( name=user_name, @@ -274,7 +274,7 @@ def vault_project_create(self, project_name, group_id, description=None, except exceptions.Forbidden as err: self.user_delete(admin_user.id) self.project_delete(project.id) - log.error('Error: {}'.format(err)) + log.error(f'Error: {err}') return { 'status': False, 'reason': 'Internal User required' @@ -294,7 +294,7 @@ def vault_project_create(self, project_name, group_id, description=None, self.user_delete(admin_user.id) self.user_delete(internal_user.id) self.project_delete(project.id) - log.error('Error: {}'.format(err)) + log.error(f'Error: {err}') return { 'status': False, 'reason': 'Project User required' @@ -309,7 +309,7 @@ def vault_project_create(self, project_name, group_id, description=None, self.user_delete(admin_user.id) self.user_delete(internal_user.id) self.project_delete(project.id) - log.error('Error: {}'.format(err)) + log.error(f'Error: {err}') return { 'status': False, 'reason': 'Unable to assign project to group' @@ -403,8 +403,7 @@ def vault_project_delete(self, project_name): # Swift returns 404 if the project had never been used if del_swift.status_code not in (204, 404): - reason = 'Unable to delete project from Swift (HTTP {})'.format( - del_swift.status_code) + reason = f'Unable to delete project from Swift (HTTP {del_swift.status_code})' return { 'status': False, @@ -431,7 +430,7 @@ def vault_project_delete(self, project_name): try: self.project_delete(project.id) except Exception as err: - log.error('Error: {}'.format(err)) + log.error(f'Error: {err}') return { 'status': False, 'reason': err @@ -461,7 +460,7 @@ def find_user_with_u_prefix(self, project_id, prefix): users = self.user_list(project.id) for user in users: - if user.name == '{}_{}'.format(prefix, project.name): + if user.name == f'{prefix}_{project.name}': return user return None diff --git a/identity/tests/fakes.py b/identity/tests/fakes.py index 20dff228..7b1a5e31 100644 --- a/identity/tests/fakes.py +++ b/identity/tests/fakes.py @@ -52,7 +52,7 @@ class Meta: # strategy = factory.BUILD_STRATEGY # id = factory.Sequence(lambda n: n) - name = factory.Sequence(lambda n: "Group #{}".format(n)) + name = factory.Sequence(lambda n: f"Group #{n}") class UserFactory(factory.django.DjangoModelFactory): diff --git a/identity/tests/test_keystone.py b/identity/tests/test_keystone.py index 0911e820..bd4cf8c7 100644 --- a/identity/tests/test_keystone.py +++ b/identity/tests/test_keystone.py @@ -145,7 +145,7 @@ def test_vault_create_project(self, mock_gp_create, mock_key_user, mock_encrypt_password): - mock_key_user.return_value = FakeResource(n=self.project.id, name='u_{}'.format(self.project.name)) + mock_key_user.return_value = FakeResource(n=self.project.id, name=f'u_{self.project.name}') mock_key_pass.return_value = 'password' mock_encrypt_password.return_value = b'123456' @@ -168,7 +168,7 @@ def test_vault_create_project(self, mock_gp_create, enabled=True) # User creation - mock_key_user.assert_called_with(name='u_vault_{}'.format(self.project.name), + mock_key_user.assert_called_with(name=f'u_vault_{self.project.name}', email='', password='password', enabled=True, @@ -186,7 +186,7 @@ def test_vault_create_project(self, mock_gp_create, def test_vault_create_project_forbidden_on_project_create(self, mock_key_user): self.mock_project_create.side_effect = exceptions.Forbidden - mock_key_user.return_value = FakeResource(n=self.project.id, name='u_{}'.format(self.project.name)) + mock_key_user.return_value = FakeResource(n=self.project.id, name=f'u_{self.project.name}') keystone = Keystone(self.request, project_name='project_name') @@ -231,7 +231,7 @@ def test_vault_create_project_fail_to_save_group_project_on_db(self, mock_gp_sav mock_project_delete, mock_encrypt_password): - fake_user = FakeResource(n=self.project.id, name='u_{}'.format(self.project.name)) + fake_user = FakeResource(n=self.project.id, name=f'u_{self.project.name}') mock_user_create.return_value = fake_user # Excecao ao salvar no db diff --git a/identity/views.py b/identity/views.py index 2b26e899..3a554982 100644 --- a/identity/views.py +++ b/identity/views.py @@ -50,7 +50,7 @@ def dispatch(self, request, *args, **kwargs): if self.keystone.conn is None: msg = _("Authorization error") messages.add_message(request, messages.ERROR, msg) - log.error("Keystone: {}".format(msg)) + log.error(f"Keystone: {msn}") return super(WithKeystoneMixin, self).dispatch(request, *args, **kwargs) @@ -67,7 +67,7 @@ def get_context_data(self, **kwargs): try: users = self.keystone.user_list() except Exception as e: - log.exception("{}{}".format(_("Exception:").encode("UTF-8"), e)) + log.exception(f'{_("Exception:").encode("UTF-8")}{e}') messages.add_message(self.request, messages.ERROR, _("Unable to list users")) sorted_users = sorted(users, key=lambda l: l.name.lower()) @@ -164,7 +164,7 @@ def post(self, request, *args, **kwargs): actionlog.log(request.user.username, "create", user) except Exception as e: - log.exception("{}{}".format(_("Exception:").encode("UTF-8"), e)) + log.exception(f'{_("Exception:").encode("UTF-8")}{e}') messages.add_message(request, messages.ERROR, _("Error when creating user")) return self.form_valid(form) @@ -205,7 +205,7 @@ def post(self, request, *args, **kwargs): actionlog.log(request.user.username, "update", user) except Exception as e: - log.exception("{}{}".format(_("Exception:").encode("UTF-8"), e)) + log.exception(f'{_("Exception:").encode("UTF-8")}{e}') messages.add_message(request, messages.ERROR, _("Error when updating user")) context = self.get_context_data(form=form, request=request) @@ -217,10 +217,10 @@ def get(self, request, *args, **kwargs): try: self.keystone.user_delete(kwargs.get("user_id")) messages.add_message(request, messages.SUCCESS, _("Successfully deleted user")) - actionlog.log(request.user.username, "delete", "user_id: {}".format(kwargs.get("user_id"))) + actionlog.log(request.user.username, "delete", f"user_id: {kwargs.get(('user_id'))}") except Exception as e: - log.exception("{}{}".format(_("Exception:").encode("UTF-8"), e)) + log.exception(f'{_("Exception:").encode("UTF-8")}{e}') messages.add_message(request, messages.ERROR, _("Error when deleting user")) project_name = request.session.get("project_name") @@ -299,7 +299,7 @@ def get_context_data(self, **kwargs): roles = self.keystone.role_list() context["roles"] = sorted(roles, key=lambda l: l.name.lower()) except Exception as e: - log.exception("{}{}".format(_("Exception:").encode("UTF-8"), e)) + log.exception(f'{_("Exception:").encode("UTF-8")}{e}') return context @@ -332,7 +332,7 @@ def _get_data(self): if prj.get("team_owner_id") is not None: prj["team"] = Group.objects.filter(id=prj["team_owner_id"]).first() except Exception as e: - log.exception("{}{}".format(_("Exception:").encode("UTF-8"), e)) + log.exception(f'{_("Exception:").encode("UTF-8")}{e}') messages.add_message(self.request, messages.ERROR, _("Unable to list projects")) return projects @@ -393,7 +393,7 @@ def post(self, request, *args, **kwargs): # Houve falha no cadastro if not response.get("status"): - log.exception("Exception: {}".format(response.get("status"))) + log.exception(f'Exception: {response.get("status")}') messages.add_message(request, messages.ERROR, response.get("reason")) return self.render_to_response( @@ -505,7 +505,7 @@ def post(self, request, *args, **kwargs): actionlog.log(request.user.username, "update", project) except Exception as e: - log.exception("{}{}".format(_("Exception:").encode("UTF-8"), e)) + log.exception(f'{_("Exception:").encode("UTF-8")}{e}') messages.add_message(request, messages.ERROR, _("Error when updating project")) context = self.get_context_data(form=form, request=request) @@ -563,7 +563,7 @@ def post(self, request, *args, **kwargs): messages.add_message(request, messages.SUCCESS, _("Successfully deleted project.")) except Exception as e: - log.exception("{}{}".format(_("Exception:").encode("UTF-8"), e)) + log.exception(f'{_("Exception:").encode("UTF-8")}{e}') messages.add_message(request, messages.ERROR, _("Error when deleting project")) # Purge project from current projects @@ -604,7 +604,7 @@ def get(self, request, *args, **kwargs): except Exception as e: context["msg"] = "Error listing users" - log.exception("{}{}".format(_("Exception:").encode("UTF-8"), e)) + log.exception(f'{_("Exception:").encode("UTF-8")}{e}') return self.render_to_response(context, status=500) @@ -623,19 +623,19 @@ def post(self, request, *args, **kwargs): try: self.keystone.add_user_role(project=project, role=role, user=user) - item = "project: {}, role: {}, user: {}".format(project, role, user) + item = f"project: {project}, role: {role}, user: {user}" actionlog.log(request.user.username, "create", item) return self.render_to_response(context) except exceptions.Conflict as e: context["msg"] = str(_("User already registered with this role")) - log.exception("{}{}".format(_("Conflict:"), e)) + log.exception(f'{_("Conflict:")}{e}') return self.render_to_response(context, status=500) except Exception as e: context["msg"] = str(_("Error adding user")) - log.exception("{}{}".format(_("Exception:").encode("UTF-8"), e)) + log.exception(f'{_("Exception:").encode("UTF-8")}{e}') return self.render_to_response(context, status=500) @@ -650,14 +650,14 @@ def post(self, request, *args, **kwargs): try: self.keystone.remove_user_role(project=project, role=role, user=user) - item = "project: {}, role: {}, user: {}".format(project, role, user) + item = f"project: {project}, role: {role}, user: {user}" actionlog.log(request.user.username, "delete", item) return self.render_to_response(context) except Exception as e: context["msg"] = str(_("Error removing user")) - log.exception("Exception: {}".format(e)) + log.exception(f"Exception: {e}") return self.render_to_response(context, status=500) @@ -676,7 +676,7 @@ def post(self, request, *args, **kwargs): except Exception as e: context = {"msg": str(_("Error updating password"))} - log.exception("Exception: {}".format(e)) + log.exception(f"Exception: {e}") status = 500 return self.render_to_response(context, status=status) @@ -709,12 +709,12 @@ def generate_widget_info(self): try: users = self.keystone.user_list() except Exception as e: - log.exception("{}{}".format(_("Exception:").encode("UTF-8"), e)) + log.exception(f'{_("Exception:").encode("UTF-8")}{e}') return {"error": "Unable to list users"} try: projects = self.keystone.project_list() except Exception as e: - log.exception("{}{}".format(_("Exception:").encode("UTF-8"), e)) + log.exception(f'{_("Exception:").encode("UTF-8")}{e}') return {"error": "Unable to list projects"} return [ diff --git a/storage/models.py b/storage/models.py index 23fc604a..cee47555 100644 --- a/storage/models.py +++ b/storage/models.py @@ -15,5 +15,4 @@ class Meta: unique_together = ('container', 'project_id',) def __unicode__(self): - return "Container: {}, Project: {}".format(self.container, - self.project_name) + return f"Container: {self.container}, Project: {self.project_name}" \ No newline at end of file diff --git a/storage/utils.py b/storage/utils.py index 45744528..0937287b 100644 --- a/storage/utils.py +++ b/storage/utils.py @@ -226,7 +226,7 @@ def update_swift_account(user, password, project_name, headers): client.post_account(storage_url, keystone.conn.auth_token, headers, http_conn=http_conn) except client.ClientException as err: - log.exception('Exception: {}'.format(err)) + log.exception(f'Exception: {err}') return False return True @@ -244,13 +244,13 @@ def delete_swift_account(storage_url, auth_token): client.delete_container(storage_url, auth_token, 'dummy_container', http_conn=http_conn) except client.ClientException as err: - log.exception('Fail to create container "dummy_container": {0}'.format(err)) + log.exception(f'Fail to create container "dummy_container": {err}') return False try: # Deletar o account url = urlparse(storage_url) - domain = '{}://{}'.format(url.scheme, url.netloc) + domain = f'{url.scheme}://{url.netloc}' path = url.path http_conn = client.HTTPConnection(domain, insecure=insecure) @@ -259,13 +259,11 @@ def delete_swift_account(storage_url, auth_token): resp = http_conn.request('DELETE', path, headers=headers) if resp.status_code != 204: - log.exception('Fail to delete account {}: status code {}'.format( - storage_url, resp.status_code - )) + log.exception(f'Fail to delete account {storage_url}: status code {resp.status_code}') return False except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') return False return True diff --git a/storage/views/backup.py b/storage/views/backup.py index 0d4af929..58068179 100644 --- a/storage/views/backup.py +++ b/storage/views/backup.py @@ -72,21 +72,17 @@ def _check_backup_user(request, project_id): role=backup_role, user=backup_user) except exceptions.Conflict: - log.info('backup_user already with role'.format(project_id)) + log.info('backup_user already with role') return True def _enable_backup(container, project_id, project_name): - create_url = 'http://{}:{}@{}/config/create'.format( - settings.BACKUP_API_USER, - settings.BACKUP_API_PASSWORD, - settings.BACKUP_API_URL - ) + create_url = f'http://{settings.BACKUP_API_USER}:{settings.BACKUP_API_PASSWORD}@{settings.BACKUP_API_URL}/config/create' try: req = requests.post(create_url, json={ - 'name': '{}_{}'.format(project_name, container), + 'name': f'{project_name}_{container}', 'type': 'swift', 'parameters': { 'endpoint_type': 'admin', @@ -95,7 +91,7 @@ def _enable_backup(container, project_id, project_name): } }) except Exception as err: - log.error('Enable backup error: {}'.format(err)) + log.error(f'Enable backup error: {err}') return False items = BackupContainer.objects.filter(container=container, @@ -109,24 +105,20 @@ def _enable_backup(container, project_id, project_name): project_name=project_name) item.save() except Exception as err: - log.error('Enable backup error: {}'.format(err)) + log.error(f'Enable backup error: {err}') return False return True def _disable_backup(container, project_id, project_name): - delete_url = 'http://{}:{}@{}/config/delete'.format( - settings.BACKUP_API_USER, - settings.BACKUP_API_PASSWORD, - settings.BACKUP_API_URL - ) + delete_url = f'http://{settings.BACKUP_API_USER}:{settings.BACKUP_API_PASSWORD}@{settings.BACKUP_API_URL}/config/delete' try: req = requests.post(delete_url, json={ - 'name': '{}_{}'.format(project_name, container) + 'name': f'{project_name}_{container}' }) except Exception as err: - log.error('Disable backup error: {}'.format(err)) + log.error(f'Disable backup error: {err}') return False items = BackupContainer.objects.filter(container=container, @@ -137,7 +129,7 @@ def _disable_backup(container, project_id, project_name): try: items[0].delete() except Exception as err: - log.error('Disable backup error: {}'.format(err)) + log.error(f'Disable backup error: {err}') return False return True @@ -153,11 +145,7 @@ def backup_restore(request, project): content = {'message': ''} status = 200 - restore_url = 'http://{}:{}@{}/sync/copy'.format( - settings.BACKUP_API_USER, - settings.BACKUP_API_PASSWORD, - settings.BACKUP_API_URL - ) + restore_url = f'http://{settings.BACKUP_API_USER}:{settings.BACKUP_API_PASSWORD}@{settings.BACKUP_API_URL}/sync/copy' if backup_type == 'daily': s3_bucket = 'swift-backup-daily' @@ -166,22 +154,22 @@ def backup_restore(request, project): else: s3_bucket = 'swift-backup-monthly' - name = '{}_{}'.format(project_name, container) + name = f'{project_name}_{container}' ts = int(time.time()) - restore_container = '{}_{}_{}'.format(container, backup_type, ts) - content['message'] = 'Backup restaurado no container: {}'.format(restore_container) + restore_container = f'{container}_{backup_type}_{ts}' + content['message'] = f'Backup restaurado no container: {restore_container}' try: req = requests.post(restore_url, json={ - "srcFs": "amazon:/{}/{}/{}".format(s3_bucket, project_name, container), - "dstFs": "{}:/{}".format(name, restore_container), + "srcFs": f"amazon:/{s3_bucket}/{project_name}/{container}", + "dstFs": f"{name}:/{restore_container}", "_async": True }) result = req.json() content['job'] = result['jobid'] except Exception as err: - log.error('Restore backup error: {}'.format(err)) - content['message'] = 'Restore backup error: {}'.format(err) + log.error(f'Restore backup error: {err}') + content['message'] = f'Restore backup error: {err}' return HttpResponse(json.dumps(content), content_type='application/json', status=500) @@ -197,16 +185,16 @@ def check_backup_conditions(request, container): storage_url = get_storage_endpoint(request, 'adminURL') headers = {'X-Storage-Token': get_token_id(request)} - url = '{0}/{1}'.format(storage_url, container) + url = f'{storage_url}/{container}' response = requests.head(url, headers=headers, verify=not settings.SWIFT_INSECURE) if int(response.headers['X-Container-Object-Count']) >= backup_object_count_value: - return False, _('Error when activating container backup. Container cannot contain more than {} objects').format(backup_object_count_value) + return False, _(f'Error when activating container backup. Container cannot contain more than {backup_object_count_value} objects') if int(response.headers['X-Container-Bytes-Used']) >= backup_object_bytes_value: - return False, _('Error when activating container backup. Container cannot contain more than {}').format(backup_object_count_value) + return False, _(f'Error when activating container backup. Container cannot contain more than {backup_object_count_value}') return True, 'Success' @@ -233,11 +221,11 @@ def config_backup_container(request, project, container): if conditions: if action == 'enabled': result = _enable_backup(container, project_id, project_name) - msg = '{} "{}"'.format(_('Backup enabled for container'), container) + msg = f'{_("Backup enabled for container")} "{container}"' if action == 'disabled': result = _disable_backup(container, project_id, project_name) - msg = '{} "{}"'.format(_('Backup disabled for container'), container) + msg = f'{_("Backup disabled for container")} "{container}"' if result: check_ok = _check_backup_user(request, project_id) @@ -245,15 +233,11 @@ def config_backup_container(request, project, container): _disable_backup(container, project_id, project_name) status = 500 msg = _("Backup status error: can't set backup user permission") - log.error('{}. Project: {}, Container: {}'.format(msg, - project_name, - container)) + log.error(f'{msg}. Project: {project_name}, Container: {container}') else: status = 500 msg = _('Error when updating container backup status') - log.error('{}. Project: {}, Container: {}'.format(msg, - project_name, - container)) + log.error(f'{msg}. Project: {project_name}, Container: {container}') else: status = 412 diff --git a/storage/views/cache.py b/storage/views/cache.py index 3eb190cd..4d141cdb 100644 --- a/storage/views/cache.py +++ b/storage/views/cache.py @@ -33,7 +33,8 @@ def remove_from_cache(request, project): 'user': request.user.username } - api_url = '{host}/url/add'.format(host=settings.CACHESWEEP_API) + host = settings.CACHESWEEP_API + api_url = f'{host}/url/add' req = requests.post(api_url, json=data) if req.status_code == 201: diff --git a/storage/views/main.py b/storage/views/main.py index 97093584..fec7c969 100644 --- a/storage/views/main.py +++ b/storage/views/main.py @@ -62,7 +62,7 @@ def containerview(request, project): account_stat, containers = client.get_account( storage_url, auth_token, full_listing=False, http_conn=http_conn) except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') messages.add_message(request, messages.ERROR, _('Unable to list containers')) account_stat, containers = {}, [] @@ -112,7 +112,7 @@ def create_container(request, project): actionlog.log(request.user.username, "create", container) except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') messages.add_message(request, messages.ERROR, _('Access denied')) return redirect(containerview, project=project_name) @@ -169,7 +169,7 @@ def delete_container(request, container, force=True): container, http_conn=http_conn) actionlog.log(request.user.username, "delete", container) except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') return False return True @@ -200,7 +200,7 @@ def delete_container_view(request, project, container): status = 500 msg = str(_('Container delete error')) content['message'] = msg - log.error('{}. Container: {}'.format(msg, container)) + log.exception(f'Exception: {err}') return HttpResponse(json.dumps(content), content_type='application/json', @@ -228,7 +228,7 @@ def objectview(request, project, container, prefix=None): container, delimiter='/', prefix=prefix, full_listing=False, http_conn=http_conn, limit=limit, marker=marker) except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') messages.add_message(request, messages.ERROR, _('Access denied')) project_name = request.session.get('project_name') return redirect(containerview, project=project_name) @@ -264,9 +264,9 @@ def object_item(request, project, container, objectname): custom_headers = {} system_headers = {} - url = '{0}/{1}'.format(storage_url, container) + url = f'{storage_url}/{container}' if objectname: - url = '{0}/{1}'.format(url, str(objectname)) + url = f'{url}/{str(objectname)}' response = requests.head(url, headers=headers, verify=not settings.SWIFT_INSECURE) @@ -276,8 +276,7 @@ def object_item(request, project, container, objectname): if 'Cache-Control' not in metadata.keys(): metadata["Cache-Control"] = '' - public_url = '{}/{}/{}'.format(get_storage_endpoint(request, - 'publicURL'), container, objectname) + public_url = f'{get_storage_endpoint(request, "publicURL")}/{container}/{objectname}' prefixes = prefix_list(objectname) for item in metadata: @@ -309,7 +308,7 @@ def upload(request, project, container, prefix=None): storage_url, http_conn = connection(request) project_name = request.session.get('project_name') - redirect_url = 'http://{}'.format(request.get_host()) + redirect_url = f'http://{request.get_host()}' redirect_url += reverse('objectview', kwargs={'container': container, 'project': project_name}) @@ -333,8 +332,7 @@ def upload(request, project, container, prefix=None): else: return redirect(objectview, container=container, project=project_name) - hmac_body = '{}\n{}\n{}\n{}\n{}'.format( - path, redirect_url, max_file_size, max_file_count, expires) + hmac_body = f'{path}\n{redirect_url}\n{max_file_size}\n{max_file_count}\n{expires}' signature = hmac.new( bytes(key, 'utf-8'), bytes(hmac_body, 'utf-8'), sha1).hexdigest() @@ -387,7 +385,7 @@ def create_object(request, project, container, prefix=None): elif req.status_code == 401 or req.status_code == 403: messages.add_message(request, messages.ERROR, _('Access denied')) else: - msg = 'Fail to create object ({0}).'.format(req.status_code) + msg = f'Fail to create object ({req.status_code}).' log.error(msg) messages.add_message(request, messages.ERROR, msg) @@ -405,7 +403,7 @@ def download(request, project, container, objectname): headers = {'X-Storage-Token': auth_token} - url = '{0}/{1}/{2}'.format(storage_url, container, str(objectname)) + url = f'{storage_url}/{container}/{str(objectname)}' res = requests.get( url, headers=headers, verify=not settings.SWIFT_INSECURE) @@ -447,7 +445,7 @@ def delete_object(request, container, objectname): container=container, name=objectname, http_conn=http_conn) actionlog.log(request.user.username, "delete", objectname) except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') return False return True @@ -471,7 +469,7 @@ def delete_pseudofolder(request, project, container, pseudofolder): container=container, name=obj['name'], http_conn=http_conn) count_deletes += 1 except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') # Empty pseudofolder if count_deletes == 1 and count_deletes == len(objects): @@ -480,7 +478,7 @@ def delete_pseudofolder(request, project, container, pseudofolder): # Non empty pseudofolder elif count_deletes > 1 and count_deletes == len(objects): messages.add_message(request, messages.SUCCESS, - 'Pseudofolder and {0} objects deleted.'.format(count_deletes - 1)) + f'Pseudofolder and {count_deletes - 1} objects deleted.') elif count_deletes > 0 and count_deletes < len(objects): messages.add_message(request, messages.SUCCESS, _('Could not delete all objects')) @@ -532,7 +530,7 @@ def create_pseudofolder(request, project, container, prefix=None): messages.add_message(request, messages.SUCCESS, _('Pseudofolder created')) except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') messages.add_message(request, messages.ERROR, _('Access denied')) if prefix: @@ -573,10 +571,10 @@ def edit_acl(request, project, container): writers = remove_duplicates_from_acl(writers) if form.cleaned_data['read']: - readers += ",{}".format(username) + readers += f",{username}" if form.cleaned_data['write']: - writers += ",{}".format(username) + writers += f",{username}" headers = {'X-Container-Read': readers, 'X-Container-Write': writers} @@ -587,10 +585,10 @@ def edit_acl(request, project, container): messages.add_message(request, messages.SUCCESS, _('ACLs updated')) actionlog.log(request.user.username, "update", - 'headers: {}, container: {}'.format(headers, container)) + f'headers: {headers}, container: {container}') except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}')) messages.add_message(request, messages.ERROR, _('ACL update failed')) @@ -624,10 +622,10 @@ def edit_acl(request, project, container): _('ACL removed')) actionlog.log(request.user.username, "delete", - 'headers: {}, container: {}'.format(headers, container)) + f'headers: {headers}, container: {container}') except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') messages.add_message(request, messages.ERROR, _('ACL update failed')) @@ -688,12 +686,12 @@ def make_public(request, container): auth_token, container, headers=headers, http_conn=http_conn) content = {"message": str(message)} - msg = "X-Container-Read header on container {}".format(container) + msg = f"X-Container-Read header on container {container}" actionlog.log(request.user.username, "update", msg) except client.ClientException as err: content, status = {"message": str( _("Container ACL update failed"))}, 500 - log.exception("Exception: {}".format(err)) + log.exception(f'Exception: {err}') return HttpResponse( json.dumps(content), content_type='application/json', status=status) @@ -706,10 +704,9 @@ def metadataview(request, project, container, objectname=None): storage_url = get_storage_endpoint(request, 'adminURL') headers = {'X-Storage-Token': get_token_id(request)} - url = '{0}/{1}'.format(storage_url, container) + url = f'{storage_url}/{container}' if objectname: - url = '{0}/{1}'.format(url, str(objectname)) - + url = f'{url}/{dtr(objectname)}' response = requests.head( url, headers=headers, verify=not settings.SWIFT_INSECURE) @@ -769,11 +766,11 @@ def object_versioning(request, project, container, prefix=None): if action == 'enable': enable_versioning(request, container) actionlog.log(request.user.username, "enable", - 'Versioning. Container: {}'.format(container)) + f'Versioning. Container: {container}') elif action == 'disable': disable_versioning(request, container) actionlog.log(request.user.username, "disable", - 'Versioning. Container: {}'.format(container)) + f'Versioning. Container: {container}') else: messages.add_message(request, messages.ERROR, 'Action is required.') @@ -787,15 +784,13 @@ def enable_versioning(request, container): auth_token = get_token_id(request) storage_url, http_conn = connection(request) - version_location = '{0}{1}'.format( - settings.SWIFT_VERSION_PREFIX, container) - + version_location = f'{settings.SWIFT_VERSION_PREFIX}{container}' try: client.put_container( storage_url, auth_token, version_location, http_conn=http_conn) actionlog.log(request.user.username, "create", version_location) except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') messages.add_message(request, messages.ERROR, _('Access denied')) return False @@ -805,7 +800,7 @@ def enable_versioning(request, container): auth_token, container, headers=header, http_conn=http_conn) actionlog.log(request.user.username, "update", version_location) except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') messages.add_message(request, messages.ERROR, _('Access denied')) return False @@ -824,7 +819,7 @@ def disable_versioning(request, container): headers = client.head_container( storage_url, auth_token, container, http_conn=http_conn) except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') messages.add_message(request, messages.ERROR, _('Access denied')) return False @@ -836,7 +831,7 @@ def disable_versioning(request, container): headers={'x-versions-location': ''}, http_conn=http_conn) actionlog.log(request.user.username, "update", container) except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') messages.add_message(request, messages.ERROR, _('Access denied')) return False @@ -866,7 +861,7 @@ def edit_cors(request, project, container): host = form.cleaned_data['host'] if host: - cors += " {}".format(host) + cors += host headers = { 'x-container-meta-access-control-allow-origin': cors.strip() @@ -879,10 +874,10 @@ def edit_cors(request, project, container): messages.add_message(request, messages.SUCCESS, _('CORS updated')) actionlog.log(request.user.username, "update", - 'headers: {}, container: {}'.format(headers, container)) + f'headers: {headers}, container: {container}') except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') messages.add_message(request, messages.ERROR, _('CORS update failed')) if request.method == 'GET': @@ -908,10 +903,10 @@ def edit_cors(request, project, container): messages.add_message(request, messages.SUCCESS, _('CORS removed')) actionlog.log(request.user.username, "delete", - 'headers: {}, container: {}'.format(headers, container)) + f'headers: {headers}, container: {container}') except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') messages.add_message(request, messages.ERROR, _('CORS update failed')) cors = get_cors(storage_url, auth_token, container, http_conn) @@ -954,12 +949,12 @@ def edit_custom_metadata(request, project, container, objectname): objectname, headers=system_headers, http_conn=http_conn) content = {"message": _("Custom Metadata updated")} - msg = "Custom Metadata header on object {}/{}".format(container, objectname) + msg = f"Custom Metadata header on object {container}/{objectname}" actionlog.log(request.user.username, "update", msg) except client.ClientException as err: content, status = {"message": str( _("Custom Metadata update failed"))}, 500 - log.exception("Exception: {}".format(err)) + log.exception(f'Exception: {err}') return HttpResponse(json.dumps(content), content_type='application/json', status=status) @@ -986,20 +981,19 @@ def cache_control(request, project, container, objectname): headers = client.head_object(storage_url, auth_token, container, objectname, http_conn=http_conn) - headers["cache-control"] = "public, max-age={}".format(maxage) + headers["cache-control"] = f"public, max-age={maxage}" try: client.post_object(storage_url, auth_token, container, objectname, headers=headers, http_conn=http_conn) content = {"message": str( _("Cache-Control updated")), "cache_control": headers["cache-control"]} - msg = "Cache-Control header on object {}/{}".format(container, - objectname) + msg = f"Cache-Control header on object {container}/{objectname}" actionlog.log(request.user.username, "update", msg) except client.ClientException as err: content, status = {"message": str( _("Cache-Control update failed"))}, 500 - log.exception("Exception: {}".format(err)) + log.exception(f'Exception: {err}') return HttpResponse(json.dumps(content), content_type='application/json', status=status) @@ -1029,7 +1023,7 @@ def optional_headers(request, project, container, objectname): except Exception as e: log.error(e) content, status = {"message": str( - _("Optional headers update failed: {}".format(e)))}, 500 + _(f"Optional headers update failed: {e}"))}, 500 return HttpResponse(json.dumps(content), content_type='application/json', @@ -1044,7 +1038,7 @@ def get_deleted_objects(request, project, container, prefix=None): auth_token = get_token_id(request) storage_url, http_conn = connection(request) public_url = get_storage_endpoint(request, 'publicURL') - trash_container = "{}-{}".format(settings.SWIFT_TRASH_PREFIX, container) + trash_container = f"{settings.SWIFT_TRASH_PREFIX}-{container}" objects = None try: @@ -1052,10 +1046,10 @@ def get_deleted_objects(request, project, container, prefix=None): auth_token, trash_container, delimiter='', http_conn=http_conn) except client.ClientException as err: if err.http_status == 404: - log.info("Not found: {}".format(trash_container)) + log.info(f"Not found: {trash_container}") objects = [] else: - log.exception("Exception: {0}".format(err.msg)) + log.exception(f'Exception: {err.msg}') status = err.http_status content = {"error": err.msg} @@ -1132,7 +1126,7 @@ def restore_object(request, project): auth_token, trash_container, object_name, http_conn=http_conn) custom_headers = { "X-Fresh-Metadata": "True", - "X-Copy-From": "/{}/{}".format(trash_container, object_name) + "X-Copy-From": f"/{trash_container}/{object_name}" } for key, value in obj_headers.items(): if "x-object-meta" in key: @@ -1150,7 +1144,7 @@ def restore_object(request, project): _('Object restored')) actionlog.log(request.user.username, "restore", object_name) except client.ClientException as err: - log.exception('Exception: {0}'.format(err.msg)) + log.exception(f'Exception: {err.msg}') status = err.http_status content = {"error": err.msg} @@ -1176,7 +1170,7 @@ def remove_from_trash(request, project): if not result: status = 500 content = { - "error": "Object '{}' was not removed from trash".format(object_name) + "error": f"Object '{object_name}' was not removed from trash" } return HttpResponse(json.dumps(content), @@ -1194,14 +1188,14 @@ def config_trash_container(request, project, container): status, content = 200, {'message': ''} enable = False content['message'] = ( - '{} "{}"'.format(_('Trash disabled for container'), container) + f'{_("Trash disabled for container")} "{container}"' ) try: if request.GET.get('status').lower() == 'enabled': enable = True content['message'] = ( - '{} "{}"'.format(_('Trash enabled for container'), container) + f'{_("Trash disabled for container")} "{container}"' ) client.put_container(storage_url, auth_token, container, @@ -1211,7 +1205,7 @@ def config_trash_container(request, project, container): # messages.add_message(request, messages.SUCCESS, msg) actionlog.log(request.user.username, 'update_trash', container) except Exception as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') # messages.add_message(request, messages.ERROR, _('Update container trash error')) status, content = 500, {'message': 'Update container trash error'} @@ -1235,7 +1229,7 @@ def container_trash_status(request, project, container): content['status'] = 'disabled' except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') messages.add_message(request, messages.ERROR, _('Access denied')) status, content = 500, {'message': 'Access denied'} @@ -1273,7 +1267,7 @@ def container_acl_update(request, project, container): else: actionlog.log(request.user.username, "set_private", container) except Exception as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') status, content = 500, {'message': 'Failed on update container ACL'} return HttpResponse(json.dumps(content), @@ -1301,7 +1295,7 @@ def container_acl_status(request, project, container): content['status'] = 'enabled' except client.ClientException as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') messages.add_message(request, messages.ERROR, _('Access denied')) status, content = 500, {'message': 'Access denied'} @@ -1372,7 +1366,7 @@ def generate_widget_info(self): head_acc = client.head_account( storage_url, auth_token, http_conn=http_conn) except Exception as err: - log.exception('Exception: {0}'.format(err)) + log.exception(f'Exception: {err}') return {"error": "Unable to show Swift info."} widget_info = [{ diff --git a/vault/client.py b/vault/client.py index cfc873ff..392d9a69 100644 --- a/vault/client.py +++ b/vault/client.py @@ -10,7 +10,7 @@ def __init__(self, user_token): self.user_token = user_token def __call__(self, r): - r.headers['Authorization'] = 'Bearer {0}'.format(self.user_token) + r.headers['Authorization'] = f'Bearer {self.user_token}' return r diff --git a/vault/jsoninfo.py b/vault/jsoninfo.py index 48c57756..1c25bcfb 100644 --- a/vault/jsoninfo.py +++ b/vault/jsoninfo.py @@ -21,9 +21,7 @@ def menu_info(self): self._menu = self.generate_menu_info() status = 500 if "error" in self._menu else 200 if status == 500: - log.error('Error on {}\'s menu info: {}'.format( - type(self).__name__, - self._menu["error"])) + log.error(f'Error on {type(self).__name__}\'s menu info: {self._menu["error"]}') content = self._menu return HttpResponse(json.dumps(content), content_type='application/json', @@ -34,9 +32,7 @@ def widget_info(self): self.validate_widget_info() status = 500 if "error" in self._widgets else 200 if status == 500: - log.error('Error on {}\'s widget info: {}'.format( - type(self).__name__, - self._widgets["error"])) + log.error(f'Error on {type(self).__name__}\'s widget info: {self._widgets["error"]}') content = self._widgets return HttpResponse(json.dumps(content), content_type='application/json', @@ -49,14 +45,10 @@ def all_info(self): status = 200 if "error" in self._menu: status = 500 - log.error('Error on {}\'s menu info: {}'.format( - type(self).__name__, - self._menu["error"])) + log.error(f'Error on {type(self).__name__}\'s menu info: {self._menu["error"]}') if "error" in self._widgets: status = 500 - log.error('Error on {}\'s widget info: {}'.format( - type(self).__name__, - self._widgets["error"])) + log.error(f'Error on {type(self).__name__}\'s widget info: {self._widgets["error"]}') content = { "menu": self._menu, "widgets": self._widgets @@ -121,7 +113,7 @@ def render(self, request): else: status = 400 content = { - "error": "Unknown option \"{}\"".format(option) + "error": f"Unknown option \"{option}\"" } return HttpResponse(json.dumps(content), content_type='application/json', diff --git a/vault/management/commands/create_user.py b/vault/management/commands/create_user.py index a3744eaf..ed5ddfbe 100644 --- a/vault/management/commands/create_user.py +++ b/vault/management/commands/create_user.py @@ -63,39 +63,35 @@ def handle(self, *args, **kwargs): try: grp = Group.objects.get(name=teamName) self.stdout.write(self.style.WARNING( - "Group '{}' already exists!".format(teamName))) + f"Group '{teamName}' already exists!")) except Group.DoesNotExist: - self.stdout.write("Creating group '{}'".format(teamName)) + self.stdout.write(f"Creating group '{teamName}'") grp = Group.objects.create(name=teamName) grp.save() self.stdout.write(self.style.SUCCESS( - "Group '{}' successfully created!".format(teamName))) + f"Group '{teamName}' successfully created!")) try: usr = User.objects.get(username=username) self.stdout.write(self.style.WARNING( - "User '{}' already exists!".format(username))) + f"User '{username}' already exists!")) except User.DoesNotExist: if kwargs.get("superuser"): - self.stdout.write("Creating superuser '{}'".format(username)) + self.stdout.write(f"Creating superuser '{username}'") usr = User.objects.create_superuser(username, email, password) self.stdout.write(self.style.SUCCESS( - "Superuser '{}' successfully created!".format(username))) + f"Superuser '{username}' successfully created!")) else: - self.stdout.write("Creating user '{}'".format(username)) + self.stdout.write(f"Creating user '{username}'") usr = User.objects.create_user(username, email, password) self.stdout.write(self.style.SUCCESS( - "User '{}' successfully created!".format(username))) + f"User '{username}' successfully created!")) if usr.groups.filter(name=teamName).count() == 0: - self.stdout.write("Adding user '{}' to group '{}'".format( - username, teamName)) + self.stdout.write(f"Adding user '{username}' to group '{teamName}'") usr.groups.add(grp) usr.save() self.stdout.write(self.style.SUCCESS( - "User '{}' successfully added to group '{}'!".format( - username, teamName))) - else: + f"User '{username}' successfully added to group '{teamName}'!")) self.stdout.write(self.style.WARNING( - "User '{}' already in group '{}'!".format( - username, teamName))) + f"User '{username}' already in group '{teamName}'!")) diff --git a/vault/models.py b/vault/models.py index 46121a25..c5c151f3 100644 --- a/vault/models.py +++ b/vault/models.py @@ -18,7 +18,7 @@ class Meta: verbose_name_plural = _('Groups and Projects') def __str__(self): - return "Group {} - Project {}".format(self.group, self.project) + return f"Group {self.group} - Project {self.project}" class CurrentProject(models.Model): diff --git a/vault/settings.py b/vault/settings.py index 44b3072a..bfdda513 100644 --- a/vault/settings.py +++ b/vault/settings.py @@ -116,9 +116,7 @@ # Static files (CSS, JavaScript, Images) STATIC_ROOT = "vault_static/" -STATIC_URL = "{}/{}/{}".format(os.getenv("SWIFT_INTERNAL_URL", ""), - os.getenv("SWIFT_CONTAINER", "vault"), - STATIC_ROOT) +STATIC_URL = f'{os.getenv("SWIFT_INTERNAL_URL", "")}/{os.getenv("SWIFT_CONTAINER")}/{"vault"}' # The openstack_auth.user.Token object isn't JSON-serializable ATM SESSION_SERIALIZER = "django.contrib.sessions.serializers.PickleSerializer" @@ -176,9 +174,8 @@ KEYSTONE_PASSWORD = os.getenv("VAULT_KEYSTONE_PASSWORD", "u_vault") KEYSTONE_PROJECT = os.getenv("VAULT_KEYSTONE_PROJECT", "Vault") KEYSTONE_VERSION = os.getenv("VAULT_KEYSTONE_API_VERSION", 3) -KEYSTONE_URL = os.getenv( - "VAULT_KEYSTONE_URL", "http://localhost:5000/{}".format( - "v2.0" if KEYSTONE_VERSION == 2 else "v3")) +KEYSTONE_VERSION_STR = "v2.0" if KEYSTONE_VERSION == 2 else "v3" +KEYSTONE_URL = os.getenv("VAULT_KEYSTONE_URL", f"http://localhost:5000/{KEYSTONE_VERSION_STR}") KEYSTONE_TIMEOUT = os.getenv("VAULT_KEYSTONE_TIMEOUT", 3) # KEYSTONE_INSECURE = False diff --git a/vault/utils.py b/vault/utils.py index a791df74..7584f48b 100644 --- a/vault/utils.py +++ b/vault/utils.py @@ -90,7 +90,7 @@ def maybe_update_token(request): token_time = request.session.get('token_time') if token_time is None or token_time < datetime.utcnow(): - log.info('Updating token for user [{}]'.format(request.user)) + log.info(f'Updating token for user [{request.user}]') try: keystone = Keystone(request)