コード例 #1
0
ファイル: app.py プロジェクト: kleopatra999/crunchyfrog
    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")
コード例 #2
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
コード例 #3
0
ファイル: app.py プロジェクト: kleopatra999/crunchyfrog
 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')
コード例 #4
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)
コード例 #5
0
 def setUp(self):
     super(DbTest, self).setUp()
     self.ds = Datasource(self.app.datasources)
     self.ds.url = URL('sqlite', database=':memory:')