On Aug 6, 4:09 pm, Sanjiv Singh <singhsanj...@gmail.com> wrote:
> > Also the GeometryDDL and Geometry classes could use some refactoring
> > to support extensibility of adding new dialects. Probably via a
> > registry that maps dialects to their geometry implementations. Also,
> > the GeometryDDL doesn't account for the fact that dialects could be
> > subclassed.
>
> I am not sure I totally understand the solution you are suggesting.
> Could you elaborate a bit more? Is there some code I could look at
> that does something similar?

Regular refactoring of if's to a class hierarchy. Create a base
strategy class that defines the template methods for before-create,
after-create etc. and then put the DB specific implementations into db
specific subclasses that can live in the db specific modules.
(geoalchemy.postgis.PGGeometyDDL etc.) To create the objects use a
dict to map dialects to GeometryDDL implementations:

ddl_registry = {
    ('sqlalchemy.databases.postgres', 'PGDialect'): PGGeometryDDL,
    ...
}

def dialect_to_ddl_impl(dialect):
    for cls in type(dialect).__mro__:
        cls_id = cls.__module__, cls.__name__
        if cls_id in ddl_registry:
            return ddl_registry[cls_id]()
    else:
        raise NotImplementedError

This allows other implementers to add their class to the ddl_registry
and support other databases without changing your code. You could even
use setuptools entry points to handle the registering part. Something
like this is in sqlalchemy.engine.url.URL.get_dialect.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to