diff --git a/iranian_cities/admin.py b/iranian_cities/admin.py index 87ba638..fc03e27 100644 --- a/iranian_cities/admin.py +++ b/iranian_cities/admin.py @@ -1,11 +1,9 @@ from django.contrib import admin from django.contrib.admin import widgets -from django.contrib.admin.options import InlineModelAdmin from django.db.models import ForeignKey from django.http import HttpRequest from typing import Any, Optional from iranian_cities.mixins.dynamic_permission import IranianCitiesAdminReadOnlyEnabled, DynamicInlineAdmin -from iranian_cities.conf import sage_iranian_cities_settings from iranian_cities.mixins.base_inline import BaseTabularInline from iranian_cities.models import ( Province, County, District, diff --git a/iranian_cities/checks.py b/iranian_cities/checks.py index 88a2b28..ec6eab1 100644 --- a/iranian_cities/checks.py +++ b/iranian_cities/checks.py @@ -47,7 +47,7 @@ def get_iranian_cities_settings() -> Dict[str, Any]: sage_iranian_cities_admin_delete_readonly_enabled: bool = sage_iranian_cities_settings.IRANIAN_CITIES_ADMIN_DELETE_READONLY_ENABLED sage_iranian_cities_admin_change_readonly_enabled: bool = sage_iranian_cities_settings.IRANIAN_CITIES_ADMIN_CHANGE_READONLY_ENABLED sage_iranian_cities_admin_inline_enabled: bool = sage_iranian_cities_settings.IRANIAN_CITIES_ADMIN_INLINE_ENABLED - + return { "IRANIAN_CITIES_ADMIN_ADD_READONLY_ENABLED": sage_iranian_cities_admin_add_readonly_enabled, "IRANIAN_CITIES_ADMIN_DELETE_READONLY_ENABLED": sage_iranian_cities_admin_delete_readonly_enabled, @@ -75,5 +75,5 @@ def check_missing_configs(settings: Dict[str, Any]) -> None: id=id, ) ) - + return errors diff --git a/iranian_cities/conf.py b/iranian_cities/conf.py index aef80be..271286b 100644 --- a/iranian_cities/conf.py +++ b/iranian_cities/conf.py @@ -7,7 +7,7 @@ class SageIranianCitiesSettings: _settings: Dict[str, bool] def __init__(self): - + self._settings = {} for setting, default in DEFAULT_SETTINGS.items(): value: Any = getattr(settings, setting, default) diff --git a/iranian_cities/constants.py b/iranian_cities/constants.py index ee1832b..8581873 100644 --- a/iranian_cities/constants.py +++ b/iranian_cities/constants.py @@ -1,8 +1,9 @@ +from typing import Dict # Default values for permissions -DEFAULT_SETTINGS = { +DEFAULT_SETTINGS: Dict[str, bool] = { "IRANIAN_CITIES_ADMIN_ADD_READONLY_ENABLED": True, "IRANIAN_CITIES_ADMIN_DELETE_READONLY_ENABLED": True, "IRANIAN_CITIES_ADMIN_CHANGE_READONLY_ENABLED": True, - "IRANIAN_CITIES_ADMIN_INLINE_ENABLED": True, + "IRANIAN_CITIES_ADMIN_INLINE_ENABLED": False, } diff --git a/iranian_cities/fields.py b/iranian_cities/fields.py index 77f508c..9a6af01 100644 --- a/iranian_cities/fields.py +++ b/iranian_cities/fields.py @@ -1,15 +1,13 @@ +from typing import Any from django.db import models - -from iranian_cities.models import ( - Province, County, District, - City, RuralDistrict, Village -) - +from iranian_cities.models import Province, County, District, City, RuralDistrict, Village class ProvinceField(models.ForeignKey): - description = 'Iranian Province' + """A ForeignKey field for Iranian Provinces.""" - def __init__(self, *args, **kwargs): + description: str = 'Iranian Province' + + def __init__(self, *args: Any, **kwargs: Any) -> None: defaults = { 'to': Province, 'on_delete': models.CASCADE @@ -18,9 +16,11 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **defaults) class CountyField(models.ForeignKey): - description = 'Iranian County' + """A ForeignKey field for Iranian Counties.""" + + description: str = 'Iranian County' - def __init__(self, *args, **kwargs): + def __init__(self, *args: Any, **kwargs: Any) -> None: defaults = { 'to': County, 'on_delete': models.CASCADE @@ -29,9 +29,11 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **defaults) class DistrictField(models.ForeignKey): - description = 'Iranian District' + """A ForeignKey field for Iranian Districts.""" - def __init__(self, *args, **kwargs): + description: str = 'Iranian District' + + def __init__(self, *args: Any, **kwargs: Any) -> None: defaults = { 'to': District, 'on_delete': models.CASCADE @@ -40,9 +42,11 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **defaults) class CityField(models.ForeignKey): - description = 'Iranian City' + """A ForeignKey field for Iranian Cities.""" + + description: str = 'Iranian City' - def __init__(self, *args, **kwargs): + def __init__(self, *args: Any, **kwargs: Any) -> None: defaults = { 'to': City, 'on_delete': models.CASCADE @@ -51,9 +55,11 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **defaults) class RuralDistrictField(models.ForeignKey): - description = 'Iranian RuralDistrict' + """A ForeignKey field for Iranian Rural Districts.""" - def __init__(self, *args, **kwargs): + description: str = 'Iranian Rural District' + + def __init__(self, *args: Any, **kwargs: Any) -> None: defaults = { 'to': RuralDistrict, 'on_delete': models.CASCADE @@ -62,9 +68,11 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **defaults) class VillageField(models.ForeignKey): - description = 'Iranian Village' + """A ForeignKey field for Iranian Villages.""" + + description: str = 'Iranian Village' - def __init__(self, *args, **kwargs): + def __init__(self, *args: Any, **kwargs: Any) -> None: defaults = { 'to': Village, 'on_delete': models.CASCADE diff --git a/iranian_cities/management/commands/generate_city.py b/iranian_cities/management/commands/generate_city.py index a1e357e..ba7e9f4 100644 --- a/iranian_cities/management/commands/generate_city.py +++ b/iranian_cities/management/commands/generate_city.py @@ -2,7 +2,6 @@ import csv import logging from django.core.management import BaseCommand -from django.db import transaction, connections from iranian_cities import data from iranian_cities.models import Province, County, District, City, RuralDistrict, Village from typing import List, Dict, Tuple, Union @@ -12,7 +11,7 @@ class Command(BaseCommand): """Management command to generate and populate database tables for Iranian cities.""" - + help = 'Generate all data' def add_arguments(self, parser) -> None: @@ -61,7 +60,7 @@ def prompt_user(self) -> Tuple[bool, str]: f"Your database currently has objects for the following tables: {data_present}. " "\nDo you want to flush the tables? Type 'yes' to flush or 'no' to cancel the operation: " ).strip().lower() - + if response not in ['yes', 'no']: print("Invalid response. Please type 'yes' or 'no'.") elif response == 'yes': @@ -83,11 +82,11 @@ def prompt_user(self) -> Tuple[bool, str]: result = True if response == 'yes' or state == "flush" else False response_by_user = "cancel" if response == 'no' or state == "cancel" else "yes" return result, response_by_user - + result = False response_by_user = "no" return result, response_by_user - + def flush_tables(self) -> None: """Delete all records from the relevant tables.""" diff --git a/iranian_cities/mixins/base_location.py b/iranian_cities/mixins/base_location.py index 18848be..125e9f4 100644 --- a/iranian_cities/mixins/base_location.py +++ b/iranian_cities/mixins/base_location.py @@ -16,7 +16,7 @@ class BaseLocation(Model): verbose_name=_("Code"), help_text=_("The code representing the location."), db_comment="This field stores the code for the location.", - unique=True + unique=True ) @@ -28,4 +28,4 @@ class Meta: ordering = ["id"] indexes = [ Index(fields=["code"]), - ] \ No newline at end of file + ]