SVN revision 1666

I am looking at "More on Mapper Options" on

 http://sqlalchemy.org/docs/adv_datamapping.myt

I have a generic wsgi middleware that takes a table name and returns data from 
that table.

For one table, I want to hide one field. That is,  for table named 
'coordinator' I  
want to NOT return the c_password field (but only when accessed via wsgi)

So from the above URL it looks like I could do this

from sqlalchemy import *
from sqlalchemy.mods.threadlocal import *
from sqlalchemy.schema import default_metadata

Tcoordinator = Table('coordinator', metadata, 
    Column('region_id',
           Integer,
           primary_key=True,
           nullable=False,
    ),
    Column('id',
           Integer,
           Sequence("coordinator_id", optional=True),
           primary_key=True,
           nullable=False,
    ),
    Column('c_password',
           String(12),
           nullable=False,
    ),
)

class coordinator(object):
    pass

assign_mapper(coordinator, Tcoordinator)


# now, coordinator should be a mapper object itself?)
   
        if request_method == 'GET':
            if table_name == 'coordinator':
               table = coordinator # actually done via a getattr on a module
                # modify the mapper
                table = table.options(noload('c_password'))

                record = table.get(int(id))
                results = {
                    'table_name':table_name,
                    'id':id,
                    'record':record or None,
                }

But this doesn't work, I get:

File 
'E:\\prj\\src\\eclipse\\parent_to_parent\\Web\\p2pserver\\p2pserver\\dbaccess.py',
 line 50 in __call__
  table = table.options(noload('c_password'))
exceptions.AttributeError: type object 'coordinator' has no attribute 'options'


I thought that assign_mapper assigned all the attributes of a mapper to it's 
class 
(get, select, etc)

But maybe options was left out?

So then I tried this:

            if table_name == 'coordinator':
                # modify the mapper
                table = table.mapper.options(noload('c_password'))


But now I get this error:

File 
'E:\\prj\\src\\eclipse\\parent_to_parent\\Web\\p2pserver\\p2pserver\\database.py',
 line 42 in __call__
  ok_callback=manager.finish)
File 'e:\\prj\\src\\paste\\paste\\wsgilib.py', line 114 in catch_errors
  app_iter = application(environ, start_response)
File 'e:\\prj\\src\\paste\\paste\\urlmap.py', line 202 in __call__
  return app(environ, start_response)
File 
'E:\\prj\\src\\eclipse\\parent_to_parent\\Web\\p2pserver\\p2pserver\\dbaccess.py',
 line 51 in __call__
  table = table.mapper.options(noload('c_password'))
File 'e:\\prj\\src\\sqlalchemy\\lib\\sqlalchemy\\orm\\mapper.py', line 717 in 
options
  option.process(mapper)
File 'e:\\prj\\src\\sqlalchemy\\lib\\sqlalchemy\\orm\\properties.py', line 643 
in process
  self.process_by_key(mapper, self.key)
File 'e:\\prj\\src\\sqlalchemy\\lib\\sqlalchemy\\orm\\properties.py', line 652 
in process_by_key
  self.create_prop(mapper, tokens[0])
File 'e:\\prj\\src\\sqlalchemy\\lib\\sqlalchemy\\orm\\properties.py', line 729 
in create_prop
  mapper._compile_property(key, newprop)
File 'e:\\prj\\src\\sqlalchemy\\lib\\sqlalchemy\\orm\\mapper.py', line 602 in 
_compile_property
  prop.init(key, self)
File 'e:\\prj\\src\\sqlalchemy\\lib\\sqlalchemy\\orm\\mapper.py', line 1167 in 
init
  self.do_init(key, parent)
File 'e:\\prj\\src\\sqlalchemy\\lib\\sqlalchemy\\orm\\properties.py', line 198 
in do_init
  if isinstance(self.argument, type):
exceptions.AttributeError: 'PropertyLoader' object has no attribute 'argument'


So then I tried this instead (pretty much copied from the website)

            if table_name == 'coordinator':
                # modify the mapper
                table = class_mapper(table).options(noload('c_password'))

But I get the same exception:
exceptions.AttributeError: 'PropertyLoader' object has no attribute 'argument'

What am I doing wrong?




-- 
Brad Clements,                [EMAIL PROTECTED]    (315)268-1000
http://www.murkworks.com                          
AOL-IM or SKYPE: BKClements



Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users

Reply via email to