Esempio n. 1
0
 def testMakeChannelFilename(self):
     self.assertEqual(plugins.makeChannelFilename('dir', '#foo'),
                      conf.supybot.directories.data() + '/#foo/dir')
     self.assertEqual(plugins.makeChannelFilename('dir', '#f/../oo'),
                      conf.supybot.directories.data() + '/#f..oo/dir')
     self.assertEqual(plugins.makeChannelFilename('dir', '/./'),
                      conf.supybot.directories.data() + '/_/dir')
     self.assertEqual(plugins.makeChannelFilename('dir', '/../'),
                      conf.supybot.directories.data() + '/__/dir')
Esempio n. 2
0
    def _getDb(self, channel):
        #sqlite = plugins.importSqlite()
        filename = plugins.makeChannelFilename(self.filename, channel)

        def p(s1, s2):
            return int(
                ircutils.nickEqual(s1.encode('iso8859-1'),
                                   s2.encode('iso8859-1')))

        # norf 4-1-2010
        #ALTER TABLE quotegrabs ADD votes INTEGER DEFAULT 0;

        if filename in self.dbs:
            self.dbs[filename].create_function('nickeq', 2, p)
            return self.dbs[filename]
        if os.path.exists(filename):
            self.dbs[filename] = sqlite.connect(filename)
            self.dbs[filename].create_function('nickeq', 2, p)
            return self.dbs[filename]
        db = sqlite.connect(filename)
        self.dbs[filename] = db
        self.dbs[filename].create_function('nickeq', 2, p)
        cursor = db.cursor()
        cursor.execute("""CREATE TABLE quotegrabs (
                          id INTEGER PRIMARY KEY,
                          nick TEXT,
                          hostmask TEXT,
                          added_by TEXT,
                          added_at TIMESTAMP,
                          quote TEXT, 
                          vote INTEGER DEFAULT 0
                          );""")
        db.commit()
        return db
Esempio n. 3
0
    def _getDb(self, channel, debug=False):
        if channel in self.dbs:
            return self.dbs[channel]

        try:
            import sqlalchemy as sql
            self.sql = sql
        except ImportError:
            raise callbacks.Error('You need to have SQLAlchemy installed to use this ' \
                    'plugin.  Download it at <http://www.sqlalchemy.org/>')

        filename = plugins.makeChannelFilename(self.filename, channel)
        engine = sql.create_engine(self.engine + filename, echo=debug)
        metadata = sql.MetaData()
        firsts = sql.Table('firsts', metadata,
                           sql.Column('id', sql.Integer, primary_key=True),
                           sql.Column('first', sql.Text, unique=True),
                           sql.Column('count', sql.Integer, default=1),
                          )
        lasts = sql.Table('lasts', metadata,
                          sql.Column('id', sql.Integer, primary_key=True),
                          sql.Column('last', sql.Text, unique=True),
                          sql.Column('count', sql.Integer, default=1),
                         )
        pairs = sql.Table('pairs', metadata,
                          sql.Column('id', sql.Integer, primary_key=True),
                          sql.Column('first', sql.Text, default=sql.null),
                          sql.Column('second', sql.Text, default=sql.null),
                          sql.Column('follow', sql.Text, default=sql.null),
                          sql.Column('count', sql.Integer, default=1),
                          sql.UniqueConstraint('first', 'second', 'follow'),
                         )
        metadata.create_all(engine)
        self.dbs[channel] = (engine, firsts, lasts, pairs)
        return self.dbs[channel]
Esempio n. 4
0
    def _handleUrl(self,irc,channel,nick,url):
        # 1 lookup from the db
        scname='%s_%s'%(irc.network,channel)

        if not UrlReader.databases.has_key(scname):
            # new db
            dbpath=plugins.makeChannelFilename('%s.db'%scname ,'urldata')
            UrlReader.databases[scname]=bsddb.btopen(dbpath,'c')

        urldb = UrlReader.databases[scname]

        if urldb.has_key(url):
            poster,title=pickle.loads(urldb[url])
            msg='%s has already posted it: %s'%(poster,title)
            irc.reply(msg.encode('utf-8'))
        else:

            try:
                title=self._getTitle(url)
                if title != None:
                    urldb[url]=pickle.dumps([nick.decode('utf-8'),title])
                    urldb.sync()
                    irc.reply(title.encode('utf-8'))
            except:
                traceback.print_exc()
                irc.reply('No Title')
Esempio n. 5
0
 def _getDb(self, channel):
     filename = plugins.makeChannelFilename(self.filename, channel)
     if filename in self.dbs:
         return self.dbs[filename]
     if os.path.exists(filename):
         db = sqlite3.connect(filename)
         db.text_factory = str
         self.dbs[filename] = db
         return db
     db = sqlite3.connect(filename)
     db.text_factory = str
     self.dbs[filename] = db
     cursor = db.cursor()
     cursor.execute("""CREATE TABLE karma (
                       id INTEGER PRIMARY KEY,
                       name TEXT,
                       normalized TEXT UNIQUE ON CONFLICT IGNORE,
                       added INTEGER,
                       subtracted INTEGER
                       )""")
     db.commit()
     def p(s1, s2):
         return int(ircutils.nickEqual(s1, s2))
     db.create_function('nickeq', 2, p)
     return db
