Skip to content

Commit 5cd007a

Browse files
committed
Merge branch 'develop' of https://github.com/dinesh-aot/EPIC.compliance into regulatory_fix
2 parents 0762aaf + c408b9e commit 5cd007a

File tree

13 files changed

+51
-33
lines changed

13 files changed

+51
-33
lines changed

.github/workflows/api-ci.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,14 @@ jobs:
4646
sudo apt update
4747
sudo apt install libsasl2-dev libldap2-dev libssl-dev --yes
4848
make setup
49-
- name: Lint with pylint
50-
id: pylint
51-
run: |
52-
make pylint
5349
- name: Lint with flake8
5450
id: flake8
5551
run: |
5652
make flake8
53+
- name: Lint with pylint
54+
id: pylint
55+
run: |
56+
make pylint
5757
5858
testing:
5959
needs: setup-job

compliance-api/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ install-dev: ## Install local application
6868
ci: lint flake8 test ## CI flow
6969

7070
pylint: ## Linting with pylint
71-
. venv/bin/activate && pylint --rcfile=setup.cfg src/$(PROJECT_NAME)
71+
. venv/bin/activate && pylint --rcfile=setup.cfg --persistent=yes --jobs=4 src/$(PROJECT_NAME)
7272

7373
flake8: ## Linting with flake8
7474
. venv/bin/activate && flake8 --ignore=Q000,W503 src/$(PROJECT_NAME) tests

compliance-api/requirements/dev.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ flake8==4.0.1
1414
flake8-blind-except
1515
flake8-debugger
1616
flake8-docstrings
17-
flake8-isort
17+
flake8-isort==6.1.1
1818
flake8-quotes
1919
pep8-naming
2020
autopep8

compliance-api/requirements/prod.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Flask-SQLAlchemy
77
SQLAlchemy-Continuum
88
flask-restx
99
flask-marshmallow==1.2.1
10-
flask-jwt-oidc
10+
flask-jwt-oidc==0.7.0
1111
python-dotenv
1212
psycopg2-binary
1313
marshmallow-sqlalchemy==1.0.0

compliance-api/src/compliance_api/auth.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def decorated(f):
5757
@wraps(f)
5858
def wrapper(*args, **kwargs):
5959
mapped_groups = _map_permission_to_groups(permissions)
60-
if jwt.contains_role(mapped_groups):
60+
if jwt.contains_role(roles=mapped_groups):
6161
return f(*args, **kwargs)
6262

6363
raise PermissionDeniedError(
@@ -72,13 +72,13 @@ def wrapper(*args, **kwargs):
7272
@classmethod
7373
def has_role(cls, role):
7474
"""Validate the role."""
75-
return jwt.validate_roles(role)
75+
return jwt.validate_roles(required_roles=role)
7676

7777
@classmethod
7878
def has_permission(cls, permissions):
7979
"""Check to see if the user has right permissions."""
8080
mapped_groups = _map_permission_to_groups(permissions)
81-
return jwt.contains_role(mapped_groups)
81+
return jwt.contains_role(roles=mapped_groups)
8282

8383

8484
def _map_permission_to_groups(permissions):

compliance-api/src/compliance_api/schemas/inspection_requirement.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
from marshmallow_enum import EnumField
1717

1818
from compliance_api.models import (
19-
InspectionReqDetailDocument, InspectionReqSourceDetail, InspectionRequirement, InspectionRequirementTypeEnum)
19+
EnforcementActionOptionEnum, InspectionReqDetailDocument, InspectionReqSourceDetail, InspectionRequirement,
20+
InspectionRequirementTypeEnum)
2021
from compliance_api.models.requirement_source import RequirementSourceEnum
2122

