Welcome | Get started | Dive | Contribute | Topics | Reference | Changes | More
lino.utils.dpy¶
Defines Lino’s Python serializer and deserializer. See Specification.
Functions
|
The Deserializer used when |
|
Similar to |
|
|
|
Install "migrators" into the given global namespace. |
|
A decorator to be applied when redefining, in a |
|
No longer used in unit tests to manually load a given fixture module. |
Classes
The Django deserializer for The Python serializer. |
|
|
Instantiated by |
|
Imitates DeserializedObject required by loaddata. |
Indicator class object. |
|
|
|
|
The SITE's Migrator class is instantiated by install_migrations. |
Serializes a QuerySet to a py stream. |
- lino.utils.dpy.create_mti_child(parent_model, pk, child_model, **kw)¶
Similar to
lino.utils.mti.insert_child()
, but for usage in Python dumps (generated bypm dump2py
).The difference is very tricky. The return value here is an “almost normal” model instance, whose save and full_clean methods have been hacked. These are the only methods that will be called by
Deserializer
. You should not use this instance for anything else and throw it away when the save() has been called.
- class lino.utils.dpy.FakeDeserializedObject(deserializer, object, **kw)¶
Bases:
DeserializedObject
Imitates DeserializedObject required by loaddata.
Unlike normal DeserializedObject, we do not want to bypass pre_save and validation methods on the individual objects.
- try_save(*args, **kw)¶
Try to save this Model instance.
- class lino.utils.dpy.Serializer¶
Bases:
Serializer
Serializes a QuerySet to a py stream.
Usage:
manage.py dumpdata --format py
DEPRECATED. The problem with this approach is that a serializer creates -by definition- one single file. And Python needs -understandably- to load a module completely into memory before it can be executed. Use
pm dump2py
instead.
- class lino.utils.dpy.FlushDeferredObjects¶
Bases:
object
Indicator class object. Fixture may yield a FlushDeferredObjects to indicate that all deferred objects should get saved before going on.
- class lino.utils.dpy.DpyLoader(globals_dict, quick=None, strict=True)¶
Bases:
LoaderBase
Instantiated by
restore.py
.
- class lino.utils.dpy.DpyDeserializer¶
Bases:
LoaderBase
The Django deserializer for The Python serializer.
Note that this deserializer explicitly ignores fixtures whose source file is located in the current directory because in the case of .py files this can lead to side effects when importing them. See e.g. #1029. We consider it an odd behaviour of Django to search for fixtures also in the current directory (and not, as documented, in the fixtures subdirs of plugins and the optional
FIXTURE_DIRS
).
- lino.utils.dpy.Deserializer(fp, **options)¶
The Deserializer used when
manage.py loaddata
encounters a .py fixture.This is done by setting
SERIALIZATION_MODULES={"py": "lino.utils.dpy"}
.
- class lino.utils.dpy.Migrator(site, loader)¶
Bases:
object
The SITE’s Migrator class is instantiated by install_migrations.
If
migration_class
is None (the default), then this class will be instantiated. Applications may define their own Migrator class which should be a subclasss of this.- after_load(todo)¶
Declare a function to be called after all data has been loaded.
- before_load(todo)¶
Declare a function to be called before loading dumped data.
- lino.utils.dpy.install_migrations(self, loader)¶
Install “migrators” into the given global namespace.
Python dumps are generated with one line near the end of their
restore.py
file which calls this method, passing it their global namespace:settings.SITE.install_migrations(globals())
A dumped fixture should always call this, even if there is no version change and no data migration, because this also does certain other things:
set
loading_from_dump
to Trueremove any Permission and Site objects that might have been generated by post_syncdb signal if these apps are installed.
- lino.utils.dpy.unused_load_fixture_from_module(m, **options)¶
No longer used in unit tests to manually load a given fixture module.
- lino.utils.dpy.override(globals_dict)¶
A decorator to be applied when redefining, in a
migrate_from_VERSION()
method, one of thecreate_APP_MODEL()
functions defined in therestore.py
file of a dump.