Esempio n. 6
0
    def _getDb(self, channel):
        try:
            import sqlite3
        except ImportError:
            from pysqlite2 import dbapi2 as sqlite3 # for python2.4

        if channel in self.dbs:
            return self.dbs[channel]
        filename = plugins.makeChannelFilename(self.filename, channel)
        
        if os.path.exists(filename):
            db = sqlite3.connect(filename, check_same_thread=False)
            db.text_factory = str
            self.dbs[channel] = db
            return db
        db = sqlite3.connect(filename, check_same_thread=False)
        db.text_factory = str
        self.dbs[channel] = db
        cursor = db.cursor()
        cursor.execute("""CREATE TABLE factoids (
                          key TEXT PRIMARY KEY,
                          created_by INTEGER,
                          created_at TIMESTAMP,
                          modified_by INTEGER,
                          modified_at TIMESTAMP,
                          locked_at TIMESTAMP,
                          locked_by INTEGER,
                          last_requested_by TEXT,
                          last_requested_at TIMESTAMP,
                          fact TEXT,
                          requested_count INTEGER
                          )""")
        db.commit()
        return db
Esempio n. 7
0
 def _getDb(self, channel):
     try:
         import sqlite
     except ImportError:
         raise callbacks.Error, 'You need to have PySQLite installed to ' \
                                'use Poll.  Download it at ' \
                                '<http://pysqlite.org/>'
     filename = plugins.makeChannelFilename(self.filename, channel)
     if filename in self.dbs:
         return self.dbs[filename]
     if os.path.exists(filename):
         self.dbs[filename] = sqlite.connect(filename)
         return self.dbs[filename]
     db = sqlite.connect(filename)
     self.dbs[filename] = db
     cursor = db.cursor()
     cursor.execute("""CREATE TABLE polls (
                       id INTEGER PRIMARY KEY,
                       question TEXT UNIQUE ON CONFLICT IGNORE,
                       started_by INTEGER,
                       open INTEGER)""")
     cursor.execute("""CREATE TABLE options (
                       id INTEGER,
                       poll_id INTEGER,
                       option TEXT,
                       UNIQUE (poll_id, id) ON CONFLICT IGNORE)""")
     cursor.execute("""CREATE TABLE votes (
                       user_id INTEGER,
                       poll_id INTEGER,
                       option_id INTEGER,
                       UNIQUE (user_id, poll_id)
                       ON CONFLICT IGNORE)""")
     db.commit()
     return db
Esempio n. 8
0
 def _getDb(self, channel):
     try:
         import sqlite
     except ImportError:
         raise callbacks.Error, 'You need to have PySQLite installed to ' \
                                'use Poll.  Download it at ' \
                                '<http://pysqlite.org/>'
     filename = plugins.makeChannelFilename(self.filename, channel)
     if filename in self.dbs:
         return self.dbs[filename]
     if os.path.exists(filename):
         self.dbs[filename] = sqlite.connect(filename)
         return self.dbs[filename]
     db = sqlite.connect(filename)
     self.dbs[filename] = db
     cursor = db.cursor()
     cursor.execute("""CREATE TABLE polls (
                       id INTEGER PRIMARY KEY,
                       question TEXT UNIQUE ON CONFLICT IGNORE,
                       started_by INTEGER,
                       open INTEGER)""")
     cursor.execute("""CREATE TABLE options (
                       id INTEGER,
                       poll_id INTEGER,
                       option TEXT,
                       UNIQUE (poll_id, id) ON CONFLICT IGNORE)""")
     cursor.execute("""CREATE TABLE votes (
                       user_id INTEGER,
                       poll_id INTEGER,
                       option_id INTEGER,
                       UNIQUE (user_id, poll_id)
                       ON CONFLICT IGNORE)""")
     db.commit()
     return db
Esempio n. 9
0
    def _getDb(self, channel):
        import sqlite3

        if channel in self.dbs:
            return self.dbs[channel]
        filename = plugins.makeChannelFilename(self.filename, channel)

        if os.path.exists(filename):
            db = sqlite3.connect(filename, check_same_thread=False)
            if minisix.PY2:
                db.text_factory = str
            self.dbs[channel] = db
            return db
        db = sqlite3.connect(filename, check_same_thread=False)
        if minisix.PY2:
            db.text_factory = str
        self.dbs[channel] = db
        cursor = db.cursor()
        cursor.execute("""CREATE TABLE factoids (
                          key TEXT PRIMARY KEY,
                          created_by INTEGER,
                          created_at TIMESTAMP,
                          modified_by INTEGER,
                          modified_at TIMESTAMP,
                          locked_at TIMESTAMP,
                          locked_by INTEGER,
                          last_requested_by TEXT,
                          last_requested_at TIMESTAMP,
                          fact TEXT,
                          requested_count INTEGER
                          )""")
        db.commit()
        return db
