Define application_user and guest_user in nereid_website (previously was part of the application spec)

This commit is contained in:
Sharoon Thomas 2012-03-09 18:12:29 -05:00
parent ca8ae863dd
commit f54ce00108
4 changed files with 92 additions and 2 deletions

51
MIGRATION Normal file
View File

@ -0,0 +1,51 @@
=================
Migration Details
=================
Version 0.3
===========
1. SQL to move party_address to nereid_user
-------------------------------------------
Address which was used for login was migrated to nereid_user. To
retain the existing users and their IDs (used in sessions) the
users data needs to be migrated from party.address to nereid.user
SQL::
INSERT INTO nereid_user
SELECT
"address"."id" AS id,
"address"."create_date" AS create_date,
"address"."write_date" AS write_date,
"address"."create_uid" AS create_uid,
"address"."write_uid" AS write_uid,
"party"."company" AS company,
"address"."party" AS party,
"address"."activation_code" AS activation_code,
"address"."salt" AS salt,
"contact_mechanism"."value" AS email,
"address"."password" AS password
FROM party_address AS address
JOIN party_party AS party ON party.id = address.party
LEFT JOIN party_contact_mechanism AS contact_mechanism ON contact_mechanism.id = address.email
WHERE
"address"."email" IS NOT NULL
AND "address"."password" IS NOT NULL
AND "party"."company" IS NOT NULL;
2. Application Settings
-----------------------
`TRYTON_USER` and `GUEST_USER` which were application config parameters in
previous version are now part of `nereid.website` settings. This avoids
looking up IDs of these records from database to then build the app settings.
This affects two places:
1. Application settings in launchers: `TRYTON_USER` and `GUEST_USER` needs
not be specified anymore.
2. Unit Tests: `application_user` (eqv. of `TRYTON_USER`) and `guest_user`
are not

View File

@ -241,7 +241,7 @@ class Nereid(BackendMixin, RoutingMixin,
self._before_request_lock = Lock()
_PackageBoundObject.__init__(self, __name__)
BackendMixin.__init__(self, **config)
BackendMixin.__init__(self, **config)
RoutingMixin.__init__(self, **config)
CacheMixin.__init__(self, **config)
TemplateMixin.__init__(self, **config)

View File

@ -40,6 +40,13 @@ class BackendMixin(object):
#: Configuration file for Tryton
tryton_configfile = ConfigAttribute('TRYTON_CONFIG')
database_name = ConfigAttribute('DATABASE_NAME')
#: This attribute was previously used to specify ID of the res.user
#: that nereid should be using to connect to Tryton. This attribute
#: is now set during the initialisation of the class. If any attribute
#: is set in the config settings, they are ignored
#:
#: ..versionchanged:0.3
tryton_user = ConfigAttribute('TRYTON_USER')
tryton_context = ConfigAttribute('TRYTON_CONTEXT')
@ -48,6 +55,26 @@ class BackendMixin(object):
from trytond.config import CONFIG
CONFIG.configfile = self.tryton_configfile
CONFIG.load()
with self.root_transaction:
website_obj = self.pool.get('nereid.website')
user_obj = self.pool.get('res.user')
# Find the application_user and guest_user
website_id, = website_obj.search([
('name', '=', self.site)
])
website = website_obj.browse(website_id)
self.tryton_user = website.application_user.id
self.guest_user = website.guest_user.id
# Update the Tryton context
if not self.tryton_context:
self.tryton_context = {}
new_context = user_obj._get_preferences(
website.application_user, context_only=True
)
self.tryton_context.update(new_context)
def load_connection(self):
"Actual loading of connection takes place here"
@ -81,7 +108,7 @@ class BackendMixin(object):
@property
def transaction(self):
"""Allows the use of the transaction as a context manager.
"""Allows the use of the transaction as a context manager.
Example::
@ -93,6 +120,15 @@ class BackendMixin(object):
return TransactionManager(
self.database_name, self.tryton_user, self.tryton_context)
@property
def root_transaction(self):
"""Allows the use of the transaction as a context manager with the
root user.
.. versionadded::0.3
"""
return TransactionManager(self.database_name, 0, self.tryton_context)
def get_method(self, model_method):
"""Get the object from pool and fetch the method from it

View File

@ -285,6 +285,9 @@ def create_site(obj, name, url_map=None, company=None, **options):
options['default_language'], = lang_obj.search(
[('code', '=', 'en_US')])
if 'application_user' not in options:
options['application_user'] = 1
return site_obj.create(options)