Earlier in this mailing list the suggestion was made that one can use the 
sql search path to include/exclude schemas from web2py.


In a setup like this it becomes tricky:

Schema: Public
              Table(s): auth-related tables
              
Schema: wbank:   
              Tables related to wbank

Schema: doccenter:
              Tables related to doccenter (which refer to auth_user)

and other to follow.

As long as the table definitions do not refer to auth_user I could do the 
following in the module (I have tried different sorts of solutions.  This 
is my last one):
class Wbank(object):
    
    def __init__(self, db):
        self.db = db
        self.db.executesql("set search_path to wbank;")
        self.T = current.T
        self.auth = current.session.auth
        self.request = current.request
        self.tabelle = ['wbdocuments','wbmaster']
        self.define_tables()
        current.db = self.db
        self.db.executesql("set search_path to wbank, public;")


In this case the tables are created in the schema 'wbank' and everthing 
works OK.  

But when he table definition contains references to db.auth_user  I get 
problems.  For example:
def signature(db):

    #db = current.db

    db.executesql("set search_path to doccenter, public;")

    request = current.request

    akb_signature_uuid = db.Table(db, 'akb_signature_uuid',

                     Field('uuid', length = 64, default = lambda:str(uuid.
uuid4()),

                           notnull = True, writable = False, readable = 
False,

                           unique = True, ondelete = 'CASCADE'),

                     Field('created_on', 'datetime', default = request.now,

                           readable = False, writable = False),

                     Field('created_by', db.auth_user, default = current.
auth_user,

                           readable = False, writable = False),

                     Field('updated_on', 'datetime', default = request.now,

                           readable = False, writable = False),

                     Field('updated_by', db.auth_user, update = current.
auth_user,

                           readable = False, writable = False)

                     )

    db.executesql("set search_path to doccenter;")

    

    return akb_signature_uuid



class Docs(object):

    

    def __init__(self, db):

        self.db = db

        self.T = current.T

        self.auth = current.session.auth

        print self.auth

        if self.auth:

            current.auth_user = self.auth.user.id

        else:

            current.auth_user = None

        self.request = current.request

        self.akb_signature_uuid = signature(self.db)

        self.db.executesql("set search_path to doccenter;")

        self.request = current.request

        self.tabelle = ['dc_location', 'dc_category',

                        'doccenter']

        self.define_tables()

        current.db = self.db

        self.db.executesql("set search_path to doccenter, public;")



    def dc_location(self):

        table = self.db.define_table('dc_location',

                                     Field('location'),

                                     self.akb_signature_uuid)

In this case I get the following ticket:

  File "/home/js/web2py/gluon/dal.py", line 1469, in execute
    return self.log_execute(*a, **b)
  File "/home/js/web2py/gluon/dal.py", line 1463, in log_execute
    ret = self.cursor.execute(*a, **b)
ProgrammingError: relation "auth_user" does not exist


How do I get DAL to create the tables in schema doccenter and at the same 
time have access to auth_user?

Regards
Johann


Reply via email to