Esempio n. 10
0
 def _getDb(self, channel):
     try:
         import sqlite3
     except ImportError:
         raise callbacks.Error, \
               'You need to have PySQLite installed to use this ' \
               'plugin.  Download it at ' \
               '<http://code.google.com/p/pysqlite/>'
     if channel in self.dbs:
         return self.dbs[channel]
     filename = plugins.makeChannelFilename(self.filename, channel)
     if os.path.exists(filename):
         self.dbs[channel] = sqlite3.connect(filename)
         return self.dbs[channel]
     db = sqlite3.connect(filename)
     self.dbs[channel] = db
     cursor = db.cursor()
     cursor.execute("""CREATE TABLE factoids (
                       key TEXT PRIMARY KEY,
                       created_by INTEGER,
                       created_at TIMESTAMP,
                       modified_by INTEGER,
                       modified_at TIMESTAMP,
                       locked_at TIMESTAMP,
                       locked_by INTEGER,
                       last_requested_by TEXT,
                       last_requested_at TIMESTAMP,
                       fact TEXT,
                       requested_count INTEGER
                       )""")
     db.commit()
     return db
Esempio n. 11
0
    def _getDb(self, channel):
        filename = plugins.makeChannelFilename(self.filename, channel)

        if filename in self.dbs:
            return self.dbs[filename]

        if os.path.exists(filename):
            db = sqlite3.connect(filename, check_same_thread=False)
            db.text_factory = str
            self.dbs[filename] = db
            return db

        db = sqlite3.connect(filename, check_same_thread=False)
        db.text_factory = str
        self.dbs[filename] = db

        cur = db.cursor()
        cur.execute("""CREATE VIRTUAL TABLE quotes USING fts4(
        text TEXT,
        nick TEXT,
        ts INTEGER
        )""")
        db.commit()

        return db
Esempio n. 12
0
 def _getDb(self, channel):
     sqlite = plugins.importSqlite()
     filename = plugins.makeChannelFilename(self.filename, channel)
     def p(s1, s2):
         return int(ircutils.nickEqual(s1.encode('iso8859-1'),
                                       s2.encode('iso8859-1')))
     if filename in self.dbs:
         self.dbs[filename].create_function('nickeq', 2, p)
         return self.dbs[filename]
     if os.path.exists(filename):
         self.dbs[filename] = sqlite.connect(filename)
         self.dbs[filename].create_function('nickeq', 2, p)
         return self.dbs[filename]
     db = sqlite.connect(filename)
     self.dbs[filename] = db
     self.dbs[filename].create_function('nickeq', 2, p)
     cursor = db.cursor()
     cursor.execute("""CREATE TABLE quotegrabs (
                       id INTEGER PRIMARY KEY,
                       nick TEXT,
                       hostmask TEXT,
                       added_by TEXT,
                       added_at TIMESTAMP,
                       quote TEXT
                       );""")
     db.commit()
     return db
Esempio n. 13
0
    def _getDb(self, channel):
        filename = plugins.makeChannelFilename(self.filename, channel)
        if filename in self.dbs:
            return self.dbs[filename]
        if os.path.exists(filename):
            db = sqlite3.connect(filename)
            db.text_factory = str
            self.dbs[filename] = db
            return db
        db = sqlite3.connect(filename)
        db.text_factory = str
        self.dbs[filename] = db
        cursor = db.cursor()
        cursor.execute(
            """CREATE TABLE alias (
                          id INTEGER PRIMARY KEY,
                          name TEXT,
                          normalized TEXT,
                          aliases TEXT
                          )"""
        )
        db.commit()

        def p(s1, s2):
            return int(ircutils.nickEqual(s1, s2))

        db.create_function("nickeq", 2, p)
        return db
Esempio n. 14
0
 def _getDb(self, channel):
     try:
         import sqlite
     except ImportError:
         raise callbacks.Error, \
               'You need to have PySQLite installed to use this ' \
               'plugin.  Download it at <http://pysqlite.org/>'
     if channel in self.dbs:
         return self.dbs[channel]
     filename = plugins.makeChannelFilename(self.filename, channel)
     if os.path.exists(filename):
         self.dbs[channel] = sqlite.connect(filename)
         return self.dbs[channel]
     db = sqlite.connect(filename)
     self.dbs[channel] = db
     cursor = db.cursor()
     cursor.execute("""CREATE TABLE factoids (
                       key TEXT PRIMARY KEY,
                       created_by INTEGER,
                       created_at TIMESTAMP,
                       modified_by INTEGER,
                       modified_at TIMESTAMP,
                       locked_at TIMESTAMP,
                       locked_by INTEGER,
                       last_requested_by TEXT,
                       last_requested_at TIMESTAMP,
                       fact TEXT,
                       requested_count INTEGER
                       )""")
     db.commit()
     return db
