docs: add some narrative docs to explain basic concepts
still needs a lot of work i'm sure..gotta start somewhere
This commit is contained in:
parent
ba8f57ddc1
commit
b3e4e91df8
11 changed files with 522 additions and 14 deletions
93
docs/narr/custom/handler.rst
Normal file
93
docs/narr/custom/handler.rst
Normal file
|
@ -0,0 +1,93 @@
|
|||
|
||||
Define Import Handler
|
||||
=====================
|
||||
|
||||
The obvious step here is to define a new :term:`import handler`, which
|
||||
ultimately inherits from
|
||||
:class:`~wuttasync.importing.handlers.ImportHandler`. But the choice
|
||||
of which class(es) *specifically* to inherit from, is a bit more
|
||||
complicated.
|
||||
|
||||
|
||||
Choose the Base Class(es)
|
||||
-------------------------
|
||||
|
||||
If all else fails, or to get started simply, you can always just
|
||||
inherit from :class:`~wuttasync.importing.handlers.ImportHandler`
|
||||
directly as the only base class. You'll have to define any methods
|
||||
needed to implement desired behavior.
|
||||
|
||||
However depending on your particular source and/or target, there may
|
||||
be existing base classes defined somewhere from which you can inherit.
|
||||
This may save you some effort, and/or is just a good idea to share
|
||||
code where possible.
|
||||
|
||||
Keep in mind your import handler can inherit from multiple base
|
||||
classes, and often will - one base for the source side, and another
|
||||
for the target side. For instance::
|
||||
|
||||
from wuttasync.importing import FromFileHandler, ToWuttaHandler
|
||||
|
||||
class FromExcelToPoser(FromFileHandler, ToWuttaHandler):
|
||||
"""
|
||||
Handler for Excel file → Poser app DB
|
||||
"""
|
||||
|
||||
You generally will still need to define/override some methods to
|
||||
customize behavior.
|
||||
|
||||
All built-in base classes live under :mod:`wuttasync.importing`.
|
||||
|
||||
|
||||
.. _register-importer:
|
||||
|
||||
Register Importer(s)
|
||||
--------------------
|
||||
|
||||
If nothing else, most custom handlers must override
|
||||
:meth:`~wuttasync.importing.handlers.ImportHandler.define_importers()`
|
||||
to "register" importer(s) as appropriate. There are two primary goals
|
||||
here:
|
||||
|
||||
* add "new" (totally custom) importers
|
||||
* override "existing" importers (inherited from base class)
|
||||
|
||||
Obviously for this to actually work the importer(s) must exist in
|
||||
code; see :doc:`importer`.
|
||||
|
||||
As an example let's say there's a ``FromFooToWutta`` handler which
|
||||
defines a ``Widget`` importer.
|
||||
|
||||
And let's say you want to customize that, by tweaking slightly the
|
||||
logic for ``WigdetImporter`` and adding a new ``SprocketImporter``::
|
||||
|
||||
from somewhere_else import (FromFooToWutta, ToWutta,
|
||||
WidgetImporter as WidgetImporterBase)
|
||||
|
||||
class FromFooToPoser(FromFooToWutta):
|
||||
"""
|
||||
Handler for Foo -> Poser
|
||||
"""
|
||||
|
||||
def define_importers(self):
|
||||
|
||||
# base class defines the initial set
|
||||
importers = super().define_importers()
|
||||
|
||||
# override widget importer
|
||||
importers['Widget'] = WidgetImporter
|
||||
|
||||
# add sprocket importer
|
||||
importers['Sprocket'] = SprocketImporter
|
||||
|
||||
return importers
|
||||
|
||||
class SprocketImporter(ToWutta):
|
||||
"""
|
||||
Sprocket importer for Foo -> Poser
|
||||
"""
|
||||
|
||||
class WidgetImporter(WidgetImporterBase):
|
||||
"""
|
||||
Widget importer for Foo -> Poser
|
||||
"""
|
Loading…
Add table
Add a link
Reference in a new issue