def ready(self): setting_changed.connect(uninstall_if_needed) # Connections may already exist before we are called. for conn in connections.all(): if conn.vendor == 'postgresql': conn.introspection.data_types_reverse.update({ 3904: 'django.contrib.postgres.fields.IntegerRangeField', 3906: 'django.contrib.postgres.fields.DecimalRangeField', 3910: 'django.contrib.postgres.fields.DateTimeRangeField', 3912: 'django.contrib.postgres.fields.DateRangeField', 3926: 'django.contrib.postgres.fields.BigIntegerRangeField', }) if conn.connection is not None: register_type_handlers(conn) connection_created.connect(register_type_handlers) CharField.register_lookup(Unaccent) TextField.register_lookup(Unaccent) CharField.register_lookup(SearchLookup) TextField.register_lookup(SearchLookup) CharField.register_lookup(TrigramSimilar) TextField.register_lookup(TrigramSimilar) CharField.register_lookup(TrigramWordSimilar) TextField.register_lookup(TrigramWordSimilar) MigrationWriter.register_serializer(RANGE_TYPES, RangeSerializer) IndexExpression.register_wrappers(OrderBy, OpClass, Collate)
def test_register_serializer(self): class ComplexSerializer(BaseSerializer): def serialize(self): return "complex(%r)" % self.value, {} MigrationWriter.register_serializer(complex, ComplexSerializer) self.assertSerializedEqual(complex(1, 2)) MigrationWriter.unregister_serializer(complex) with self.assertRaisesMessage(ValueError, "Cannot serialize: (1+2j)"): self.assertSerializedEqual(complex(1, 2))
def test_register_serializer(self): class ComplexSerializer(BaseSerializer): def serialize(self): return 'complex(%r)' % self.value, {} MigrationWriter.register_serializer(complex, ComplexSerializer) self.assertSerializedEqual(complex(1, 2)) MigrationWriter.unregister_serializer(complex) with self.assertRaisesMessage(ValueError, 'Cannot serialize: (1+2j)'): self.assertSerializedEqual(complex(1, 2))
def ready(self): setting_changed.connect(uninstall_if_needed) # Connections may already exist before we are called. for conn in connections.all(): if conn.vendor == 'postgresql': conn.introspection.data_types_reverse.update({ 3802: 'django.contrib.postgres.fields.JSONField', 3904: 'django.contrib.postgres.fields.IntegerRangeField', 3906: 'django.contrib.postgres.fields.DecimalRangeField', 3910: 'django.contrib.postgres.fields.DateTimeRangeField', 3912: 'django.contrib.postgres.fields.DateRangeField', 3926: 'django.contrib.postgres.fields.BigIntegerRangeField', }) if conn.connection is not None: register_type_handlers(conn) connection_created.connect(register_type_handlers) CharField.register_lookup(Unaccent) TextField.register_lookup(Unaccent) CharField.register_lookup(SearchLookup) TextField.register_lookup(SearchLookup) CharField.register_lookup(TrigramSimilar) TextField.register_lookup(TrigramSimilar) MigrationWriter.register_serializer(RANGE_TYPES, RangeSerializer)
from django.core.files.storage import FileSystemStorage from django.db.migrations.serializer import BaseSerializer from django.db.migrations.writer import MigrationWriter class FileSystemStorageSerializer(BaseSerializer): def serialize(self): return self.value.location, { 'from django.core.files.storage import FileSystemStorage' } MigrationWriter.register_serializer(FileSystemStorage, FileSystemStorageSerializer)
def test_register_non_serializer(self): with self.assertRaisesMessage( ValueError, "'TestModel1' must inherit from 'BaseSerializer'." ): MigrationWriter.register_serializer(complex, TestModel1)
def get_text_for_value(self, value): return ', '.join( [self.choicelist.get_text_for_value(bc.value) for bc in value]) # from lino.core.choicelists import Choice, ChoiceList, CallableChoice class ChoiceSerializer(BaseSerializer): def serialize(self): return ("rt.models.{}.{}.get_by_value('{}')".format( self.value.choicelist.app_label, self.value.choicelist.__name__, self.value.value), {'from lino.api.shell import rt'}) MigrationWriter.register_serializer(Choice, ChoiceSerializer) class ChoiceListSerializer(BaseSerializer): def serialize(self): return ("rt.models.{}.{}".format(self.value.choicelist.app_label, self.value.choicelist.__name__), {'from lino.api.shell import rt'}) MigrationWriter.register_serializer(ChoiceList, ChoiceListSerializer) class CallableChoiceSerializer(BaseSerializer): def serialize(self): choice = self.value()
"false").lower() == "true") # Rendre certains warnings silencieux SILENCED_SYSTEM_CHECKS = [ # On a remplacé django.contrib.auth.context_processors.auth par un équivalent, agir.authentication.context_processors.auth "admin.E402", # social_django utilise encore des champs postgres JSON (au lieu du nouveau JSONField de Django) "fields.W904", ] # Django ne sait pas par défaut sérializer les types intervalle de psycopg2 # Cela fait du coup planter `makemigrate` quand il tente de séralizer les valeurs # par défaut des champs de dates pour les modèles de mandats (dans l'appli élus). # Il faut enregistrer manuellement le serializer correspondant auprès du générateur # de migrations. MigrationWriter.register_serializer(DateRange, RangeSerializer) # Django < 3.1 not compatible with GDAL 3 if os.environ.get("GDAL_LIBRARY_PATH"): GDAL_LIBRARY_PATH = os.environ.get("GDAL_LIBRARY_PATH") ENABLE_API = os.environ.get("ENABLE_API", "n").lower() in YES_VALUES or DEBUG ENABLE_ADMIN = os.environ.get("ENABLE_ADMIN", "n").lower() in YES_VALUES or DEBUG ENABLE_FRONT = os.environ.get("ENABLE_FRONT", "n").lower() in YES_VALUES or DEBUG # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) TEST_RUNNER = "agir.api.test_runner.TestRunner"
def test_register_non_serializer(self): with self.assertRaisesMessage(ValueError, "'TestModel1' must inherit from 'BaseSerializer'."): MigrationWriter.register_serializer(complex, TestModel1)