Esempio n. 15
0
 def _getDb(self, channel):
     filename = plugins.makeChannelFilename(self.filename, channel)
     def p(s1, s2):
         # text_factory seems to only apply as an output adapter,
         # so doesn't apply to created functions; so we use str()
         return ircutils.nickEqual(str(s1), str(s2))
     if filename in self.dbs:
         return self.dbs[filename]
     if os.path.exists(filename):
         db = sqlite3.connect(filename)
         db.text_factory = str
         db.create_function('nickeq', 2, p)
         self.dbs[filename] = db
         return db
     db = sqlite3.connect(filename)
     db.text_factory = str
     db.create_function('nickeq', 2, p)
     self.dbs[filename] = db
     cursor = db.cursor()
     cursor.execute("""CREATE TABLE quotegrabs (
                       id INTEGER PRIMARY KEY,
                       nick BLOB,
                       hostmask TEXT,
                       added_by TEXT,
                       added_at TIMESTAMP,
                       quote TEXT
                       );""")
     db.commit()
     return db
Esempio n. 16
0
 def _getLastEntry(self, channel):
     """fetche the json data from either a file stored from the
     last request (only 1 request per 15 minutes allowed) or
     makes a new request and stores the result in a file as well
     """
     filename = plugins.makeChannelFilename('bitcoin', channel)
     # if file older than 15 minutes -> new query
     if os.path.exists(filename) == True:
         delta = datetime.timedelta(minutes=15)
         statbuf = os.stat(filename)
         now = datetime.datetime.now()
         modtime = datetime.datetime.fromtimestamp(statbuf.st_mtime) 
         if (now - delta) > modtime:
             data = self._fetchJsonData()
             self._writeToFile(simplejson.dumps(data), filename)
             log.info('new data')
             return simplejson.dumps(data)
         else:
             data = self._readFromFile(filename)
             log.info('old data')
             return  simplejson.dumps(data)
     else:
         data = self._fetchJsonData()
         self._writeToFile(simplejson.dumps(data), filename)     
         log.info('create new file and new data')
         return data
Esempio n. 17
0
 def _getDb(self, channel):
     filename = plugins.makeChannelFilename(self.filename, channel)
     def p(s1, s2):
         # text_factory seems to only apply as an output adapter,
         # so doesn't apply to created functions; so we use str()
         return ircutils.nickEqual(str(s1), str(s2))
     if filename in self.dbs:
         return self.dbs[filename]
     if os.path.exists(filename):
         db = sqlite3.connect(filename)
         if minisix.PY2:
             db.text_factory = str
         db.create_function('nickeq', 2, p)
         self.dbs[filename] = db
         return db
     db = sqlite3.connect(filename)
     if minisix.PY2:
         db.text_factory = str
     db.create_function('nickeq', 2, p)
     self.dbs[filename] = db
     cursor = db.cursor()
     cursor.execute("""CREATE TABLE quotegrabs (
                       id INTEGER PRIMARY KEY,
                       nick BLOB,
                       hostmask TEXT,
                       added_by TEXT,
                       added_at TIMESTAMP,
                       quote TEXT
                       );""")
     db.commit()
     return db
Esempio n. 18
0
    def _handleUrl(self, irc, channel, nick, url):
        # 1 lookup from the db
        scname = '%s_%s' % (irc.network, channel)

        if not UrlReader.databases.has_key(scname):
            # new db
            dbpath = plugins.makeChannelFilename('%s.db' % scname, 'urldata')
            UrlReader.databases[scname] = bsddb.btopen(dbpath, 'c')

        urldb = UrlReader.databases[scname]

        if urldb.has_key(url):
            poster, title = pickle.loads(urldb[url])
            msg = '%s has already posted it: %s' % (poster, title)
            irc.reply(msg.encode('utf-8'))
        else:

            try:
                title = self._getTitle(url)
                if title != None:
                    urldb[url] = pickle.dumps([nick.decode('utf-8'), title])
                    urldb.sync()
                    irc.reply(title.encode('utf-8'))
            except:
                traceback.print_exc()
                irc.reply('No Title')
Esempio n. 19
0
    def _getDb(self, channel):
        import sqlite3

        if channel in self.dbs:
            return self.dbs[channel]
        filename = plugins.makeChannelFilename(self.filename, channel)
        
        if os.path.exists(filename):
            db = sqlite3.connect(filename, check_same_thread=False)
            if sys.version_info[0] < 3:
                db.text_factory = str
            self.dbs[channel] = db
            return db
        db = sqlite3.connect(filename, check_same_thread=False)
        if sys.version_info[0] < 3:
            db.text_factory = str
        self.dbs[channel] = db
        cursor = db.cursor()
        cursor.execute("""CREATE TABLE factoids (
                          key TEXT PRIMARY KEY,
                          created_by INTEGER,
                          created_at TIMESTAMP,
                          modified_by INTEGER,
                          modified_at TIMESTAMP,
                          locked_at TIMESTAMP,
                          locked_by INTEGER,
                          last_requested_by TEXT,
                          last_requested_at TIMESTAMP,
                          fact TEXT,
                          requested_count INTEGER
                          )""")
        db.commit()
        return db
Esempio n. 20
0
    def _getDb(self, channel):
        filename = plugins.makeChannelFilename(self.filename, channel)

        if filename in self.dbs:
            return self.dbs[filename]

        if os.path.exists(filename):
            db = sqlite3.connect(filename, check_same_thread=False)
            db.text_factory = str
            self.dbs[filename] = db
            return db

        db = sqlite3.connect(filename, check_same_thread=False)
        db.text_factory = str
        self.dbs[filename] = db

        cur = db.cursor()
        cur.execute("""CREATE VIRTUAL TABLE quotes USING fts4(
        text TEXT,
        nick TEXT,
        ts INTEGER
        )""")
        db.commit()

        return db
