On Nov 17, 2010, at 4:05 PM, J wrote:

> hmm... but i was thinking of having specialized methods for every
> table/object.  am i missing something from your suggestion?  

No, SqlSoup only offers the base class for all objects as an option.  Here's a 
patch you can try:

diff -r 67d8f4e2fcb9 lib/sqlalchemy/ext/sqlsoup.py
--- a/lib/sqlalchemy/ext/sqlsoup.py     Wed Nov 17 10:55:10 2010 -0500
+++ b/lib/sqlalchemy/ext/sqlsoup.py     Wed Nov 17 16:17:23 2010 -0500
@@ -540,7 +540,7 @@
         j = join(*args, **kwargs)
         return self.map(j)
 
-    def entity(self, attr, schema=None):
+    def entity(self, attr, schema=None, base=None):
         try:
             t = self._cache[attr]
         except KeyError, ke:
@@ -548,7 +548,7 @@
             if not table.primary_key.columns:
                 raise PKNotFoundError('table %r does not have a primary key 
defined [columns: %s]' % (attr, ','.join(table.c.keys())))
             if table.columns:
-                t = _class_for_table(self.session, self.engine, table, 
self.base)
+                t = _class_for_table(self.session, self.engine, table, base or 
self.base)
             else:
                 t = None
             self._cache[attr] = t


mysoup.entity('mytable', base=MyBaseClass)



> how would
> you have a base class that would somehow specialize depending on the
> child object?
> 
> i went ahead and executed my mixin idea by attacking the db._cache
> dict with the mixins:
> 
> def __bind_mixins(db):
>   for table_name,v in db._cache.items():
>      # this is pretty retarded, just truncates last letter assuming
> 's' plural
>      mixin_name = table_name[:-1]
>      try:
>         # this is also pretty retarded.  __import__() didn't quite
> work.
>         # i'm thinking it was a circular import/runtime execution
> order issue
>         exec 'from mixins.%s import %s' % (mixin_name, mixin_name)
>         mixin_cls = locals()[mixin_name]
> db._cache[table_name].__bases__ += (mixin_cls,)
>      except ImportError: pass
> 
> 
> On Nov 17, 8:02 am, Michael Bayer <mike...@zzzcomputing.com> wrote:
>> On Nov 17, 2010, at 4:23 AM, J wrote:
>> 
>> 
>> 
>>> so i'm using sqlsoup to support a legacy db, and am thoroughly
>>> enjoying it.  it was awesome setting up relationships and all that
>>> even though the underlying db schema didn't have any foreign key
>>> defines!
>> 
>>> however, i'm at a point where i'd like to add some helper funcitons/
>>> methods to some MappedFoo objects that sqlsoup likes to return.
>> 
>>> i was thinking of using a mixin to add the extra functionality.  for
>>> example:
>> 
>>> # assume foo is a MappedFoo instance returned from sqlsoup already
>>> class x:
>>>   def bar(): print 'bar'
>>> foo.__bases__ += (x,)
>>> foo.bar() # prints 'bar' as expected
>> 
>>> however, it would be super if there was some way to have the sqlsoup
>>> getters already have this mixin or some overriding baseclass
>>> configured... or some automated way of applying a mixin behind the
>>> scenes.
>> 
>> SqlSoup allows a "base" argument which will serve as the base class for all 
>> generated classes:
>> 
>>         SqlSoup(engine, base=MyClass)
>> 
>> we should probably add the constructor and stuff to the docstrings.
>> 
>> 
>> 
>>> thoughs?  thanks.
>> 
>>> --
>>> You received this message because you are subscribed to the Google Groups 
>>> "sqlalchemy" group.
>>> To post to this group, send email to sqlalch...@googlegroups.com.
>>> To unsubscribe from this group, send email to 
>>> sqlalchemy+unsubscr...@googlegroups.com.
>>> For more options, visit this group 
>>> athttp://groups.google.com/group/sqlalchemy?hl=en.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to sqlalch...@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.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@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