2223
from .base_schema import AutoSchemaBase, BaseSchema
@@ -182,7 +183,7 @@ class InspectionRequirementCreateSchema(BaseSchema):
182183
)
183184
compliance_finding_id = fields.Int(
184185
metadata={"description": "The unique identifier of the compliance findings."},
185-
allow_none=True
186+
allow_none=True,
186187
)
187188
findings = fields.Str(
188189
metadata={"description": "The requirement findings in html format."},
@@ -204,6 +205,16 @@ def validate_agency_id(
204205
"Agency is required if the requirement type is Regulatory Consideration",
205206
field_name="agency_id",
206207
)
208+
enforcement_action_ids = data.get("enforcement_action_ids")
209+
if (
210+
EnforcementActionOptionEnum.REFERRAL_TO_ANOTHER_AGENCY
211+
in enforcement_action_ids
212+
and not agency_id
213+
):
214+
raise ValidationError(
215+
"Agency is required if the enforcement actions include REFERRAL_TO_ANOTHER_AGENCY",
216+
field_name="agency_id",
217+
)
207218

208219

209220
class InspectionRequirementUpdateSchema(InspectionRequirementCreateSchema):

compliance-api/src/compliance_api/schemas/staff_user.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,10 @@ class Meta(AutoSchemaBase.Meta): # pylint: disable=too-few-public-methods
3333
include_fk = True
3434

3535
position = fields.Nested(KeyValueSchema, dump_only=True)
36-
permission = fields.Str(
37-
metadata={"description": "The permission level of the user in the app"}
38-
)
36+
# permission = fields.Str(
37+
# metadata={"description": "The permission level of the user in the app"}
38+
# )
39+
permission = fields.Raw()
3940
name = fields.Method("get_full_name")
4041

4142
def get_full_name(self, obj): # pylint: disable=no-self-use
@@ -52,7 +53,11 @@ def nullify_nested(
5253
if data.get("supervisor_id") is None:
5354
data["supervisor"] = None
5455
if data.get("permission") in [p.name for p in PermissionEnum]:
55-
data["permission"] = getattr(PermissionEnum, data.get("permission")).name
56+
# data["permission"] = getattr(PermissionEnum, data.get("permission")).value
57+
data["permission"] = {
58+
"id": getattr(PermissionEnum, data.get("permission")).name,
59+
"name": getattr(PermissionEnum, data.get("permission")).value
60+
}
5661
return data
5762

5863

compliance-api/src/compliance_api/services/staff_user.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ def _create_staff_user_object(user_data: dict, auth_user: dict):
109109
"deputy_director_id": user_data.get("deputy_director_id"),
110110
"supervisor_id": user_data.get("supervisor_id", None),
111111
"auth_user_guid": auth_user.get("username", None),
112-
"is_active": auth_user.get("is_active")
112+
"is_active": auth_user.get("is_active"),
113113
}
114114

115115

@@ -129,7 +129,11 @@ def _set_permission_level_in_compliance_user_obj(
129129
"""Set the permission level in compliance user."""
130130
if auth_user and auth_user.get("groups", None):
131131
sorted_groups = sorted(auth_user.get("groups", None), key=_get_level)
132-
if sorted_groups[-1] and sorted_groups[-1]["name"]:
132+
if (
133+
sorted_groups[-1]
134+
and sorted_groups[-1]["name"]
135+
and sorted_groups[-1]["name"] in [p.name for p in PermissionEnum]
136+
):
133137
setattr(compliance_user, "permission", sorted_groups[-1]["name"])
134138
return compliance_user
135139

compliance-api/tests/integration/api/test_staff_user.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def test_create_staff_user_mandatory(
6868
print(result.json)
6969
assert result.status_code == HTTPStatus.CREATED
7070
assert result.json["auth_user_guid"] == staff_user_data["auth_user_guid"]
71-
assert result.json["permission"] == "VIEWER"
71+
assert result.json["permission"]["id"] == "VIEWER"
7272
assert result.json["position_id"] == staff_user_data["position_id"]
7373
assert result.json["first_name"] == firstname
7474
assert result.json["last_name"] == lastname
@@ -109,7 +109,7 @@ def test_create_staff_user_all_fields(
109109

110110
assert result.status_code == HTTPStatus.CREATED
111111
assert result.json["auth_user_guid"] == staff_user_data["auth_user_guid"]
112-
assert result.json["permission"] == "USER"
112+
assert result.json["permission"]["id"] == "USER"
113113
assert result.json["position_id"] == staff_user_data["position_id"]
114114
assert result.json["deputy_director_id"] == staff_user_data["deputy_director_id"]
115115
assert result.json["supervisor_id"] == staff_user_data["supervisor_id"]
@@ -188,7 +188,7 @@ def test_get_users(mock_auth_service, mocker, client, auth_header_super_user):
188188
)
189189
print(filtered_user)
190190
assert filtered_user is not None
191-
assert filtered_user.get("permission", None) == "USER"
191+
assert filtered_user.get("permission", {}).get("id", None) == "USER"
192192
assert result.status_code == HTTPStatus.OK
193193

194194

compliance-web/src/components/App/CaseFiles/Profile/CaseFileGeneralInformation.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1+
import FileProfileProperty from "@/components/App/FileProfileProperty";
2+
import { CaseFile } from "@/models/CaseFile";
3+
import { formatAuthorization } from "@/utils/appUtils";
14
import dateUtils from "@/utils/dateUtils";
25
import { EditRounded } from "@mui/icons-material";
36
import { Box, Button, Stack, Typography } from "@mui/material";
4-
import FileProfileProperty from "@/components/App/FileProfileProperty";
5-
import { CaseFile } from "@/models/CaseFile";
6-
import CaseFileInspectionsTable from "./CaseFileInspectionsTable";
77
import CaseFileComplaintsTable from "./CaseFileComplaintsTable";
8-
import { formatAuthorization } from "@/utils/appUtils";
8+
import CaseFileInspectionsTable from "./CaseFileInspectionsTable";
99

1010
interface CaseFileGeneralInformationProps {
1111
caseFileData: CaseFile;
@@ -47,7 +47,7 @@ const CaseFileGeneralInformation: React.FC<CaseFileGeneralInformationProps> = ({
4747
size="small"
4848
/>
4949
<FileProfileProperty
50-
propertyName="Certificate Holder"
50+
propertyName="Regulated Party"
5151
propertyValue={caseFileData.regulated_party}
5252
size="small"
5353
/>

0 commit comments

Comments
 (0)