Esempio n. 21
0
    def _getDb(self, channel):
        try:
            import sqlite
        except ImportError:
            raise callbacks.Error, 'You need to have PySQLite installed to ' \
                                   'use Karma.  Download it at ' \
                                   '<http://code.google.com/p/pysqlite/>'
        filename = plugins.makeChannelFilename(self.filename, channel)
        if filename in self.dbs:
            return self.dbs[filename]
        if os.path.exists(filename):
            self.dbs[filename] = sqlite.connect(filename)
            return self.dbs[filename]
        db = sqlite.connect(filename)
        self.dbs[filename] = db
        cursor = db.cursor()
        cursor.execute("""CREATE TABLE karma (
                          id INTEGER PRIMARY KEY,
                          name TEXT,
                          normalized TEXT UNIQUE ON CONFLICT IGNORE,
                          added INTEGER,
                          subtracted INTEGER
                          )""")
        db.commit()

        def p(s1, s2):
            return int(ircutils.nickEqual(s1, s2))

        db.create_function('nickeq', 2, p)
        return db
Esempio n. 22
0
    def _getDb(self, channel):
        try:
            import sqlite
        except ImportError:
            raise callbacks.Error, 'You need to have PySQLite installed to ' \
                                   'use QuoteGrabs.  Download it at ' \
                                   '<http://code.google.com/p/pysqlite/>'
        filename = plugins.makeChannelFilename(self.filename, channel)

        def p(s1, s2):
            return int(ircutils.nickEqual(s1, s2))

        if filename in self.dbs:
            return self.dbs[filename]
        if os.path.exists(filename):
            self.dbs[filename] = sqlite.connect(filename,
                                                converters={'bool': bool})
            self.dbs[filename].create_function('nickeq', 2, p)
            return self.dbs[filename]
        db = sqlite.connect(filename, converters={'bool': bool})
        self.dbs[filename] = db
        self.dbs[filename].create_function('nickeq', 2, p)
        cursor = db.cursor()
        cursor.execute("""CREATE TABLE quotegrabs (
                          id INTEGER PRIMARY KEY,
                          nick TEXT,
                          hostmask TEXT,
                          added_by TEXT,
                          added_at TIMESTAMP,
                          quote TEXT
                          );""")
        db.commit()
        return db
Esempio n. 23
0
    def _getDb(self, channel, debug=False):
        if channel in self.dbs:
            return self.dbs[channel]

        try:
            import sqlalchemy as sql
            self.sql = sql
        except ImportError:
            raise callbacks.Error('You need to have SQLAlchemy installed to use this ' \
                    'plugin.  Download it at <http://www.sqlalchemy.org/>')

        filename = plugins.makeChannelFilename(self.filename, channel)
        engine = sql.create_engine(self.engine + filename, echo=debug)
        metadata = sql.MetaData()
        firsts = sql.Table('firsts', metadata,
                           sql.Column('id', sql.Integer, primary_key=True),
                           sql.Column('first', sql.Text, unique=True),
                           sql.Column('count', sql.Integer, default=1),
                          )
        lasts = sql.Table('lasts', metadata,
                          sql.Column('id', sql.Integer, primary_key=True),
                          sql.Column('last', sql.Text, unique=True),
                          sql.Column('count', sql.Integer, default=1),
                         )
        pairs = sql.Table('pairs', metadata,
                          sql.Column('id', sql.Integer, primary_key=True),
                          sql.Column('first', sql.Text, default=sql.null),
                          sql.Column('second', sql.Text, default=sql.null),
                          sql.Column('follow', sql.Text, default=sql.null),
                          sql.Column('count', sql.Integer, default=1),
                          sql.UniqueConstraint('first', 'second', 'follow'),
                         )
        metadata.create_all(engine)
        self.dbs[channel] = (engine, firsts, lasts, pairs)
        return self.dbs[channel]
Esempio n. 24
0
 def _getDb(self, channel):
     try:
         import sqlite
     except ImportError:
         raise callbacks.Error, 'You need to have PySQLite installed to ' \
                                'use QuoteGrabs.  Download it at ' \
                                '<http://pysqlite.org/>'
     filename = plugins.makeChannelFilename(self.filename, channel)
     def p(s1, s2):
         return int(ircutils.nickEqual(s1, s2))
     if filename in self.dbs:
         return self.dbs[filename]
     if os.path.exists(filename):
         self.dbs[filename] = sqlite.connect(filename,
                                             converters={'bool': bool})
         self.dbs[filename].create_function('nickeq', 2, p)
         return self.dbs[filename]
     db = sqlite.connect(filename, converters={'bool': bool})
     self.dbs[filename] = db
     self.dbs[filename].create_function('nickeq', 2, p)
     cursor = db.cursor()
     cursor.execute("""CREATE TABLE quotegrabs (
                       id INTEGER PRIMARY KEY,
                       nick TEXT,
                       hostmask TEXT,
                       added_by TEXT,
                       added_at TIMESTAMP,
                       quote TEXT
                       );""")
     db.commit()
     return db
