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

Reply via email to