Esempio n. 1
0
 def _datasources_db2url(self, dir_version, release):
     """Move data source config from userdb to datasources.cfg."""
     # Upgrade to 0.4.0: Data source are no longer stored in userdb.
     # TODO: Remove this hook in some upcoming major version.
     import cPickle
     from cf.db import Datasource
     from cf.db.url import URL
     from cf.ui import dialogs
     manager = DatasourceManager(self)
     x = self.userdb.get_table_version('datasource')
     if x is None:  # already dropped
         return
     sql = ('select name, description, backend, options, password '
            'from datasource')
     attribs = ['database', 'host', 'port', 'user']
     try:
         self.userdb.cursor.execute(sql)
         attribs.append('password')
     except sqlite3.OperationalError:  # password column is already gone
         sql = ('select name, description, backend, options '
                'from datasource')
         self.userdb.cursor.execute(sql)
     ldap_found = False
     for item in self.userdb.cursor.fetchall():
         old_backend = item[2].split('.')[-1]
         opts = cPickle.loads(str(item[3]))
         if old_backend in ('mssql', 'oracle', 'mysql', 'postgres'):
             url = URL(old_backend)
             for name in attribs:
                 if name in opts:
                     setattr(url, name, opts[name])
             if len(item) == 5:
                 url.password = item[4]
             ds = Datasource(manager)
             ds.url = url
             ds.name = item[0]
             ds.decription = item[1]
             ds.ask_for_password = opts.get('ask_for_password', False)
             manager.save(ds)
         elif old_backend == 'sqlite':
             url = URL(old_backend)
             url.database = opts.get('filename', None)
             ds = Datasource(manager)
             ds.url = url
             ds.name = item[0]
             ds.description = item[1]
             ds.ask_for_password = opts.get('ask_for_password', False)
             manager.save(ds)
         elif old_backend == 'ldap':
             ldap_found = True
     if ldap_found:
         dialogs.warning('Warning',
                         'Sorry, LDAP server are no longer supported.')
     self.userdb.drop_table('datasource')
Esempio n. 2
0
 def test_clean_port(self):
     url = URL('foo', port=None)
     self.assertEqual(url.port, None)
     url = URL('foo', port=123)
     self.assertEqual(url.port, 123)
     url = URL('foo', port='123')
     self.assertEqual(url.port, 123)
     url = URL('foo', port=' 123')
     self.assertEqual(url.port, 123)
     url = URL('foo', port='123 ')
     self.assertEqual(url.port, 123)
     url = URL('foo', port='123a')
     self.assertEqual(url.port, None)
     url = URL('foo', port='abc')
     self.assertEqual(url.port, None)
Esempio n. 3
0
    def create_url(cls, options):
        """Create an URL from options.

        :param options: A dictionary mapping :class:`GUIOption` keys with
            values from UI.

        :returns: An :class:`URL` instance.
        """
        url = URL(cls.drivername)
        attr_names = ('username', 'password', 'host', 'port', 'database')
        backend_keys = [opt.key for opt in cls.get_options()]
        for key in options:
            if key not in backend_keys:
                continue
            elif key in attr_names and options.get(key, None) is not None:
                setattr(url, key, options[key])
            elif options.get(key, None) is not None:
                url.query[key] = options[key]
        return url
Esempio n. 4
0
 def setUp(self):
     super(DbTest, self).setUp()
     self.ds = Datasource(self.app.datasources)
     self.ds.url = URL('sqlite', database=':memory:')