Esempio n. 25
0
    def _getDb(self, channel):
        filename = plugins.makeChannelFilename(self.filename, channel)
        if filename in self.dbs:
            return self.dbs[filename]
        if os.path.exists(filename):
            db = sqlite3.connect(filename, check_same_thread=False)
            db.text_factory = str
            self.dbs[filename] = db
            return db
        db = sqlite3.connect(filename, check_same_thread=False)
        db.text_factory = str
        self.dbs[filename] = db
        cursor = db.cursor()
        cursor.execute("""CREATE TABLE karma (
                          id INTEGER PRIMARY KEY,
                          name TEXT,
                          normalized TEXT UNIQUE ON CONFLICT IGNORE,
                          added INTEGER,
                          subtracted INTEGER
                          )""")
        db.commit()

        def p(s1, s2):
            return int(ircutils.nickEqual(s1, s2))

        db.create_function('nickeq', 2, p)
        return db
Esempio n. 26
0
 def _getDb(self, channel):
     try:
         import sqlite
     except ImportError:
         raise callbacks.Error, 'You need to have PySQLite installed to ' \
                                'use Karma.  Download it at ' \
                                '<http://pysqlite.org/>'
     filename = plugins.makeChannelFilename(self.filename, channel)
     if filename in self.dbs:
         return self.dbs[filename]
     if os.path.exists(filename):
         self.dbs[filename] = sqlite.connect(filename)
         return self.dbs[filename]
     db = sqlite.connect(filename)
     self.dbs[filename] = db
     cursor = db.cursor()
     cursor.execute("""CREATE TABLE karma (
                       id INTEGER PRIMARY KEY,
                       name TEXT,
                       normalized TEXT UNIQUE ON CONFLICT IGNORE,
                       added INTEGER,
                       subtracted INTEGER
                       )""")
     db.commit()
     def p(s1, s2):
         return int(ircutils.nickEqual(s1, s2))
     db.create_function('nickeq', 2, p)
     return db
 def _getDb(self, channel):
     if channel not in self.dbs:
         filename = plugins.makeChannelFilename(self.filename, channel)
         self.dbs[channel] = sqlite3.connect(filename)
         c = self.dbs[channel].execute("PRAGMA user_version")
         version = c.fetchone()[0]
         self._upgradeDb(self.dbs[channel], version)
     return self.dbs[channel]
Esempio n. 28
0
 def _getDb(self, channel):
     if channel not in self.dbs:
         filename = plugins.makeChannelFilename(self.filename, channel)
         self.dbs[channel] = sqlite3.connect(filename)
         c = self.dbs[channel].execute("PRAGMA user_version")
         version = c.fetchone()[0]
         self._upgradeDb(self.dbs[channel], version)
     return self.dbs[channel]
Esempio n. 29
0
 def _getDb(self, channel):
     import anydbm
     if channel not in self.dbs:
         filename = plugins.makeChannelFilename(self.filename, channel)
         # To keep the code simpler for addPair, I decided not to make
         # self.dbs[channel]['firsts'] and ['lasts'].  Instead, we'll pad
         # the words list being sent to addPair such that ['\n \n'] will be
         # ['firsts'] and ['\n'] will be ['lasts'].
         self.dbs[channel] = anydbm.open(filename, 'c')
     return self.dbs[channel]
Esempio n. 30
0
 def _getDb(self, channel):
     import anydbm
     if channel not in self.dbs:
         filename = plugins.makeChannelFilename(self.filename, channel)
         # To keep the code simpler for addPair, I decided not to make
         # self.dbs[channel]['firsts'] and ['lasts'].  Instead, we'll pad
         # the words list being sent to addPair such that ['\n \n'] will be
         # ['firsts'] and ['\n'] will be ['lasts'].
         self.dbs[channel] = anydbm.open(filename, 'c')
     return self.dbs[channel]
Esempio n. 31
0
 def _getDb(self, channel):
     if channel not in self.dbs:
         filename = plugins.makeChannelFilename(self.filename, channel)
         self.dbs[channel] = sqlite3.connect(filename)
         self.dbs[channel].text_factory = str
         c = self.dbs[channel].execute("PRAGMA user_version");
         version = c.fetchone()[0]
         self._upgradeDb(self.dbs[channel], version)
         self.dbs[channel].create_function("REGEXP", 2, regexp)
     return self.dbs[channel]
Esempio n. 32
0
 def _getDb(self, channel):
     if channel not in self.dbs:
         filename = plugins.makeChannelFilename(self.filename, channel)
         # To keep the code simpler for addPair, I decided not to make
         # self.dbs[channel]['firsts'] and ['lasts'].  Instead, we'll pad
         # the words list being sent to addPair such that ['\n \n'] will be
         # ['firsts'] and ['\n'] will be ['lasts'].  This also means isFirst
         # and isLast aren't necessary, but they'll be left alone in case
         # one of the other Db formats uses them or someone decides that I
         # was wrong and changes my code.
         self.dbs[channel] = anydbm.open(filename, 'c')
     return self.dbs[channel]
