Reviewers: ,
Please review this at http://codereview.tryton.org/37004/
Affected files:
M trytond/config.py
M trytond/model/model.py
M trytond/test/model.py
M trytond/tests/test_tools.py
M trytond/tools/misc.py
M trytond/transaction.py
Index: trytond/config.py
===================================================================
--- a/trytond/config.py
+++ b/trytond/config.py
@@ -6,6 +6,7 @@
class ConfigManager(object):
def __init__(self, fname=None):
self.options = {
+ 'hostname': None,
'interface': '',
'netrpc': True,
'netport': 8070,
Index: trytond/model/model.py
===================================================================
--- a/trytond/model/model.py
+++ b/trytond/model/model.py
@@ -597,3 +597,4 @@
if i not in fields_names:
del res[i]
return res
+
Index: trytond/test/model.py
===================================================================
--- a/trytond/test/model.py
+++ b/trytond/test/model.py
@@ -14,3 +14,12 @@
return 'test'
Singleton()
+
+
+class URIObject(ModelSQL):
+ _name = 'test.uriobject'
+
+ name = fields.Char('Name')
+
+
+URIObject()
Index: trytond/tests/test_tools.py
===================================================================
--- a/trytond/tests/test_tools.py
+++ b/trytond/tests/test_tools.py
@@ -5,8 +5,13 @@
import unittest
import datetime
+import socket
+
+from trytond.config import CONFIG
from trytond.tools import reduce_ids, safe_eval, datetime_strftime, \
- reduce_domain
+ reduce_domain, get_uri
+from trytond.tests.test_tryton import (POOL, DB_NAME, USER, CONTEXT,
+ install_module)
class ToolsTestCase(unittest.TestCase):
@@ -123,8 +128,29 @@
self.assertEqual(reduce_domain(i), j,
'%s -> %s != %s' % (i, reduce_domain(i), j))
+
+class UriTestCase(unittest.TestCase):
+
+ def setUp(self):
+ install_module('test')
+ self.uriobj = POOL.get('test.uriobject')
+ self.hostname = socket.getfqdn()
+
+ def testModelURI(self):
+ self.assertEqual(get_uri(self.uriobj),
+ 'tryton://%s:8070/:memory:/model/test.uriobject' %
self.hostname)
+
+ server_name = 'michaelscott.paper.com'
+ CONFIG['hostname'] = server_name
+ self.assertEqual(get_uri(self.uriobj),
+ 'tryton://%s:8070/:memory:/model/test.uriobject' % server_name)
+
+
def suite():
- return unittest.TestLoader().loadTestsFromTestCase(ToolsTestCase)
+ func = unittest.TestLoader().loadTestsFromTestCase
+ suite = func(ToolsTestCase)
+ suite.addTests(func(UriTestCase))
+ return suite
if __name__ == '__main__':
suite = suite()
Index: trytond/tools/misc.py
===================================================================
--- a/trytond/tools/misc.py
+++ b/trytond/tools/misc.py
@@ -5,6 +5,7 @@
Miscelleanous tools used by tryton
"""
import os, sys
+import socket
import subprocess
import zipfile
from threading import local
@@ -15,6 +16,7 @@
import StringIO
import dis
from decimal import Decimal
+
from trytond.config import CONFIG
from trytond.const import OPERATORS
@@ -468,3 +470,40 @@
else:
result.append(sub_domain)
return result
+
+def get_uri(tryton_obj):
+ from trytond.model import Model
+ from trytond.wizard import Wizard
+ from trytond.report import Report
+ from trytond.transaction import Transaction
+
+ url_part = {}
+
+ url_part['hostname'] = CONFIG['hostname']
+ if not url_part['hostname']:
+ url_part['hostname'] = socket.getfqdn()
+
+ if CONFIG['netrpc']:
+ url_part['port'] = CONFIG['netport']
+ elif CONFIG['xmlrpc']:
+ url_part['port'] = CONFIG['xmlrpcport']
+ elif CONFIG['jsonrpc']:
+ url_part['port'] = CONFIG['jsonport']
+ else:
+ raise NotImplementedError
+
+ if isinstance(tryton_obj, Model):
+ url_part['type'] = 'model'
+ elif isinstance(tryton_obj, Wizard):
+ url_part['type'] = 'wizard'
+ elif isinstance(tryton_obj, Report):
+ url_part['type'] = 'report'
+ else:
+ raise NotImplementedError
+
+ url_part['name'] = tryton_obj._name
+ url_part['database'] = Transaction().database_name
+
+ schema
= 'tryton://%(hostname)s:%(port)s/%(database)s/%(type)s/%(name)s'
+ return schema % url_part
+
Index: trytond/transaction.py
===================================================================
--- a/trytond/transaction.py
+++ b/trytond/transaction.py
@@ -71,6 +71,8 @@
assert self.cursor is None
assert self.context is None
self.user = user
+ #XXX Is this the good place to set that ?
+ self.database_name = database_name
database = Database(database_name).connect()
self.cursor = database.cursor()
self.context = context or {}
--
[email protected] mailing list