Skip to content
This repository was archived by the owner on Dec 10, 2024. It is now read-only.

Commit

Permalink
Apply automated ruff fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
samuelhwilliams committed Dec 8, 2024
1 parent 0794d56 commit b5e428f
Show file tree
Hide file tree
Showing 87 changed files with 916 additions and 2,298 deletions.
46 changes: 10 additions & 36 deletions app/blueprints/assessments/activity_trail.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
import inspect
from dataclasses import asdict
from dataclasses import dataclass
from dataclasses import field
from dataclasses import asdict, dataclass, field
from datetime import datetime

from flask import current_app
from flask_wtf import FlaskForm
from wtforms import BooleanField
from wtforms import StringField
from wtforms import BooleanField, StringField

from app.blueprints.services.data_services import get_bulk_accounts_dict
from app.blueprints.services.models.assessor_task_list import AssessorTaskList
from app.blueprints.services.models.flag import Flag
from app.blueprints.services.models.flag import FlagType
from app.blueprints.services.models.flag import Flag, FlagType
from app.blueprints.tagging.models.tag import AssociatedTag


Expand All @@ -22,11 +18,7 @@ class BaseModel:
def from_list(cls, data_list: list[dict]):
return [
cls(
**{
k: v
for k, v in d.items()
if k in inspect.signature(cls).parameters and k != "date_created"
},
**{k: v for k, v in d.items() if k in inspect.signature(cls).parameters and k != "date_created"},
date_created=cls._format_date(d.get("date_created")),
)
for d in data_list
Expand All @@ -50,10 +42,7 @@ class AssociatedTags(AssociatedTag):
@classmethod
def from_associated_tags_list(cls, associated_tags_list):
"""Change the attribute 'created_at' to 'date_created'"""
return [
cls(**asdict(tag), date_created=tag.created_at)
for tag in associated_tags_list
]
return [cls(**asdict(tag), date_created=tag.created_at) for tag in associated_tags_list]


@dataclass
Expand Down Expand Up @@ -176,7 +165,6 @@ class Scores(BaseModel):


def get_user_info(lst: list, state: AssessorTaskList) -> dict:

if lst is None:
return []

Expand Down Expand Up @@ -242,9 +230,7 @@ def map_activities_classes_with_checkbox_filters(filters):
return _filters


def filter_all_activities(
all_activities: list, search_keyword: str = "", filters: list = None
):
def filter_all_activities(all_activities: list, search_keyword: str = "", filters: list = None):
all_activities = order_by_dates(all_activities)
filtered_classes = map_activities_classes_with_checkbox_filters(filters)

Expand All @@ -255,34 +241,22 @@ def filter_all_activities(
return [
activity
for activity in all_activities
if any(
search_keyword.lower() in str(attr).lower()
for attr in asdict(activity).values()
)
and any(
class_name.lower() == activity.__class__.__name__.lower()
for class_name in filtered_classes
)
if any(search_keyword.lower() in str(attr).lower() for attr in asdict(activity).values())
and any(class_name.lower() == activity.__class__.__name__.lower() for class_name in filtered_classes)
]

if not search_keyword and filters:
return [
activity
for activity in all_activities
if any(
class_name.lower() == activity.__class__.__name__.lower()
for class_name in filtered_classes
)
if any(class_name.lower() == activity.__class__.__name__.lower() for class_name in filtered_classes)
]

if search_keyword and not filtered_classes:
return [
activity
for activity in all_activities
if any(
search_keyword.lower() in str(attr).lower()
for attr in asdict(activity).values()
)
if any(search_keyword.lower() in str(attr).lower() for attr in asdict(activity).values())
]

else:
Expand Down
20 changes: 5 additions & 15 deletions app/blueprints/assessments/form_lists_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,7 @@ def __gather_lists(directory, language_code):
for item in data.get("lists", []):
name = item.get("name").strip()
all_lists.setdefault(name, {"EN": [], "CY": []})[language_code].extend(
[
{"value": item.get("value").strip()}
for item in item.get("items", [])
]
[{"value": item.get("value").strip()} for item in item.get("items", [])]
)
return all_lists

Expand All @@ -28,24 +25,19 @@ def __combine_rounds(rounds):
path = os.path.join(r, sub_dir)
lists = __gather_lists(path, lang_code)
for name, items in lists.items():
round_lists.setdefault(name, {"EN": [], "CY": []})[lang_code].extend(
items[lang_code]
)
round_lists.setdefault(name, {"EN": [], "CY": []})[lang_code].extend(items[lang_code])
return round_lists


def __extract_translations(round_lists):
translation_dict, duplicates = {}, set()
for content in round_lists.values():
for welsh, english in zip(content["CY"], content["EN"]):
for welsh, english in zip(content["CY"], content["EN"], strict=False):
welsh_value, english_value = (
welsh["value"].strip(),
english["value"].strip(),
)
if (
welsh_value in translation_dict
and translation_dict[welsh_value] != english_value
):
if welsh_value in translation_dict and translation_dict[welsh_value] != english_value:
duplicates.add(welsh_value)
translation_dict[welsh_value] = english_value
return translation_dict, duplicates
Expand Down Expand Up @@ -78,9 +70,7 @@ def __extract_translations(round_lists):
)}"""

lines = content.split("\n")
processed_lines = [
line + " # noqa" if len(line) > 118 else line for line in lines
] # for long lines we noqa
processed_lines = [line + " # noqa" if len(line) > 118 else line for line in lines] # for long lines we noqa
processed_lines[-2] += "," # add trailing comma to avoid pre-commit failures
content = "\n".join(processed_lines)

Expand Down
24 changes: 6 additions & 18 deletions app/blueprints/assessments/forms/assignment_forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,7 @@ def validate(self, extra_validators=None):
# From a redirect, not a form post
return False

if not (
selected_assessments := request.form.getlist("selected_assessments")
):
if not (selected_assessments := request.form.getlist("selected_assessments")):
self.form_errors.append("At least one assessment should be selected")
return False

Expand Down Expand Up @@ -47,12 +45,8 @@ def validate(self, extra_validators=None):
# From a redirect, not a form post
return False

if set(request.form.getlist("assigned_users")) == set(
request.form.getlist("selected_users")
):
self.form_errors.append(
"No changes have been made to the current assignments for this application"
)
if set(request.form.getlist("assigned_users")) == set(request.form.getlist("selected_users")):
self.form_errors.append("No changes have been made to the current assignments for this application")
return False

return True
Expand All @@ -73,9 +67,7 @@ def validate(self, extra_validators=None):
passed_validation = True
for key, value in request.form.items():
if "message_" in key and len(value) > 2000:
self.message_errors[key] = (
"The message must be 2000 characters or less"
)
self.message_errors[key] = "The message must be 2000 characters or less"
passed_validation = False

return passed_validation
Expand All @@ -91,12 +83,8 @@ def validate(self, extra_validators=None):
return False

passed_validation = True
if set(request.form.getlist("assigned_users")) == set(
request.form.getlist("selected_users")
):
self.form_errors.append(
"No changes have been made to the current assignments for this application"
)
if set(request.form.getlist("assigned_users")) == set(request.form.getlist("selected_users")):
self.form_errors.append("No changes have been made to the current assignments for this application")
return False

if not request.form.getlist("assessor_role"):
Expand Down
4 changes: 1 addition & 3 deletions app/blueprints/assessments/forms/comments_form.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
from flask_wtf import FlaskForm
from wtforms import TextAreaField
from wtforms.validators import InputRequired
from wtforms.validators import length
from wtforms.validators import InputRequired, length

from config import Config


class CommentsForm(FlaskForm):

comment = TextAreaField(
"Comment",
validators=[
Expand Down
64 changes: 15 additions & 49 deletions app/blueprints/assessments/helpers.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,16 @@
import csv
from collections import OrderedDict
from io import StringIO
from typing import Dict
from typing import List
from typing import Dict, List
from urllib.parse import quote_plus

from bs4 import BeautifulSoup
from flask import Response
from flask import url_for
from flask import Response, url_for
from fsd_utils import NotifyConstants
from fsd_utils.mapping.application.application_utils import format_answer
from fsd_utils.mapping.application.application_utils import simplify_title
from fsd_utils.mapping.application.application_utils import format_answer, simplify_title

from app.blueprints.assessments.models.common import Option
from app.blueprints.assessments.models.common import OptionGroup
from app.blueprints.services.aws import generate_url
from app.blueprints.services.aws import list_files_by_prefix
from app.blueprints.assessments.models.common import Option, OptionGroup
from app.blueprints.services.aws import generate_url, list_files_by_prefix
from app.blueprints.services.models.flag import FlagType
from app.blueprints.services.models.fund import Fund
from app.blueprints.shared.filters import utc_to_bst
Expand Down Expand Up @@ -99,9 +94,7 @@ def set_application_status_in_overview(application_overviews):


def set_assigned_info_in_overview(application_overviews, users_for_fund):
users_for_fund_dict = (
{user["account_id"]: user for user in users_for_fund} if users_for_fund else {}
)
users_for_fund_dict = {user["account_id"]: user for user in users_for_fund} if users_for_fund else {}
users_not_found = []
for overview in application_overviews:
overview["assigned_to_names"] = []
Expand All @@ -114,9 +107,7 @@ def set_assigned_info_in_overview(application_overviews, users_for_fund):
try:
user_details = users_for_fund_dict[user_id]
overview["assigned_to_names"].append(
user_details["full_name"]
if user_details["full_name"]
else user_details["email_address"]
user_details["full_name"] if user_details["full_name"] else user_details["email_address"]
)
except KeyError:
users_not_found.append(user_id)
Expand All @@ -132,12 +123,7 @@ def get_tag_map_and_tag_options(tag_types, fund_round_tags, post_processed_overv
[
Option(value=tag.id, text_content=tag.value)
for tag in fund_round_tags
if tag.type_id
in {
tag_type.id
for tag_type in tag_types
if tag_type.purpose in purposes
}
if tag.type_id in {tag_type.id for tag_type in tag_types if tag_type.purpose in purposes}
],
key=lambda option: option.text_content,
),
Expand Down Expand Up @@ -166,9 +152,7 @@ def get_tag_map_and_tag_options(tag_types, fund_round_tags, post_processed_overv
return tags_in_application_map, tag_option_groups


def generate_csv_of_application(
q_and_a: dict, fund: Fund, application_json, fund_round_name=None
):
def generate_csv_of_application(q_and_a: dict, fund: Fund, application_json, fund_round_name=None):
output = StringIO()
writer = csv.writer(output)
writer.writerow(["Fund", fund_round_name, fund.id])
Expand All @@ -190,9 +174,7 @@ def generate_csv_of_application(
if not answers:
answers = "Not provided"

writer.writerow(
[section_title, questions, format_answer(answer=answers, language="en")]
)
writer.writerow([section_title, questions, format_answer(answer=answers, language="en")])
return output.getvalue()


Expand All @@ -207,11 +189,7 @@ def generate_csv_of_application(

def generate_assessment_info_csv(data: dict):
output = StringIO()
headers = list(
OrderedDict.fromkeys(
key for d in data for key in d.keys() if key not in _EXCLUDED_HEADERS
)
)
headers = list(OrderedDict.fromkeys(key for d in data for key in d.keys() if key not in _EXCLUDED_HEADERS))
csv_writer = csv.writer(output)

if len(data) == 0:
Expand All @@ -234,9 +212,7 @@ def download_file(data, mimetype, file_name):
)


def get_files_for_application_upload_fields(
application_id: str, short_id: str, application_json: dict
) -> List[tuple]:
def get_files_for_application_upload_fields(application_id: str, short_id: str, application_json: dict) -> List[tuple]:
"""
This function retrieves the file names from an application_json
then uses this to create a lsit of tuples containing the file name
Expand Down Expand Up @@ -276,10 +252,7 @@ def get_files_for_application_upload_fields(

# files which used the client side file upload component
client_side_upload_files = list_files_by_prefix(application_id)
files = [
(file.filename, generate_url(file, short_id))
for file in client_side_upload_files
]
files = [(file.filename, generate_url(file, short_id)) for file in client_side_upload_files]

return legacy_files + files

Expand Down Expand Up @@ -309,7 +282,6 @@ def _sanitise_data(data, language=None):
data = [_sanitise_data(d, language) for d in data]

if isinstance(data, bool):

data = convert_bool_value(data, language)
if isinstance(data, str):
data = strip_tags(data)
Expand All @@ -332,9 +304,7 @@ def convert_datetime_to_bst(data):
for _date in _data:
date_submitted = _date.get("Date Submitted")
if date_submitted:
_date["Date Submitted"] = utc_to_bst(
value=date_submitted, export_format=True
)
_date["Date Submitted"] = utc_to_bst(value=date_submitted, export_format=True)
return data


Expand Down Expand Up @@ -377,8 +347,4 @@ def get_hierachy_level(assignees):
else:
sorted_first = sorted(first["assigned_to_names"])
sorted_second = sorted(second["assigned_to_names"])
return (
-1
if sorted_first < sorted_second
else 1 if sorted_first > sorted_second else 0
)
return -1 if sorted_first < sorted_second else 1 if sorted_first > sorted_second else 0
Loading

0 comments on commit b5e428f

Please sign in to comment.