Esempio n. 33
0
 def _getDb(self, channel):
     if channel not in self.dbs:
         filename = plugins.makeChannelFilename(self.filename, channel)
         # To keep the code simpler for addPair, I decided not to make
         # self.dbs[channel]['firsts'] and ['lasts'].  Instead, we'll pad
         # the words list being sent to addPair such that ['\n \n'] will be
         # ['firsts'] and ['\n'] will be ['lasts'].  This also means isFirst
         # and isLast aren't necessary, but they'll be left alone in case
         # one of the other Db formats uses them or someone decides that I
         # was wrong and changes my code.
         self.dbs[channel] = anydbm.open(filename, 'c')
     return self.dbs[channel]
Esempio n. 34
0
 def get_db(self, channel):
     if channel in self.engines:
         engine = self.engines[channel]
     else:
         filename = plugins.makeChannelFilename(self.filename, channel)
         exists = os.path.exists(filename)
         engine = sqlalchemy.create_engine('sqlite:///' + filename)
         if not exists:
             Base.metadata.create_all(engine)
         self.engines[channel] = engine
     assert engine.execute("select 1").scalar() == 1
     Session = sqlalchemy.orm.sessionmaker()
     Session.configure(bind=engine)
     return Session()
Esempio n. 35
0
 def get_db(self, channel):
     if channel in self.engines:
         engine = self.engines[channel]
     else:
         filename = plugins.makeChannelFilename(self.filename, channel)
         exists = os.path.exists(filename)
         engine = sqlalchemy.create_engine('sqlite:///' + filename)
         if not exists:
             Base.metadata.create_all(engine)
         self.engines[channel] = engine
     assert engine.execute("select 1").scalar() == 1
     Session = sqlalchemy.orm.sessionmaker()
     Session.configure(bind=engine)
     return Session()
Esempio n. 36
0
 def _getDb(self, channel):
     filename = plugins.makeChannelFilename(self.filename, channel)
     if filename in self.dbs:
         pass
     elif os.path.exists(filename):
         fd = file(filename)
         try:
             (Is, Are) = pickle.load(fd)
             self.dbs[filename] = (Is, Are)
             self.changes[filename] = 0
             self.responses[filename] = 0
         except cPickle.UnpicklingError, e:
             fd.close()
             raise dbi.InvalidDBError, str(e)
         fd.close()
Esempio n. 37
0
 def _getDb(self, channel):
     filename = plugins.makeChannelFilename(self.filename, channel)
     if filename in self.dbs:
         pass
     elif os.path.exists(filename):
         fd = file(filename)
         try:
             (Is, Are) = pickle.load(fd)
             self.dbs[filename] = (Is, Are)
             self.changes[filename] = 0
             self.responses[filename] = 0
         except cPickle.UnpicklingError, e:
             fd.close()
             raise dbi.InvalidDBError, str(e)
         fd.close()
Esempio n. 38
0
 def _getDb(self, channel):
     filename = plugins.makeChannelFilename(self.filename, channel)
     if filename in self.dbs:
         return self.dbs[filename]
     if os.path.exists(filename):
         db = sqlite3.connect(filename, check_same_thread=False)
         if sys.version_info[0] < 3:
             db.text_factory = str
         self.dbs[filename] = db
         return db
     db = sqlite3.connect(filename, check_same_thread=False)
     if sys.version_info[0] < 3:
         db.text_factory = str
     self.dbs[filename] = db
     cursor = db.cursor()
     cursor.execute("""CREATE TABLE pronouns (name TEXT PRIMARY KEY, pronoun TEXT)""")
     db.commit()
     def p(s1, s2):
         return int(ircutils.nickEqual(s1, s2))
     db.create_function('nickeq', 2, p)
     return db
Esempio n. 39
0
 def _getDb(self, channel):
     try:
         import sqlite
     except ImportError:
         raise callbacks.Error, 'You need to have PySQLite installed to '\
                                'use this plugin.  Download it at '\
                                '<http://pysqlite.org/>'
     try:
         filename = plugins.makeChannelFilename(self.filename, channel)
         if filename not in self.changes:
             self.changes[filename] = 0
         if filename not in self.responses:
             self.responses[filename] = 0
         if filename in self.dbs:
             return (self.dbs[filename], filename)
         if os.path.exists(filename):
             self.dbs[filename] = sqlite.connect(filename)
             return (self.dbs[filename], filename)
         db = sqlite.connect(filename)
         self.dbs[filename] = db
         cursor = db.cursor()
         cursor.execute("""CREATE TABLE isFacts (
                           key TEXT UNIQUE ON CONFLICT REPLACE,
                           value TEXT
                           );""")
         cursor.execute("""CREATE TABLE areFacts (
                           key TEXT UNIQUE ON CONFLICT REPLACE,
                           value TEXT
                           );""")
         db.commit()
         for (k, v) in initialIs.iteritems():
             self.setIs(channel, k, v)
         for (k, v) in initialAre.iteritems():
             self.setAre(channel, k, v)
         self.changes[filename] = 0
         self.responses[filename] = 0
         return (db, filename)
     except sqlite.DatabaseError, e:
         raise dbi.InvalidDBError, str(e)
