Code quality
ALN** occurrences by order of importance¶
| NOQA | Number of occurrences |
|---|---|
| ALN069: You can't import models from other components, see: https://www.notion.so/alaninsurance/Modular-monolith-a9d84f1318d34115bbd08b3648e5a587 ⧉", | 21 |
ALN043: You can only import things from a Component public module, see: https://www.notion.so/alaninsurance/Modular-monolith-a9d84f1318d34115bbd08b3648e5a587 ⧉", |
37 |
ALN039: The module public cannot import other components (or from apps/), it's meant to be the public interface of the component #{self.component_name}, see: https://www.notion.so/alaninsurance/Modular-monolith-a9d84f1318d34115bbd08b3648e5a587 ⧉", |
30 |
| ALN027: This class checks that no protected attribute access is used. | 6 |
ALN041: As the model '{node.name}' is in a component it must be part of specific schema that is declared in components/{self.component_name}/models/helpers.py", |
4 |
ALN072: Functions decorated with @enqueueable should not use non-primitive type arguments. The function is used by RQ and the arguments must be serializable and robust for code moves/refactors. |
1 |
| ALN076: The tablename class attribute is mandatory on all SQLAlchemy models inheriting from DbModel, AlanNonVersionedModel, BaseModel or any of their derived classes. | 4 |
| ALN077: Check for usage of backref in SQLAlchemy relationships and suggest using back_populates instead. | 28 |
| ALN085: Enforces SQLAlchemy 2.0 query style by detecting deprecated patterns that will be removed in SQLAlchemy 2.0. This linter checks for: 1. Usage of session.query() which is deprecated in favor of session.scalar(), session.scalars(), or session.execute() Note: Other SQLAlchemy 2.0 deprecation warnings are already being turned into errors at runtime by the _turn_sql_alchemy_warning_into_errors function in backend/shared/models/orm/sqlalchemy.py. | 264 |
ALN096: Do not set auth headers (Authorization, CF-Access-*, X-Api-Key) inline in HTTP calls. Use a requests.auth.AuthBase subclass instead. This centralizes auth logic, makes credentials easier to rotate, and prevents accidental leaks in logs. Bad: requests.get(url, headers={"Authorization": f"Bearer {token}"}) Good: class BearerAuth(requests.auth.AuthBase): def init(self, token: str) -> None: self.token = token def call(self, r: requests.PreparedRequest) -> requests.PreparedRequest: r.headers["Authorization"] = f"Bearer {self.token}" return r requests.get(url, auth=BearerAuth(token)) |
4 |
| ALN097: Google API .execute() calls must pass num_retries for resilience against rate limiting. | 9 |
Listing of files of the most critical ALN**¶
ALN069 occurs 21 times¶
| File:line | Content |
|---|---|
| components/clinic/internal/controllers/health_professional/tests/test_bookmarks.py:20 ⧉ | from components.fr.internal.models.tests.test_user import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/controllers/health_professional/tests/test_clinic_user.py:19 ⧉ | from components.fr.internal.models.tests.test_user import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/controllers/health_professional/tests/test_clinic_user.py:78 ⧉ | from components.medical_profile.internal.models.medical_profile_trait_definition import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/controllers/health_professional/tests/test_tags.py:24 ⧉ | from components.fr.internal.models.tests.test_user import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/controllers/health_professional/tests/test_health_professional.py:20 ⧉ | from components.fr.internal.models.tests.test_user import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/controllers/health_professional/tests/test_follow_ups.py:31 ⧉ | from components.fr.internal.models.tests.test_user import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/controllers/health_professional/tests/test_health_templates.py:16 ⧉ | from components.fr.internal.models.tests.test_user import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/controllers/health_professional/tests/test_booking.py:39 ⧉ | from components.fr.internal.models.tests.test_user import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/controllers/admin/tests/test_medical_admins.py:45 ⧉ | from components.fr.internal.models.user import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/booking/business_logic/tests/test_sessions_invoicing.py:36 ⧉ | from components.fr.internal.models.tests.test_user import ( # noqa: ALN069 |
| components/clinic/internal/business_logic/medical_chat_bot.py:21 ⧉ | from components.fr.internal.models.user import ( # noqa: ALN069 |
| components/clinic/internal/business_logic/medical_admin.py:175 ⧉ | from components.fr.internal.models.user import ( # noqa: ALN069 |
| components/clinic/internal/business_logic/emails.py:43 ⧉ | from components.fr.internal.models.user import ( # noqa: ALN069 |
| components/clinic/internal/business_logic/queries/health_program_context.py:111 ⧉ | from components.medical_profile.internal.models.medical_profile import ( # noqa: ALN069 |
| components/clinic/internal/business_logic/queries/health_program_context.py:114 ⧉ | from components.medical_profile.internal.models.medical_profile_collected_trait import ( # noqa: ALN069 |
| components/clinic/internal/business_logic/tests/test_delete_all_clinic_data_for_user.py:123 ⧉ | from components.medical_profile.internal.business_logic.tests.factories.medical_profile import ( # noqa: ALN069 ALN043 |
| components/clinic/internal/business_logic/tests/test_delete_all_clinic_data_for_user.py:126 ⧉ | from components.medical_profile.internal.models.medical_profile import ( # noqa: ALN069 |
| components/clinic/internal/business_logic/tests/test_clinic_user.py:116 ⧉ | from components.medical_profile.internal.models.medical_profile_trait_definition import ( # noqa: ALN069 |
| components/clinic/internal/business_logic/tests/test_medical_admin_logic.py:71 ⧉ | from components.fr.internal.models.user import ( # noqa: ALN069 |
| components/clinic/internal/business_logic/tests/test_push_notification_senders.py:4 ⧉ | from components.be.internal.models.tests.factories import ( # noqa: ALN069 |
| components/clinic/public/commands/medical_admins.py:36 ⧉ | from components.fr.internal.models.user import ( # noqa: ALN039,ALN069 |
ALN043 occurs 37 times¶
| File:line | Content |
|---|---|
| components/clinic/internal/controllers/member/tests/test_conversations.py:45 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/member/tests/test_video_meeting.py:14 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/member/tests/test_conversation_parts.py:15 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/member/tests/test_booking.py:51 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/tests/test_common.py:27 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/tests/test_medical_admins.py:22 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_shift_donation_requests.py:5 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_prescription.py:3 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_clinic_user.py:68 ⧉ | from components.medical_profile.internal.business_logic.data_loader import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_clinic_user.py:71 ⧉ | from components.medical_profile.internal.business_logic.tests.factories.medical_profile import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_clinic_user.py:75 ⧉ | from components.medical_profile.internal.entities.trait_property import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_conversations.py:57 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_medical_admins.py:3 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_invoices.py:6 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_medical_admin_ans.py:5 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_billing_assurance_maladie.py:5 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_suicidal_risk.py:3 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/external_onboarding/tests/test_external_onboarding.py:10 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN043 |
| components/clinic/internal/controllers/admin/tests/test_medical_admins.py:48 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/admin/tests/test_invoices.py:9 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/admin/tests/test_booking.py:10 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/services/gpt.py:13 ⧉ | from components.fr.internal.business_logic.helpers.voice_message_transcription import ( # noqa: ALN043 |
| components/clinic/internal/booking/business_logic/notifications_mail.py:17 ⧉ | from components.clinic.internal.booking.business_logic.therapist_booking_email import ( # noqa: ALN043 |
| components/clinic/internal/booking/business_logic/tests/test_notifications.py:19 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN043 |
| components/clinic/internal/business_logic/tests/test_medical_conversation_for_session_logic.py:72 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN043 |
| components/clinic/internal/business_logic/tests/test_delete_all_clinic_data_for_user.py:123 ⧉ | from components.medical_profile.internal.business_logic.tests.factories.medical_profile import ( # noqa: ALN069 ALN043 |
| components/clinic/internal/business_logic/tests/test_clinic_user.py:42 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN043 |
| components/clinic/internal/business_logic/tests/test_clinic_user.py:106 ⧉ | from components.medical_profile.internal.business_logic.data_loader import ( # noqa: ALN043 |
| components/clinic/internal/business_logic/tests/test_clinic_user.py:109 ⧉ | from components.medical_profile.internal.business_logic.tests.factories.medical_profile import ( # noqa: ALN043 |
| components/clinic/internal/business_logic/tests/test_clinic_user.py:113 ⧉ | from components.medical_profile.internal.entities.trait_property import ( # noqa: ALN043 |
| components/clinic/internal/business_logic/tests/test_medical_conversation_logic.py:153 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN043 |
| components/clinic/internal/business_logic/tests/test_medical_conversation_logic_performance.py:53 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN043 |
| components/clinic/internal/business_logic/tests/test_medical_admin_logic.py:74 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN043 |
| components/clinic/internal/business_logic/tests/test_push_notification_senders.py:29 ⧉ | from components.fr.internal.tests.factories.push_notification_token import ( # noqa: ALN043 |
| components/clinic/internal/business_logic/tests/test_push_notification_senders.py:32 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN043 |
| components/clinic/internal/business_logic/external_onboarding/test_external_onboarding.py:12 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN043 |
| components/clinic/public/commands/medical_conversation.py:113 ⧉ | from components.fr.public.user.create_profile_with_user import ( # noqa: ALN043 |
ALN039 occurs 30 times¶
| File:line | Content |
|---|---|
| components/clinic/internal/controllers/member/tests/test_conversations.py:45 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/member/tests/test_video_meeting.py:14 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/member/tests/test_conversation_parts.py:15 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/member/tests/test_booking.py:51 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/tests/test_common.py:27 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/tests/test_medical_admins.py:22 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_shift_donation_requests.py:5 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_prescription.py:3 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_bookmarks.py:20 ⧉ | from components.fr.internal.models.tests.test_user import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/controllers/health_professional/tests/test_clinic_user.py:19 ⧉ | from components.fr.internal.models.tests.test_user import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/controllers/health_professional/tests/test_clinic_user.py:68 ⧉ | from components.medical_profile.internal.business_logic.data_loader import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_clinic_user.py:71 ⧉ | from components.medical_profile.internal.business_logic.tests.factories.medical_profile import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_clinic_user.py:75 ⧉ | from components.medical_profile.internal.entities.trait_property import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_clinic_user.py:78 ⧉ | from components.medical_profile.internal.models.medical_profile_trait_definition import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/controllers/health_professional/tests/test_conversations.py:57 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_medical_admins.py:3 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_tags.py:24 ⧉ | from components.fr.internal.models.tests.test_user import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/controllers/health_professional/tests/test_invoices.py:6 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_medical_admin_ans.py:5 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_health_professional.py:20 ⧉ | from components.fr.internal.models.tests.test_user import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/controllers/health_professional/tests/test_follow_ups.py:31 ⧉ | from components.fr.internal.models.tests.test_user import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/controllers/health_professional/tests/test_billing_assurance_maladie.py:5 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_health_templates.py:16 ⧉ | from components.fr.internal.models.tests.test_user import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/controllers/health_professional/tests/test_suicidal_risk.py:3 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/health_professional/tests/test_booking.py:39 ⧉ | from components.fr.internal.models.tests.test_user import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/controllers/admin/tests/test_medical_admins.py:45 ⧉ | from components.fr.internal.models.user import ( # noqa: ALN039,ALN069 |
| components/clinic/internal/controllers/admin/tests/test_medical_admins.py:48 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/admin/tests/test_invoices.py:9 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/internal/controllers/admin/tests/test_booking.py:10 ⧉ | from components.fr.internal.tests.factories.user import ( # noqa: ALN039,ALN043 |
| components/clinic/public/commands/medical_admins.py:36 ⧉ | from components.fr.internal.models.user import ( # noqa: ALN039,ALN069 |