Esempio n. 40
0
 def get_db(self, channel):
     if channel in self.engines:
         engine = self.engines[channel]
     else:
         filename = plugins.makeChannelFilename(self.filename, channel)
         exists = os.path.exists(filename)
         engine = sqlite3.connect(filename, check_same_thread=False)
         if not exists:
             cursor = engine.cursor()
             cursor.execute("""CREATE TABLE aliases (
                     id INTEGER NOT NULL,
                     name VARCHAR NOT NULL,
                     alias VARCHAR NOT NULL,
                     locked BOOLEAN NOT NULL,
                     locked_by VARCHAR,
                     locked_at DATETIME,
                     PRIMARY KEY (id),
                     UNIQUE (name))""")
             engine.commit()
         self.engines[channel] = engine
     assert engine.execute("select 1").fetchone() == (1,)
     return engine
Esempio n. 41
0
 def _getDb(self, channel):
     try:
         import sqlite
     except ImportError:
         raise callbacks.Error, 'You need to have PySQLite installed to '\
                                'use this plugin.  Download it at '\
                                '<http://pysqlite.org/>'
     try:
         filename = plugins.makeChannelFilename(self.filename, channel)
         if filename not in self.changes:
             self.changes[filename] = 0
         if filename not in self.responses:
             self.responses[filename] = 0
         if filename in self.dbs:
             return (self.dbs[filename], filename)
         if os.path.exists(filename):
             self.dbs[filename] = sqlite.connect(filename)
             return (self.dbs[filename], filename)
         db = sqlite.connect(filename)
         self.dbs[filename] = db
         cursor = db.cursor()
         cursor.execute("""CREATE TABLE isFacts (
                           key TEXT UNIQUE ON CONFLICT REPLACE,
                           value TEXT
                           );""")
         cursor.execute("""CREATE TABLE areFacts (
                           key TEXT UNIQUE ON CONFLICT REPLACE,
                           value TEXT
                           );""")
         db.commit()
         for (k, v) in initialIs.iteritems():
             self.setIs(channel, k, v)
         for (k, v) in initialAre.iteritems():
             self.setAre(channel, k, v)
         self.changes[filename] = 0
         self.responses[filename] = 0
         return (db, filename)
     except sqlite.DatabaseError, e:
         raise dbi.InvalidDBError, str(e)
Esempio n. 42
0
 def get_db(self, channel):
     if channel in self.engines:
         engine = self.engines[channel]
     else:
         filename = plugins.makeChannelFilename(self.filename, channel)
         exists = os.path.exists(filename)
         engine = sqlite3.connect(filename, check_same_thread=False)
         if not exists:
             cursor = engine.cursor()
             cursor.execute("""CREATE TABLE aliases (
                     id INTEGER NOT NULL,
                     name VARCHAR NOT NULL,
                     alias VARCHAR NOT NULL,
                     locked BOOLEAN NOT NULL,
                     locked_by VARCHAR,
                     locked_at DATETIME,
                     PRIMARY KEY (id),
                     UNIQUE (name))""")
             engine.commit()
         self.engines[channel] = engine
     assert engine.execute("select 1").fetchone() == (1,)
     return engine
Esempio n. 43
0
 def _getDb(self, channel):
     filename = plugins.makeChannelFilename(self.filename, channel)
     if filename in self.dbs:
         return self.dbs[filename]
     if os.path.exists(filename):
         db = sqlite3.connect(filename, check_same_thread=False)
         if minisix.PY2:
             db.text_factory = str
         self.dbs[filename] = db
         return db
     db = sqlite3.connect(filename, check_same_thread=False)
     if minisix.PY2:
         db.text_factory = str
     self.dbs[filename] = db
     cursor = db.cursor()
     cursor.execute("""CREATE TABLE lastfm (
                       id INTEGER PRIMARY KEY,
                       nick TEXT,
                       user TEXT
                       )""")
     db.commit()
     return db
Esempio n. 44
0
 def _getDb(self, channel):
     filename = plugins.makeChannelFilename(self.filename, channel)
     if filename in self.dbs:
         return self.dbs[filename]
     if os.path.exists(filename):
         db = sqlite3.connect(filename)
         db.text_factory = str
         self.dbs[filename] = db
         return db
     db = sqlite3.connect(filename)
     db.text_factory = str
     self.dbs[filename] = db
     cursor = db.cursor()
     cursor.execute("""CREATE TABLE alias (
                       id INTEGER PRIMARY KEY,
                       name TEXT,
                       normalized TEXT,
                       aliases TEXT
                       )""")
     db.commit()
     def p(s1, s2):
         return int(ircutils.nickEqual(s1, s2))
     db.create_function('nickeq', 2, p)
     return db
Esempio n. 45
0
 def makeFilename(self, channel):
     return plugins.makeChannelFilename("QuoteGrabs.sqlite.db", channel)
Esempio n. 46
0
 def makeFilename(self, channel):
     return plugins.makeChannelFilename("QuoteGrabs.sqlite.db", channel)