예제 #1
0
파일: API.py 프로젝트: RTae/CPE231-LAB3
def report_customer_products_sold_total(invoices, products, customers,
                                        dateStart, dateEnd):
    # Will return 2 dictionaries:
    # 1) a dictionary as list customers and the total number and value of products sold to them in the given date range in this format:  Customer Code, Customer Name, Product Code,  Product Name, Total Quantity Sold, Total Value Sold. Here (customer code, product code) will be unique.
    # And 2) a second footer dictionary showing: t the end also show the sum of Total Quantity Sold, sum of Total Value Sold.
    db = DBHelper()
    data, columns = db.fetch(
        'SELECT i.customer_code, c.customer_code as "Customer Code", c.name as "Customer Name" '
        ' , ili.product_code as "Product Code", p.name as "Product Name" '
        ' , SUM(ili.quantity) as "Total Quantity Sold", SUM(ili.extended_price) as "Total Value Sold" '
        ' FROM invoice i JOIN invoice_line_item ili ON i.invoice_no = ili.invoice_no '
        '   JOIN customer c ON i.customer_code = c.customer_code '
        '   JOIN product p ON ili.product_code = p.code '
        ' WHERE i.date between \'' + dateStart + '\' and \'' + dateEnd + '\' '
        ' GROUP BY i.customer_code, c.customer_code, c.name, i.invoice_no, ili.product_code, p.name '
    )
    result = row_as_dict(data, columns)
    data, columns = db.fetch(
        'SELECT 0 as "Footer", SUM(ili.quantity) as "Total Quantity Sold", SUM(ili.extended_price) as "Total Value Sold" '
        ' FROM invoice i JOIN invoice_line_item ili ON i.invoice_no = ili.invoice_no '
        '   JOIN customer c ON i.customer_code = c.customer_code '
        '   JOIN product p ON ili.product_code = p.code '
        ' WHERE i.date between \'' + dateStart + '\' and \'' + dateEnd + '\' '
        ' ')
    result2 = row_as_dict(data, columns)

    printDictInCSVFormat(
        result, (None),
        ('Customer Code', 'Customer Name', 'Product Code', 'Product Name',
         'Total Quantity Sold', 'Total Value Sold'))
    printDictInCSVFormat(result2, (None),
                         ('Total Quantity Sold', 'Total Value Sold'))
    return result.values(), result2
예제 #2
0
파일: API.py 프로젝트: RTae/CPE231-LAB3
def report_products_sold(invoices, products, dateStart, dateEnd):
    # Will return 2 dictionaries:
    # 1) a dictionary as list of in products sold in the given date range in tabular format of: Product Code, Product Name, Total Quantity Sold, Total Value Sold. Here, (product code) will be unique.
    # And 2) a second dictionary of the footer will also be returned containing: t the end also show the sum of Total Value Sold.
    db = DBHelper()
    data, columns = db.fetch(
        'SELECT p.code as "Code", ili.product_code as "Product Code", p.name as "Product Name" '
        ' , SUM(ili.quantity) as "Total Quantity Sold", SUM(ili.extended_price) as "Total Value Sold" '
        ' FROM invoice i JOIN invoice_line_item ili ON i.invoice_no = ili.invoice_no '
        '   JOIN product p ON ili.product_code = p.code '
        ' WHERE i.date between \'' + dateStart + '\' and \'' + dateEnd + '\' '
        ' GROUP BY p.code, ili.product_code, p.name ')
    result = row_as_dict(data, columns)
    data, columns = db.fetch(
        'SELECT 0 as "Footer", SUM(ili.extended_price) as "Total Value Sold" '
        ' FROM invoice i JOIN invoice_line_item ili ON i.invoice_no = ili.invoice_no '
        '   JOIN product p ON ili.product_code = p.code '
        ' WHERE i.date between \'' + dateStart + '\' and \'' + dateEnd + '\' '
        ' ')
    result2 = row_as_dict(data, columns)

    printDictInCSVFormat(result, (None),
                         ('Product Code', 'Product Name',
                          'Total Quantity Sold', 'Total Value Sold'))
    printDictInCSVFormat(result2, (None), ('Total Value Sold', ))
    return result, result2
예제 #3
0
 def __init__(self, code, startDateTime, endDateTime):
     self.code = code
     self.startDateTime = startDateTime
     self.endDateTime = endDateTime
     self.dbHelper = DBHelper()
     self.dataDim = config.getDataDim()
     self.debugTrainData = config.debugForPrepareData
     self.backWindow = config.backWindowLength
예제 #4
0
def get_province(req):
    db = DBHelper('region')
    data = db.where(pid='0').select()
    print(db.sql)
    print(data)

    req.start_response("200 ok", [("ContentType", "application/json")])
    return [json.dumps(data).encode('utf8')]
예제 #5
0
파일: API.py 프로젝트: RTae/CPE231-LAB3
def report_list_all_paymentMedthod():
    db = DBHelper()
    data, columns = db.fetch('SELECT pm.code as "Code", pm.name as "Name" '
                             ' FROM paymentmethod as pm')
    result = row_as_dict(data, columns)
    #print (result)
    printDictInCSVFormat(result, ('Code', ), ('Name', ))
    return result  #send result for caller program to use
예제 #6
0
def get_max_id(game_name):
    if not check_game_name(game_name):
        abort(404)

    dbHelper = DBHelper()
    table_name = "tb_{}".format(game_name.lower())
    id = dbHelper.select_max_id(table_name)
    return jsonify({"code": 200, "maxid": str(id)})
 def deleteuser(self):
     delrol = ""
     delrol = self.deleteinput.text()
     try:
         _deleteuser = DBHelper()
         row = _deleteuser.deleteUserQuery(delrol)
     except Exception:
         print('')
예제 #8
0
    def __init__(self, code, startDateTime, endDateTime):
        self.code = code
        self.startDateTime = startDateTime
        self.endDateTime = endDateTime

        self.dbHelper = DBHelper()
        self.utils = Utils()
        self.debug = config.debugForPrepareData
예제 #9
0
def check_if_court_occupied(court_no):
    dbh = DBHelper()
    court_usage1 = dbh.get_court_usage(court_no)
    if court_usage1:
        # print court_usage1
        return court_usage1
    else:
        print("No Court ")
        return
 def purchaseTicket(self):
     _cNumber = self._cNumber.text()
     _cDate = self._cDate.text()
     _cFullName = self._cFullName.text()
     _cSecNumber = self._cSecNumber.text()
     _p = DBHelper()
     _p.InsertPurchaseCCQuery(self._uid, self._paymentType, self.totalCost,
                              self.totalTickets, _cNumber, _cDate,
                              _cFullName, _cSecNumber)
예제 #11
0
def parse_mails(min_mails=100):
    db = DBHelper()
    print("\n### RETRIEVING DATA FROM DATABASE ###")
    db.execute("SET group_concat_max_len = 18446744073709547520")
    results = db.execute("""
    select x.from, x.to, m.txt
    from
      (select z.mailId id, GROUP_CONCAT(y.paragraph separator ' ') txt
       from mail_paragraphs z
         join sha_paragraphs y
           on z.pid = y.id
       where z.deleted = 0
       group by z.mailId) m
      join
        (select a.mailId as id, a.from, a.to
         from from_to_mail a
         join (select aut.from f, aut.to t
                from from_to_mail aut
                where aut.from rlike "^[A-Za-z0-9.-][email protected]$"
                and aut.to rlike "^[A-Za-z0-9.-][email protected]$"
                and mailId in
                  (select mailId from mail_paragraphs where deleted = 0)
                group by f, t
                having count(*) > {0}) b
        on a.from = b.f
        and a.to = b.t) x
    on m.id = x.id;
    """.format(min_mails))

    authors, recipients, emails, cnt, progress = [], [], [], 0, 0

    print("\n### PARSING EMAILS ###")
    filecount = db.rowcount
    for row in results:
        cnt += 1
        emails.append(stem(row))
        authors.append(row[0])
        recipients.append(row[1])

        tmp_progress = int(cnt * 100 / filecount)
        if tmp_progress % 10 == 0 and progress != tmp_progress:
            progress = tmp_progress
            print("-- {} / {} emails parsed ({} %)".format(
                cnt, filecount, progress))

    le = preprocessing.LabelEncoder()
    le.fit(authors + recipients)
    enc_authors = le.transform(authors)
    enc_recipients = le.transform(recipients)

    print("-- {} emails from/to {} addresses parsed".format(
        cnt, len(le.classes_)))
    pickle.dump(emails, open("./data/word_data.pkl", "wb"))
    pickle.dump(np.array(enc_authors), open("./data/authors.pkl", "wb"))
    pickle.dump(np.array(enc_recipients), open("./data/recipients.pkl", "wb"))
    pickle.dump(np.array(le.classes_), open("./data/classes.pkl", "wb"))
    return emails, enc_authors, enc_recipients, le.classes_
예제 #12
0
def get_count():
    dic = {}

    dbHelper = DBHelper()
    for t in games:
        table_name = "tb_{}".format(t.lower())
        count = dbHelper.select_count(table_name)
        dic[t] = count
    return jsonify({"code": 200, "count": dic})
예제 #13
0
def publish(announcement):
    bot = telepot.Bot(TOKEN)
    db1 = DBHelper()
    keyboard = ReplyKeyboardMarkup(keyboard=[['Share my Thought'],
                                             ['Listen to a Thought']],
                                   one_time_keyboard=True,
                                   resize_keyboard=True)
    alluser = db1.get_all_user()
    for user in alluser:
        bot.sendMessage(user[0], announcement, reply_markup=keyboard)
예제 #14
0
파일: server.py 프로젝트: peps0791/BraiNet
def is_admin(id):
    db = DBHelper()
    cnx = db.getConn()
    if cnx is None:
        print 'connection is null'
    else:
        if db.checkIfAdmin(id, cnx) == 1:
            return True
        else:
            return False
 def Login(self):
     _login = DBHelper()
     res = _login.LoginQuery(self.username_LE.text(), self.password_LE.text())
     if(len(res) > 0):
         if (self.username_LE.text() == str(res[0][1]) and
             self.password_LE.text() == str(res[0][2])):
             QMessageBox.information(QMessageBox(),'Successful','Login Successful')
             self.accept()
     else:
         QMessageBox.warning(QMessageBox(), 'Error', 'Bad user or password')
def parse_mails(min_mails = 100):
    db = DBHelper()
    print("\n### RETRIEVING DATA FROM DATABASE ###")
    db.execute("SET group_concat_max_len = 18446744073709547520")
    results = db.execute("""
    select x.from, x.to, m.txt
    from
      (select z.mailId id, GROUP_CONCAT(y.paragraph separator ' ') txt
       from mail_paragraphs z
         join sha_paragraphs y
           on z.pid = y.id
       where z.deleted = 0
       group by z.mailId) m
      join
        (select a.mailId as id, a.from, a.to
         from from_to_mail a
         join (select aut.from f, aut.to t
                from from_to_mail aut
                where aut.from rlike "^[A-Za-z0-9.-][email protected]$"
                and aut.to rlike "^[A-Za-z0-9.-][email protected]$"
                and mailId in
                  (select mailId from mail_paragraphs where deleted = 0)
                group by f, t
                having count(*) > {0}) b
        on a.from = b.f
        and a.to = b.t) x
    on m.id = x.id;
    """.format(min_mails))

    authors, recipients, emails, cnt, progress = [], [], [], 0, 0

    print("\n### PARSING EMAILS ###")
    filecount = db.rowcount
    for row in results:
        cnt += 1
        emails.append(stem(row))
        authors.append(row[0])
        recipients.append(row[1])

        tmp_progress = int(cnt*100 / filecount)
        if tmp_progress % 10 == 0 and progress != tmp_progress:
            progress = tmp_progress
            print("-- {} / {} emails parsed ({} %)".format(cnt, filecount, progress))

    le = preprocessing.LabelEncoder()
    le.fit(authors+recipients)
    enc_authors = le.transform(authors)
    enc_recipients = le.transform(recipients)

    print("-- {} emails from/to {} addresses parsed".format(cnt, len(le.classes_)))
    pickle.dump(emails, open("./data/word_data.pkl", "wb"))
    pickle.dump(np.array(enc_authors), open("./data/authors.pkl", "wb"))
    pickle.dump(np.array(enc_recipients), open("./data/recipients.pkl", "wb"))
    pickle.dump(np.array(le.classes_), open("./data/classes.pkl", "wb"))
    return emails, enc_authors, enc_recipients, le.classes_
예제 #17
0
파일: server.py 프로젝트: peps0791/BraiNet
def get_user_data(id):

    db = DBHelper()
    cnx = db.getConn()
    condExpr = ' UserID = ' + str(id)
    cursor = db.fetchFromWhere('UserInfo', condExpr, cnx)
    if cursor.rowcount > 0:
        userInfo = cursor.fetchone()
        print 'userInfo-->', userInfo
        return userInfo
    else:
        return None
 def addUser(self):
     first_name = ""
     last_name = ""
     Joined = ""
     first_name = self.first_name.text()
     last_name = self.last_name.text()
     Joined = self.Joined.text()
     try:
         _userSearch = DBHelper()
         row = _userSearch.addUserQuery(first_name, last_name, Joined)
     except Exception:
         print('')
예제 #19
0
def student_detail(req, sno):
    # sno = req.GET.get('sno')
    print(sno)
    db = DBHelper('student')
    student = db.where(sno=sno).select()
    if student:
        student = student[0]
        return render(req, 'studentdetail.html', {
            'title': student['sname'],
            'data': student
        })
    else:
        return render(req, '404.html')
예제 #20
0
 def handleEditRow(self):
     button = QtWidgets.qApp.focusWidget()
     index = self.tableWidget.indexAt(button.pos())
     if index.isValid():
         item = self.tableWidget.item(index.row(), 0)
         item1 = self.tableWidget.item(index.row(), 4)
         item2 = self.tableWidget.item(index.row(), 5)
         self.item_text = item.text()
         self.item_text1 = item1.text()
         self.item_text2 = item2.text()
         print(self.item_text, self.item_text1, self.item_text2)
         updateRecord = DBHelper()
         updateRecord.updatePaymentQuery(self.item_text, self.item_text1,
                                         self.item_text2)
예제 #21
0
def fopt(idchat):
    dbh = DBHelper()
    result = dbh.select_idchat('data', idchat)
    ini = len(result)
    i = 1
    while i < len(result):
        if result[i - 1][3] == result[i][2]:
            result[i - 1][3] == result[i][3]
            dbh.delete_id('data', result[i][0])
            result.pop(i)
        else:
            i = i + 1
    out = len(result)
    return 'Ottimizzato: ' + str(ini) + ' -> ' + str(out)
예제 #22
0
def do_login(environ, start_response):
    # 获取请求方法类型
    method = environ.get('REQUEST_METHOD', 'GET')
    if method == 'GET':
        paremeters = environ.get('QUERY_STRING')
        paremeters = parse_qs(paremeters)
        print(paremeters)
        paremeters = {
            key: value[0] if len(value) == 1 else value
            for key, value in paremeters.items()
        }
        print(paremeters)
        username = paremeters.get('username')
        password = paremeters.get('password')
        sex = paremeters.get('sex')
        print(username, password)
        # 业务逻辑处理
        password = hashlib.sha1(password.encode('utf8')).hexdigest()
        print(password)
        db = DBHelper('user')
        res = db.where(username=username, password=password).select()
        print(db.sql)
        print(res)
        start_response("200 ok", [('ContentType', 'text/html')])
        # if res:
        #     # 通过验证
        #     return [b"<html><head><meta http-equiv='refresh' content='0;url=/'></head><body></body></html>"]
        # else:
        #跳转登录页面
        # return [b"<html><head><meta http-equiv='refresh' content='0;url=/login'></head><body></body></html>"]
        # return [b"<meta http-equiv='refresh' content='0;url=/login'>"]
        return [b'dologin']
    else:  #post
        # 参数长度
        contentLength = int(environ.get('CONTENT_LENGTH', 0))
        fp = environ.get('wsgi.input')
        paremeters = fp.read(contentLength).decode('utf8')
        paremeters = parse_qs(paremeters)
        paremeters = {
            key: value[0] if len(value) == 1 else value
            for key, value in paremeters.items()
        }
        username = paremeters.get('username')
        password = paremeters.get('password')
        sex = paremeters.get('sex')
        print(paremeters)
        print(username, password, sex)
        # 业务逻辑处理
    start_response("200 ok", [('ContentType', 'text/html')])
    return [b'world']
예제 #23
0
 def loaddata(self):
     _userpaymentGrid = DBHelper()
     result = _userpaymentGrid.userPaymentQuery()
     self.tableWidget.setRowCount(0)
     for row_number, row_data in enumerate(result):
         self.tableWidget.insertRow(row_number)
         for column_number, data in enumerate(row_data):
             self.tableWidget.setItem(row_number, column_number,
                                      QTableWidgetItem(str(data)))
             self.btn_edit = QPushButton('Edit')
             self.btn_edit.clicked.connect(self.handleEditRow)
             self.tableWidget.setCellWidget(row_number, 10, self.btn_edit)
             self.tableWidget.item(row_number,
                                   0).setFlags(QtCore.Qt.ItemIsEnabled)
예제 #24
0
	def normalize_artists(path, db_name, table_name):

		DBHelper.make_table(db_name,table_name)

		artists = SourceParser.retrieve_artists(path)
		norm_artists = {}

		for artist in artists:
			lyrics = DBHelper.get_lyrics(db_name, table_name, artist)
			if lyrics:
				norm_artists[artist] = lyrics
			else:
				norm_artists[artist] = SourceParser.normalize_data(path + artist + ".txt")
				DBHelper.update_lyrics(db_name,table_name, artist, norm_artists[artist])
		return norm_artists
예제 #25
0
def check_username(req):
    if req.method == 'GET':
        username = req.GET.get('username')
    else:
        username = req.POST.get('username')
    # 查询数据库
    db = DBHelper('user')
    res = db.where(username=username).select()
    if res:
        data = {'code': 1, 'msg': '用户名不可用'}
    else:
        data = {'code': 0, 'msg': '用户名可用'}
    req.start_response("200 ok", [("ContentType", "application/json")])
    print(res)
    return [json.dumps(data).encode('utf8')]
예제 #26
0
파일: server.py 프로젝트: peps0791/BraiNet
def authorize_user_id(id):

    db = DBHelper()
    cnx = db.getConn()
    if cnx is None:
        return None
    else:
        cnx.set_converter_class(NumpyMySQLConverter)

        condExpr = 'UserID = ' + str(id)
        cursor = db.fetchFromWhere("UserInfo", condExpr, cnx)
        print 'row count->', cursor.rowcount
        if cursor.rowcount > 0:
            return True
        else:
            return False
예제 #27
0
def generate_reverse_index():
    """
    生成反向索引(前提是已经生成好了正向索引),索引内容:
    key_word_id                        content
    关键词ID        [[内容包含关键词的答案1的ID,关键词权重],........]

    :return:
    """
    db_helper = DBHelper.get_instance()

    # db_helper.clear_reverse_indexes()

    i = 1494000
    r = db_helper.get_forward_indexes(1494000)
    for f_index in r:
        a_id = f_index['answer_id']
        content_info = f_index['content_info']
        i += 1
        if i % 1000 == 0:
            print(i)
            print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
        if content_info:
            for content in content_info:
                db_helper.add_reverse_index_content(content[0], a_id, content[1])
    r.close()
    def generateKey(self):
        """Génère le bi-clé dans la ressource P11. (Voir setKeyOptions)"""
        self.cryptoID = DBHelper.getInstance().newCryptoID()
        sensitiveKeys = self.x509Req.isCA()

        p11Helper = None
        if self.generateKeyOnSmartCard:
            p11Helper = anssipki.P11Helper.connect(
                Conf.getValue("PKCS11_SMARTCARD_MODULE"),
                Conf.getValue("PKCS11_SMARTCARD_PIN"),
                Conf.getValue("PKCS11_SMARTCARD_LABEL"),
                Conf.getValue("PKCS11_SMARTCARD_SLOT") != None,
                Conf.getValue("PKCS11_SMARTCARD_SLOT"))
            self.smartCardP11Helper = p11Helper
            if not p11Helper:
                raise Exception('Error loading PKCS#11 ressource.')
            # Flag specific à SWIG. Une fois mis à true, l'objet C++ réferencé
            # est détruit lorsque ce dernier est récupéré par le GC.
            self.smartCardP11Helper.thisown = True
        else:
            p11Helper = anssipki.P11Helper.getInstance()

        if self.keyType == anssipki.KPA_RSA:
            usage = anssipki.USAGE_SIGNATURE
            self.hPublicKey, self.hPrivateKey = p11Helper.generateRSAKeyPair(
                self.keyLength, self.cryptoID, sensitiveKeys, self.label,
                usage)
        else:
            raise Exception('KeyType not implemented')

        self.x509Req.setPublicKey(p11Helper.extractPublicKey(self.hPublicKey))
예제 #29
0
def generate_forward_index():
    """
    生成问题正向索引,并存入数据库
    索引内容:
        question_id        content_info
        问题ID            内容关键词ID.....

    :return:
    """
    db_helper = DBHelper.get_instance()
    # # 清空正向索引
    # db_helper.clear_forward_indexes()
    # db_helper.clear_key_word()

    r = db_helper.get_all_answers(db_helper.get_forward_index_count())
    # 重新生成索引

    i = db_helper.get_forward_index_count()

    for answer in r:
        res = handler_each_answer(answer)
        db_helper.add_forward_indexes(res[0], res[1])
        i += 1
        if i % 1000 == 0:
            print(i)
            print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))

    r.close()
예제 #30
0
def index(req):
    articles = DBHelper('article').select()
    for article in articles:
        article['publishtime'] = datetime.strftime(article['publishtime'],
                                                   '%Y-%m-%d')
    print(articles)
    return render(req, 'blog.html', {'articles': articles})
예제 #31
0
class OriginalDataSaver:
    def __init__(self, csvFileName):
        self.csvFileName = csvFileName
        self.dbHelper = DBHelper()
        self.code = self.csvFileName.replace('.CSV', '')

    def taobaoShop(self, array):
        # for taobao数据商家
        createTime = array[0].strip() + ' ' + array[1].strip()
        createTime_object = datetime.strptime(createTime, '%Y/%m/%d %H:%M')

        k = KLine(None, ktype5F, self.code, createTime_object,
                  float(array[2].strip()), float(array[5].strip()),
                  float(array[3].strip()), float(array[4].strip()),
                  int(array[6].strip()), int(array[7].strip()))
        return k

    def tongxinda(self, array):
        # for 通信达
        createTime = array[0].strip() + ' ' + array[1].strip()
        createTime_object = datetime.strptime(createTime, '%Y/%m/%d %H%M')

        k = KLine(None, ktype5F, '600846', createTime_object,
                  float(array[2].strip()), float(array[5].strip()),
                  float(array[3].strip()), float(array[4].strip()),
                  int(array[6].strip()), int(array[7].strip()))
        return k

    def buildKLine(self, array):
        if len(array) > 7:
            return self.taobaoShop(array)

    def processFile(self):
        print('OriginalDataSaver start...')
        with open(os.path.join(dir, self.csvFileName), 'r') as f:
            i = 0
            for line in f:
                array = line.split(',')
                k = self.buildKLine(array)
                self.dbHelper.saveKLine(k)

                i += 1
                if i % 1000 == 0:
                    print('OriginalDataSaver.processFile ' + self.code +
                          ' progress line num ' + str(i))

        print('OriginalDataSaver end')
 def searchuser(self):
     searchrol = ""
     searchrol = self.searchinput.text()
     try:
         _userSearch = DBHelper()
         row = _userSearch.userSearchQuery(searchrol)
         if (len(row) > 0):
             serachresult = "User ID : " + str(
                 row[0]) + '\n' + "User Name : " + str(
                     row[1]) + '\n' + "Joined Date : " + str(row[2])
             QMessageBox.information(QMessageBox(), 'Successful',
                                     serachresult)
         else:
             QMessageBox.warning(QMessageBox(), 'Error',
                                 'Could not Find Record in Table.')
     except Exception:
         QMessageBox.warning(QMessageBox(), 'Error',
                             'Could not Find Record in Table.')
예제 #33
0
    def _postInit(self, command):

        OLD_PLUGIN_PATH = path.abspath(translatePath(path.join(path.dirname(self.__profile__), "..", "plugin.games.xbmame")))
	ADDON_PATH = translatePath(self.__profile__)

	if path.exists(OLD_PLUGIN_PATH):
	    try :
		print self.__profile__
		if path.exists(ADDON_PATH):rmtree(ADDON_PATH)
		move(OLD_PLUGIN_PATH, ADDON_PATH)
	    except Exception:
		pass

	self.MEDIA_PATH = path.join(self.__settings__.getAddonInfo("path"), "resources", "skins", "Default", "media")
	self._MAME_CONFIG_PATH = translatePath(path.join(self.__profile__, "cfg"))
        self._MAME_NVRAM_PATH = translatePath(path.join(self.__profile__, "nvram"))
        if not path.exists(self._MAME_CONFIG_PATH): makedirs(self._MAME_CONFIG_PATH)
        self._MAME_CACHE_PATH = translatePath(path.join(self.__profile__, "titles"))
        if not path.exists(self._MAME_CACHE_PATH): makedirs(self._MAME_CACHE_PATH)

        SETTINGS_PLUGIN_ID = "%s.settings" % self.__settings__.getAddonInfo("id")
        SETTINGS_PLUGIN_PATH = path.join(path.dirname(self.__settings__.getAddonInfo("path")), SETTINGS_PLUGIN_ID)
        try:
            Addon(SETTINGS_PLUGIN_ID)
	    self.SETTINGS_PLUGIN_ID=SETTINGS_PLUGIN_ID
	except Exception:
            if not path.exists(path.join(SETTINGS_PLUGIN_PATH, "resources")): makedirs(path.join(SETTINGS_PLUGIN_PATH, "resources"))
            plugin = open(path.join(SETTINGS_PLUGIN_PATH, "addon.xml"), "w")
            plugin.write("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><addon id=\"%s\" name=\"DIP Switches\"><extension point=\"xbmc.python.library\" library=\"default.py\" />  <extension point=\"xbmc.addon.metadata\"><platform>all</platform><summary></summary><description></description></extension></addon>" % SETTINGS_PLUGIN_ID)
            plugin.close()
            dialog.ok(self.__language__(30000), self.__language__(30704), self.__language__(30705))
            executebuiltin("RestartApp")

        self._FILTERS = ""

        if not path.exists(self.__profile__): makedirs(self.__profile__)

	self._MAME_DATABASE_PATH = translatePath(path.join(self.__settings__.getAddonInfo("profile"), "XBMame.db"))
        self._db = DBHelper(self._MAME_DATABASE_PATH)

        self.getSettings()

        while self._MAME_EXE_PATH=="":
            self.__settings__.openSettings()
            self.getSettings()

	if command[0]=="exec": self.execute(command[1:])
	else:
	    if self._db.isEmpty():MameImport(self)
            dbver = self._db.getSetting("database-version")
	    if dbver=="":dbver="1.0"
	    if dbver!=DB_VERSION:
                dialog.ok(self.__language__(30600), self.__language__(30620), self.__language__(30621) % (dbver, DB_VERSION), self.__language__(30622))
		MameImport(self)
예제 #34
0
class WeiboDB:
	def __init__(self):
		self.db = DBHelper(GV.server, GV.user, GV.pwd, GV.database);

	# 将微博与词条进行关联操作.执行失败返回 False, 否则返回 True
	def combine_klg(self, uid, weibomsg):
		if(weibomsg['run'] != ''):
			text = weibomsg['mc'] + "//@" + weibomsg['run'] + weibomsg['rmc'];
		else:
			text = weibomsg['mc'];

		klg_list = utility.match_klg(text);
		if( len(klg_list) > 0 ): # 存在某个词条
			try:
				insert_batch = [];
				update_mt = '';
				for klg in klg_list:
					insert_batch.append( [weibomsg['mid'], klg] );
					update_mt += str(klg) + ',';
				update_mt = update_mt.rstrip(',');
				self.db.insert("INSERT IGNORE INTO weibomsg (mid,uid,un,sn,iu,mc,murl,srn,iurl,rc,cc,pt,nc) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",
					[weibomsg['mid'], uid, weibomsg['un'], weibomsg['un'], weibomsg['iu'], text, weibomsg['page'], 
					weibomsg['srn'], weibomsg['pu'], weibomsg['rc'], weibomsg['cc'], weibomsg['pt'], weibomsg['nc']]);
				self.db.insert_many("INSERT IGNORE INTO abbre_weibomsg (mid,abrid) VALUES(%s, %s)", insert_batch);
				self.db.update("UPDATE `abbreviation` SET mt=%s WHERE abrid IN (" + update_mt + ")", [utility.now()]);
			except Exception,e:
				logging.exception("%s 绑定数据库失败: " + str(e), weibomsg['mid']);
예제 #35
0
def main():
    arg_helper = CmdArgumentsHelper();
    arg_helper.add_argument('query', 'q', 'query', 1);
    arg_helper.add_argument('root_dir', 'r', 'root', 1);
    arg_helper.add_argument('top_tag_num', 't', 'top_tag_num', 1);    
    args = arg_helper.read_arguments();
    print (args);

    root = args['root_dir'];
    top_tag_num = int(args['top_tag_num']);
    query = args['query'];

    from PhotoDao import PhotoDao;
    from DBHelper import DBHelper;
    db_helper = DBHelper();
    db_helper.init(root);
    photo_dao = PhotoDao(db_helper);

    print('get photo ids.');
    tic();
    photo_ids = photo_dao.getClassPhotoIds(query, ''.join([query]));
    toc();

    print('get photos ...');
    tic();
    photos = photo_dao.getPhotos(query, photo_ids);
    toc();

    print('gen top tags via user...');
    from task_gen_top_tags import task_gen_top_tag_via_user;
    tic();
    top_word = task_gen_top_tag_via_user(photos, query, top_tag_num, root);
    toc();

    print('build tag features...');
    from task_gen_top_tags import task_build_tag_features;
    tic();
    task_build_tag_features(top_word, query, photos, 0, root);
    toc();
예제 #36
0
def getPhotosMultiThread(root, query, photo_ids):
    from PhotoDao import PhotoDao;
    from DBHelper import DBHelper;
    db_helper = DBHelper();
    db_helper.init(root);
    photo_dao = PhotoDao(db_helper);

    infos = [];
    for photo_id in photo_ids:
        info = {};
        info['photo_dao'] = photo_dao;
        info['photo_id'] = photo_id;
        info['query'] = query;
        infos.append(info);
    print('done generaing infos for photo');

    import time;
    start=time.time()
    from multiprocessing import Pool
    pool = Pool(processes=30)              # start 4 worker processes
    photos = pool.map(getPhoto, infos)          # prints "[0, 1, 4,..., 81]"
    print "process_files_parallel()", time.time()-start

    return photos;
예제 #37
0
	def __init__(self):
		self.db = DBHelper(GV.server, GV.user, GV.pwd, GV.database);
예제 #38
0
    import time;
    start=time.time()
    from multiprocessing import Pool
    pool = Pool(processes=30)              # start worker processes
    photos_keep = pool.map(filter_photo_with_top_tags, photos)     
    print("process_files_parallel()", time.time()-start);
    photos = [];
    for photo_info in photos_keep:
        if(photo_info['keep']):
            photos.append(photo_info['photo']);
    return photos;

if __name__ == '__main__':
    from PhotoDao import PhotoDao;
    from DBHelper import DBHelper;
    db_helper = DBHelper();
    root = '/nas02/home/h/o/hongtao/Iconic';
    db_helper.init(root);

    query = 'love';
    photo_dao = PhotoDao(db_helper);
    photo_ids = photo_dao.getClassPhotoIds(query, ''.join([query]));
#    photo_ids = photo_ids[0:100];
#    photos = photo_dao.getPhotos(query, photo_ids);

    photos = getPhotosMultiThread(root, query, photo_ids);
    print('obtain ' + str(len(photos)) + ' photos.'); 

    top_tagfile = '/nas02/home/h/o/hongtao/magiconic/FlickrDownloader/tmp_dir/data/tags/%s.txt' % query;
    fin = open(top_tagfile, 'r');
    for tag in fin:
예제 #39
0
파일: home.py 프로젝트: Jeongki-Son/HomePy
env_lang = config.get_language()
print '    current language setting = ' + env_lang
set_proto_lang(env_lang)
set_msg_lang(env_lang)

# Get network IP addr
if CCTV_URL == '':
    CCTV_URL = 'http://'
    tempstr = subprocess.check_output('dig +short myip.opendns.com @resolver1.opendns.com', shell=True)
    tempstr.replace('\r', '')
    tempstr.replace('\n', '')
    CCTV_URL += tempstr.strip()
    CCTV_URL += ':' + CCTV_PORT
print 'Found external IP = ' + CCTV_URL
# Initialize DB
dbhelper = DBHelper(MYSQL_USER, MYSQL_PASS, MYSQL_DB)
dbhelper.connect()
dbhelper.checktables()
# Connect serial
t_ser = SerialThread(recv_queue, send_queue, incoming_cmd_callback)
t_ser.connect()
# Make worker thread
t_dev = DeviceManagerThread(dbhelper, recv_queue, send_queue, device_thread_callback)

# Start main loop
if __name__ == '__main__':
    try:
        # Start worker thread
        t_dev.load_devices()
        t_dev.load_noti()
        t_dev.load_macro()
#!/usr/bin/env python3

from DBHelper import DBHelper
import numpy as np
import time
from datetime import timedelta, datetime

db = DBHelper()
print("Fetching codes")
results = db.execute("""
    SELECT mailId, pid
    from mail_paragraphs
    where deleted = 0
    order by mailid, sortorder 
    """)

ms = {} #all paragraphs per mail
ps = {} #all mails per paragraph
mailParas = {} #the string representation of all paragrpahs per mail
for res in results:
    if res[0] not in ms:
        ms[res[0]] = []

    if res[0] not in mailParas:
        mailParas[res[0]] = ""

    if res[1] not in ps:
        ps[res[1]] = set()

    ms[res[0]].append(res[1])
    ps[res[1]].add(res[0])
#!/usr/bin/env python3
from string import punctuation
from hashlib import sha256
from mail_functions import *
from DBHelper import DBHelper


def mapToSQL(map, tablename):
    imp = map.copy()
    imp.pop('', None)
    imp.pop('body', None)
    imp.pop('SHABody', None)
    vals = [str(v).replace("'", "") for v in imp.values()]
    return "insert into " + tablename + '(`' + '`, `'.join(imp.keys()) + "`) values ('" + "', '".join(vals) + "'); "

db = DBHelper()

columnNames = [cols[0] for cols in db.execute("select lower(column_name) from information_schema.columns where table_name = 'mails'")]
print("Following columns are already present: \n {}".format(columnNames))

sha_vals = {line[0]: line[1] for line in db.execute("select sha, id from sha_paragraphs")}
print(str(len(sha_vals)) + ' sha values already in database')

parsedFiles = {c[0].strip(): 1 for c in db.execute("select filepath from mails")}

count = 0
sumparagraphs = 0
sumdistinctparagraphs = len(sha_vals)
print(str(len(parsedFiles)) + " already parsed files")

for file in getListOfFiles('../../maildir'):
  `x-bcc` longtext,
  `filepath` longtext,
  `to` longtext,
  `x-origin` longtext,
  `x-filename` longtext,
  `x-from` longtext,
  `date` longtext,
  `x-to` longtext,
  `message-id` longtext,
  `content-type` longtext,
  `mime-version` longtext,
  `cc` longtext,
  `bcc` longtext,
  `attendees` longtext,
  `re` longtext,
  `time` longtext,
  `conference room` longtext,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS `sha_paragraphs`;
CREATE TABLE `sha_paragraphs` (
  `sha` varchar(200) NOT NULL,
  `paragraph` longtext,
  id int,
  PRIMARY KEY (`sha`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
"""
db = DBHelper()
db.execute(sql, True)
예제 #43
0
	def __init__(self, databaseName, sizesFilename, peopleFilename, sizeCatalogFile):

		self.dbHelper = DBHelper(databaseName, sizesFilename, peopleFilename, sizeCatalogFile)

		#self.doClotheCategoryTest()
		self.doMatchClotheTest()
예제 #44
0
class Tester():

	#constructor 
	def __init__(self, databaseName, sizesFilename, peopleFilename, sizeCatalogFile):

		self.dbHelper = DBHelper(databaseName, sizesFilename, peopleFilename, sizeCatalogFile)

		#self.doClotheCategoryTest()
		self.doMatchClotheTest()


	# (!!!) (fix this)
	# does the "clothe category" test 
	def doClotheCategoryTest(self):

		peoples = self.dbHelper.people.peopleDataLines

		clotheCategories = self.dbHelper.sizes.getClotheCategories()

		catSizeTypes = self.dbHelper.sizes.getSizeTypes()

		# create the people size map 
		peopleSizeMap = {}

		sizeTypesList = self.dbHelper.sizes.getSizeTypesList()

		for i in range(len(sizeTypesList)):
			peopleSizeMap[sizeTypesList[i]] = i+1
		

		# test start time
		start_time = time.time()

		for people in peoples:

			parts = people.split('\t')

			for clotheCategory in clotheCategories:

				personSizes = {}
				sizesList = []
	
				sizes = catSizeTypes[clotheCategory]

				for size in sizes:
	
					personSizes[size.upper()] = parts[peopleSizeMap[size]]
					sizesList.append(size.upper())

				query = self.dbHelper.getClotheCategoryQuery(clotheCategory, sizesList, personSizes)

				self.dbHelper.queryDB(query)

		# elapsed time
		elapsed_time = time.time() - start_time

		print 'clothe category test lasted: ' + str(elapsed_time)


	# does the "match clothe" test
	def doMatchClotheTest(self):

		peoples = self.dbHelper.people.peopleDataLines

		# create the people size map 
		peopleSizeMap = {}

		sizeTypesList = self.dbHelper.sizes.getSizeTypesList()

		for i in range(len(sizeTypesList)):
			peopleSizeMap[sizeTypesList[i]] = i+1

		# test start time
		start_time = time.time()

		for people in peoples:

			parts = people.split('\t')

			personSizes = {}

			for sizeType in sizeTypesList:
	
				personSizes[sizeType.upper()] = parts[peopleSizeMap[sizeType]]

			query = self.dbHelper.getMatchClotheQuery(sizeTypesList, personSizes)

			self.dbHelper.queryDB(query)

		# elapsed time
		elapsed_time = time.time() - start_time

		print 'match clothe test lasted: ' + str(elapsed_time)
예제 #45
0
class XBMame:

    def __init__(self, ADDON_ID, arg):
        self.__settings__ = Addon(ADDON_ID)
        self.__language__ = Addon(ADDON_ID).getLocalizedString
        self.__profile__ = translatePath(Addon(ADDON_ID).getAddonInfo("profile"))

	command = arg.split(":")
	if len(command)==1:Path="/"
	else: Path = "/%s" % command[1]
        XBMameGUI("XBMame.xml", self.__settings__.getAddonInfo("path"), "default", "720p", Plugin=self, Path=Path, command=command)

    def _postInit(self, command):

        OLD_PLUGIN_PATH = path.abspath(translatePath(path.join(path.dirname(self.__profile__), "..", "plugin.games.xbmame")))
	ADDON_PATH = translatePath(self.__profile__)

	if path.exists(OLD_PLUGIN_PATH):
	    try :
		print self.__profile__
		if path.exists(ADDON_PATH):rmtree(ADDON_PATH)
		move(OLD_PLUGIN_PATH, ADDON_PATH)
	    except Exception:
		pass

	self.MEDIA_PATH = path.join(self.__settings__.getAddonInfo("path"), "resources", "skins", "Default", "media")
	self._MAME_CONFIG_PATH = translatePath(path.join(self.__profile__, "cfg"))
        self._MAME_NVRAM_PATH = translatePath(path.join(self.__profile__, "nvram"))
        if not path.exists(self._MAME_CONFIG_PATH): makedirs(self._MAME_CONFIG_PATH)
        self._MAME_CACHE_PATH = translatePath(path.join(self.__profile__, "titles"))
        if not path.exists(self._MAME_CACHE_PATH): makedirs(self._MAME_CACHE_PATH)

        SETTINGS_PLUGIN_ID = "%s.settings" % self.__settings__.getAddonInfo("id")
        SETTINGS_PLUGIN_PATH = path.join(path.dirname(self.__settings__.getAddonInfo("path")), SETTINGS_PLUGIN_ID)
        try:
            Addon(SETTINGS_PLUGIN_ID)
	    self.SETTINGS_PLUGIN_ID=SETTINGS_PLUGIN_ID
	except Exception:
            if not path.exists(path.join(SETTINGS_PLUGIN_PATH, "resources")): makedirs(path.join(SETTINGS_PLUGIN_PATH, "resources"))
            plugin = open(path.join(SETTINGS_PLUGIN_PATH, "addon.xml"), "w")
            plugin.write("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><addon id=\"%s\" name=\"DIP Switches\"><extension point=\"xbmc.python.library\" library=\"default.py\" />  <extension point=\"xbmc.addon.metadata\"><platform>all</platform><summary></summary><description></description></extension></addon>" % SETTINGS_PLUGIN_ID)
            plugin.close()
            dialog.ok(self.__language__(30000), self.__language__(30704), self.__language__(30705))
            executebuiltin("RestartApp")

        self._FILTERS = ""

        if not path.exists(self.__profile__): makedirs(self.__profile__)

	self._MAME_DATABASE_PATH = translatePath(path.join(self.__settings__.getAddonInfo("profile"), "XBMame.db"))
        self._db = DBHelper(self._MAME_DATABASE_PATH)

        self.getSettings()

        while self._MAME_EXE_PATH=="":
            self.__settings__.openSettings()
            self.getSettings()

	if command[0]=="exec": self.execute(command[1:])
	else:
	    if self._db.isEmpty():MameImport(self)
            dbver = self._db.getSetting("database-version")
	    if dbver=="":dbver="1.0"
	    if dbver!=DB_VERSION:
                dialog.ok(self.__language__(30600), self.__language__(30620), self.__language__(30621) % (dbver, DB_VERSION), self.__language__(30622))
		MameImport(self)

    def getSettings(self):
	    self._MAME_PARAMS = {}
	    self._FILTERS = ""
    # Fetching settings

        # General settings
            self._MAME_EXE_PATH = self.__settings__.getSetting("mame_exe_path").replace("\\", "/")
            self._MAME_ROM_PATH = self.__settings__.getSetting("mame_rom_path").replace("\\", "/")
            self._MAME_SAMPLES_PATH = self.__settings__.getSetting("mame_samples_path").replace("\\", "/")
            self._USE_MAMEINFO = self.__settings__.getSetting("mame_mameinfo")=="true"
            self._USE_HISTORY = self.__settings__.getSetting("mame_history")=="true"

        # Thumbnails settings
            self._MAME_TITLES_PATH = self.__settings__.getSetting("mame_titles_path").replace("\\", "/")
            self._CACHE_TITLES = self.__settings__.getSetting("cache_titles")=="true"
            self._ONLINE_TITLES = self.__settings__.getSetting("online_titles")=="true"
            self._HIRES_TITLES = self.__settings__.getSetting("hires_titles")=="true"
            self._ROMSET_TITLES = self.__settings__.getSetting("romset_titles")=="true"

        # ROM filters
            if self.__settings__.getSetting("hide_clones")=="true":self._FILTERS +=" AND cloneof=''"
            if self.__settings__.getSetting("hide_nothave")=="true":self._FILTERS += " AND have"
            if self.__settings__.getSetting("hide_notworking")=="true":self._FILTERS += " AND isworking"
            if self.__settings__.getSetting("hide_impemul")=="true":self._FILTERS += " AND emul"
            if self.__settings__.getSetting("hide_impcolor")=="true":self._FILTERS += " AND color"
            if self.__settings__.getSetting("hide_graphics")=="true":self._FILTERS += " AND graphic"
            if self.__settings__.getSetting("hide_impsound")=="true":self._FILTERS += " AND sound"

    # Emulator settings

        # Video related
            if self.__settings__.getSetting("mame_video")=="Direct3D":
                self._MAME_PARAMS["-video"] = "d3d"
                self._MAME_PARAMS["-d3dversion"] = self.__settings__.getSetting("mame_d3dversion")
            if self.__settings__.getSetting("mame_video")=="DirectDraw":self._MAME_PARAMS["-video"] = "ddraw"
            if self.__settings__.getSetting("mame_video")=="GDI":self._MAME_PARAMS["-video"] = "gdi"
            if self.__settings__.getSetting("mame_switchres")=="true": self._MAME_PARAMS["-switchres"] = ""
            if self.__settings__.getSetting("mame_filter")=="true": self._MAME_PARAMS["-filter"] = ""
            if self.__settings__.getSetting("mame_scanlines")=="true": self._MAME_PARAMS["-effect"] = "scanlines.png"

        # Other settings
            if self.__settings__.getSetting("mame_multithread")=="true": self._MAME_PARAMS["-multithreading"] = ""
            if self.__settings__.getSetting("mame_cheat")=="true": self._MAME_PARAMS["-waitvsync"] = ""
            if self.__settings__.getSetting("mame_gameinfo")=="false": self._MAME_PARAMS["-skip_gameinfo"] = ""

            if self._USE_MAMEINFO:
                self._mameinfo_dat = InfoFile(self._db, path.dirname(self._MAME_EXE_PATH))
            else:
                self._mameinfo_dat = InfoFile(self._db)
            if self._USE_HISTORY:
                self._history_dat = HistoryFile(self._db, path.dirname(self._MAME_EXE_PATH))
            else:
                self._history_dat = HistoryFile(self._db)

	    self.TITLES_PATH = ""
	    if self._MAME_TITLES_PATH:
		if self._MAME_CACHE_PATH:
		    self.TITLES_PATH = self._MAME_CACHE_PATH
                else:
                    self.TITLES_PATH = self._MAME_TITLES_PATH
	    elif self._MAME_CACHE_PATH:
		self.TITLES_PATH = self._MAME_CACHE_PATH
            try:
		self.GUI.populateList(self.browse(self.GUI.path))
	    except AttributeError:
		pass

    def execute(self, args):
	print args
	if args[0]=="builddb":MameImport(self)
        elif args[0]=="config":
            if len(args)==1:
                self.__settings__.openSettings()
            else:
		self._gameSettings(args[1])
            self.getSettings()
	elif args[0]=="buildthumb":
	    self._thumbNails()
            try:
		self.GUI.populateList(self.browse(self.GUI.path))
	    except AttributeError:
		pass
	elif args[0]=="havemiss":
	    self._haveList()
            try:
		self.GUI.populateList(self.browse(self.GUI.path))
	    except AttributeError:
		pass
	elif args[0]=="addfav":
	    self._db.execute("INSERT INTO Favorites VALUES (null,?);", (args[1],))
	    self._db.commit()
	elif args[0]=="delfav":
	    self._db.execute("DELETE FROM Favorites WHERE gamename=?;", (args[1],))
	    self._db.commit()
	    self.GUI.populateList(self.browse(self.GUI.path))
	elif args[0]=="game":
	    self._runGame(args[1])
        elif args[0]=="info":
            game = GameItem(self._db, id=args[1])
	    InfoDialog("InfoDialog.xml", self.__settings__.getAddonInfo("path"), "Default", "720p", game=game, Plugin=self)
        elif args[0]=="search":
            if len(args)>1:
		lock()
                self.GUI.populateList(self._gameCollection("", search=args[1]))
		unlock()
            else:
		kbd = Keyboard(heading=self.__language__(30106))
		kbd.doModal()
		if kbd.isConfirmed():
		    if len(kbd.getText()): self.execute(["search", kbd.getText()])
        elif args[0]=="related":
	    lock()
            self.GUI.populateList(self._gameCollection("", related=args[1]))
	    unlock()

    def browse(self, Path):
        Path = Path[1:].split("/")
        lock()
        items = []
        if Path[0]=="":
            items.append(self._item(self.__language__(30100), ICON_YEAR, "browse:/year"))
            items.append(self._item(self.__language__(30101), ICON_BIOS, "browse:/bios"))
            items.append(self._item(self.__language__(30102), ICON_MANUFACTURER, "browse:/manu"))
            items.append(self._item(self.__language__(30103), ICON_NAME, "browse:/name"))
            items.append(self._item(self.__language__(30104), ICON_HDD, "browse:/hdd"))
            items.append(self._item(self.__language__(30105), ICON_ALL, "browse:/all"))
            items.append(self._item(self.__language__(30108), ICON_FAVORITES, "browse:/favorites"))
            items.append(self._item(self.__language__(30106), ICON_SEARCH, "exec:search"))
        elif Path[0]=="year":
            if len(Path)>1:
                items.append(self._item(self.__language__(30500), "parent.png", "browse:/year"))
                items = self._gameCollection("year", year=Path[1])
            else:
                items.append(self._item(self.__language__(30500), "parent.png", "browse:/"))
                sql = "SELECT year FROM Games WHERE id>0 %s GROUP BY year ORDER BY year" % self._FILTERS
                years = self._db.Query(sql, ())
                for year in years:
                    items.append(self._item(year[0], ICON_YEAR, "browse:/year/%s" % year[0]))
        elif Path[0]=="bios":
            if len(Path)>1:
                items.append(self._item(self.__language__(30500), "parent.png", "browse:/bios"))
                items = self._gameCollection("bios", bios=Path[1])
            else:
                items.append(self._item(self.__language__(30500), "parent.png", "browse:/"))
                sql = "SELECT gamename, romset FROM Games WHERE isbios AND romset IN (SELECT romof FROM Games WHERE romof<>'' %s GROUP BY romof) ORDER BY gamename" % self._FILTERS
                bioses = self._db.Query(sql, ())
                for bios in bioses:
                    items.append(self._item(bios[0], ICON_BIOS, "browse:/bios/%s" % bios[1]))
        elif Path[0]=="manu":
            if len(Path)>1:
                items.append(self._item(self.__language__(30500), "parent.png", "browse:/manu"))
                items = self._gameCollection("manu", manufacturer=Path[1])
            else:
                items.append(self._item(self.__language__(30500), "parent.png", "browse:/"))
                sql = "SELECT manufacturer FROM Games WHERE id>0 %s GROUP BY manufacturer ORDER BY manufacturer" % self._FILTERS
                manufacturers = self._db.Query(sql, ())
                for manufacturer in manufacturers:
                    items.append(self._item(manufacturer[0], ICON_BIOS, "browse:/manu/%s" % manufacturer[0]))
        elif Path[0]=="name":
            if len(Path)>1:
                items.append(self._item(self.__language__(30500), "parent.png", "browse:/name"))
                if Path[1]=="#":
                    criteria = "("
                    for i in range(10):
                        criteria += "gamename LIKE '" + str(i) + "%'"
                        if i < 9:
                            criteria += " OR "
                    criteria += ")"
                else:
                    criteria = "gamename LIKE '" + Path[1] + "%'"
                items = self._gameCollection("name", letter=criteria)
            else:
                items.append(self._item(self.__language__(30500), "parent.png", "browse:/"))
                folders = ['#', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
                for folder in folders:
                    items.append(self._item(self.__language__( 30107 ) % folder.upper(), ICON_NAME, "browse:/name/%s" % folder))
        elif Path[0]=="hdd":
            items = self._gameCollection("", hasdisk=1)
        elif Path[0]=="all":
            items = self._gameCollection("")
        elif Path[0]=="favorites":
            items = self._gameCollection("", favorites=1)
        unlock()
        return items

    def _item(self, caption, image, action="", menu = ""):
	menu = "%s,exec:config," % self.__language__(30803) + menu
	if menu[-1]==",": menu=menu[:-1]
        if image=="":
            item = ListItem(label = caption)
            item.setProperty("action", action)
            item.setProperty("menu", menu)
        else:
            item = ListItem(label = caption, thumbnailImage = image)
            item.setProperty("action", action)
            item.setProperty("menu", menu)
        return item

    def _gameCollection(self, parentpath, year="", bios="", manufacturer="", letter="", search="", hasdisk=0, list="", related="", favorites=0, cache=False):
#        xbmcgui.lock()
        sql = "SELECT id, gamename, gamecomment, thumb, romset, hasdips FROM Games WHERE NOT isbios %s %s ORDER BY gamename"
        criteria=""
        values=""
        if year:
            criteria="AND year=?"
            values = (year,)
        if bios:
            criteria="AND romof=?"
            values = (bios,)
        if hasdisk:
            criteria="AND hasdisk"
            values = ""
        if manufacturer:
            criteria="AND manufacturer=?"
            values = (manufacturer,)
        if letter:
            criteria="AND %s" % letter
            values = ()
        if list:
            criteria="AND id IN (%s)" % list
            values = ()
        if related:
            criteria="AND gamename IN (%s)" % related
            values = ()
        if favorites:
            criteria="AND romset IN (SELECT gamename FROM Favorites)"
            values = ()
        if search:
            criteria="AND gamename LIKE '%" + search + "%'"
            values = ()
        sql =  "SELECT id, gamename, gamecomment, thumb, romset, hasdips, info, history FROM Games WHERE NOT isbios %s %s ORDER BY gamename" % (criteria, self._FILTERS)
        games = self._db.Query(sql, values)
        item = self._item(self.__language__(30500), "parent.png", "browse:/%s" % parentpath)
        item.setProperty("menu", "%s,%s" %(self.__language__( 30900 ), "exec:config"))
        items = [item]
        for game in games:
	    thumb = path.join(self.TITLES_PATH, "%s.png" % str(game[4]))
	    if not path.exists(thumb): thumb = "default.png"
            if str(game[2])!="": label = "%s (%s)" % (str(game[1]), str(game[2]))
            else: label = str(game[1])
            item = xbmcgui.ListItem(label=label, thumbnailImage=thumb)
            item.setProperty("action", "exec:game:%s" % game[0])
            menu = "%s,exec:config,%s,exec:config:%s,%s,exec:info:%s" %(self.__language__( 30803 ), self.__language__( 30800 ), game[0], self.__language__( 30802 ), game[0])
	    if not favorites: menu+=",%s,exec:addfav:%s" % (self.__language__(30804), game[4])
	    else:menu+=",%s,exec:delfav:%s" % (self.__language__(30805), game[4])
            item.setProperty("menu", menu)
            items.append(item)
#        xbmcgui.unlock()
        return items
        del games

    def _runGame(self, romset):
        game = GameItem(self._db, id=romset)
        if game.have:
            self._MAME_PARAMS["-cfg_directory"] = "\"%s\"" % self._MAME_CONFIG_PATH.replace("\\", "/")
            self._MAME_PARAMS["-nvram_directory"] = "\"%s\"" % self._MAME_NVRAM_PATH.replace("\\", "/")
            self._MAME_PARAMS["-rompath"] = "\"%s\"" % self._MAME_ROM_PATH.replace("\\", "/")
            self._MAME_PARAMS["-artpath"] = "\"%s\"" % self.MEDIA_PATH.replace("\\", "/")
            if self._MAME_SAMPLES_PATH:
                self._MAME_PARAMS["-samplepath"] = "\"%s\"" % self._MAME_SAMPLES_PATH.replace("\\", "/")
            if game.biosset:
                self._MAME_PARAMS["-bios"] = game.biosset
            cfgxml = "<?xml version=\"1.0\"?><mameconfig version=\"10\"><system name=\"%s\"><input>" % game.romset
            for switch in game.dipswitches:
                switch = DIPSwitch(self._db, switch[0])
                cfgxml+= "<port tag=\"%s\" type=\"DIPSWITCH\" mask=\"%s\" defvalue=\"%s\" value=\"%s\" />" % (switch.tag,switch.mask,switch.defvalue,switch.value)
            cfgxml+="</input><video>"
            cfgxml+="<target index=\"0\" view=\"%s\" rotate=\"%s\" backdrops=\"%s\" overlays=\"%s\" bezels=\"%s\" zoom=\"%s\" />" % (game.view, game.rotate, game.backdrops, game.overlays, game.bezels, game.zoom)
            cfgxml+="</video></system></mameconfig>"
            cfg = open(path.join(self._MAME_CONFIG_PATH, "%s.cfg" % game.romset), "w")
            cfg.write(cfgxml)
            cfg.close()
            command = self._MAME_EXE_PATH
            for key in self._MAME_PARAMS.keys():
                command += " %s %s " % (key, self._MAME_PARAMS[key])
            command+=game.romset
            command = "System.Exec(\"%s\")" % command.replace("\"", "\\\"")
            executebuiltin(command)
        else:
            if dialog.yesno(self.__language__(30701), self.__language__(30702), self.__language__(30703)):MameImport(self)

    def _gameSettings(self, romset_id):
        __fakesettings__ = Addon(self.SETTINGS_PLUGIN_ID)
	SETTINGS_PLUGIN_XML_TEMPLATE = path.join(__fakesettings__.getAddonInfo("path"), "resources", "settings.xml")
	SETTINGS_PLUGIN_XML_DOCUMENT = translatePath(path.join(__fakesettings__.getAddonInfo("profile"), "settings.xml"))
        game = GameItem(self._db, id=romset_id)
        rotate_by_name = {self.__language__(30916):0,self.__language__(30917):90,self.__language__(30918):180,self.__language__(30919):270}
        rotate_by_value = {0:self.__language__(30916),90:self.__language__(30917),180:self.__language__(30918),720:self.__language__(30919)}
        view_by_name = {self.__language__(30921):0,self.__language__(30922):1,self.__language__(30923):2,self.__language__(30924):3}
        view_by_value = {0:self.__language__(30921),1:self.__language__(30922),2:self.__language__(30923),2:self.__language__(30924)}
        bool_by_name = {"false":0, "true":1}
        bool_by_value = {0:"false", 1:"true"}

        settings_xml ="<settings>"

        settings_xml +="<category label=\"%s\">" % self.__language__(30914)
        settings_xml +="<setting label=\"%s\" type=\"labelenum\" id=\"display_rotate\" values=\"%s|%s|%s|%s\" default=\"%s\"/>" % \
            (self.__language__(30915), self.__language__(30916), self.__language__(30917), self.__language__(30918), self.__language__(30919), view_by_value[game.view])
        settings_xml +="<setting label=\"%s\" type=\"labelenum\" id=\"display_view\" values=\"%s|%s|%s|%s\" default=\"%s\"/>" % \
            (self.__language__(30920), self.__language__(30921), self.__language__(30922), self.__language__(30923), self.__language__(30924), rotate_by_value[game.rotate])
        settings_xml +="<setting label=\"%s\" type=\"bool\" id=\"display_backdrops\" default=\"%s\"/>" % (self.__language__(30925), bool_by_value[game.backdrops])
        settings_xml +="<setting label=\"%s\" type=\"bool\" id=\"display_overlays\" default=\"%s\"/>" % (self.__language__(30926), bool_by_value[game.overlays])
        settings_xml +="<setting label=\"%s\" type=\"bool\" id=\"display_bezels\" default=\"%s\"/>" % (self.__language__(30927), bool_by_value[game.bezels])
        settings_xml +="<setting label=\"%s\" type=\"bool\" id=\"display_zoom\" default=\"%s\"/>" % (self.__language__(30928), bool_by_value[game.zoom])
        settings_xml +="</category>"
        switches = self._db.getList("Dipswitches", ["id"], {"romset_id=":romset_id})

        if len(game.biossets):
            values = ""
            for biosset in game.biossets:
                if game.biosset==biosset.name:default = biosset.description
                values+="|%s" % biosset.description
            settings_xml +="<category label=\"%s\">" % self.__language__(30937)
            settings_xml +="<setting label=\"%s\" type=\"labelenum\" id=\"biosset\" values=\"%s\" default=\"%s\"/>" % \
                (self.__language__(30938), values[1:], default)
            settings_xml +="</category>"

        settings_xml +="<category label=\"%s\">" % self.__language__(30801)
        for switch in switches:
            switch = DIPSwitch(self._db, id=switch["id"])
            values = ""
            for value in switch.values_by_value:
                values+="|%s" % value
            if values=="|On|Off" or values=="|Yes|No":
                if switch.values_by_name[str(switch.value)]=="On" or switch.values_by_name[str(switch.value)]=="Yes":
                    default="true"
                else:
                    default="false"
                settings_xml += "<setting label=\"%s\" type=\"bool\" id=\"S%s\" default=\"%s\"/>" % (switch.name, switch.id, default)
            else:
                settings_xml += "<setting label=\"%s\" type=\"labelenum\" id=\"S%s\" default=\"%s\"  values=\"%s\"/>" % (switch.name, switch.id, switch.values_by_name[str(switch.value)], values[1:])
        settings_xml+="</category>"
        settings_xml+="</settings>"
        settings_xml_file = open(SETTINGS_PLUGIN_XML_TEMPLATE, "w")
        settings_xml_file.write(settings_xml.encode('utf8'))
        settings_xml_file.close()
        __fakesettings__.openSettings()
        if path.exists(SETTINGS_PLUGIN_XML_DOCUMENT):
            src = open(SETTINGS_PLUGIN_XML_DOCUMENT, "r")
            xml = src.read()
            src.close()
            xml = re.sub("\r|\t|\n", "", xml)
            settings = XMLHelper().getNodes(xml, "setting")
            for setting in settings:
                if XMLHelper().getAttribute(setting, "setting", "id")=="display_view":
                    game.view = view_by_name[XMLHelper().getAttribute(setting, "setting", "value")]
                elif XMLHelper().getAttribute(setting, "setting", "id")=="display_rotate":
                    game.rotate = rotate_by_name[XMLHelper().getAttribute(setting, "setting", "value")]
                elif XMLHelper().getAttribute(setting, "setting", "id")=="display_backdrops":
                    game.backdrops = bool_by_name[XMLHelper().getAttribute(setting, "setting", "value")]
                elif XMLHelper().getAttribute(setting, "setting", "id")=="display_overlays":
                    game.overlays = bool_by_name[XMLHelper().getAttribute(setting, "setting", "value")]
                elif XMLHelper().getAttribute(setting, "setting", "id")=="display_bezels":
                    game.bezels = bool_by_name[XMLHelper().getAttribute(setting, "setting", "value")]
                elif XMLHelper().getAttribute(setting, "setting", "id")=="display_zoom":
                    game.zoom = bool_by_name[XMLHelper().getAttribute(setting, "setting", "value")]
                elif XMLHelper().getAttribute(setting, "setting", "id")=="biosset":
                    game.biosset = BiosSet(self._db).getByDescription(XMLHelper().getAttribute(setting, "setting", "value")).name
                else:
                    switch = DIPSwitch(self._db, id=XMLHelper().getAttribute(setting, "setting", "id")[1:])
                    value = XMLHelper().getAttribute(setting, "setting", "value")
                    if value=="true":
                        try:
                            switch.value = switch.values_by_value["On"]
                        except KeyError:
                         switch.value = switch.values_by_value["Yes"]
                    elif value=="false":
                        try:
                            switch.value = switch.values_by_value["Off"]
                        except KeyError:
                            switch.value = switch.values_by_value["No"]
                    else:
                        switch.value=switch.values_by_value[XMLHelper().getAttribute(setting, "setting", "value")]
                    switch.writeDB()
                game.writeDB()
                self._db.commit()
            remove(SETTINGS_PLUGIN_XML_DOCUMENT)
        remove(SETTINGS_PLUGIN_XML_TEMPLATE)

    def _thumbNails(self):
        if self._MAME_TITLES_PATH or self._ONLINE_TITLES:
            progress = DialogProgress()
            progress.create(self.__language__(30615))
            if self._ROMSET_TITLES:
                files = self._db.runQuery("SELECT romset FROM Games WHERE have")
            else:
                files = self._db.runQuery("SELECT romset FROM Games")
            count = len(files)
            step = count/20
            index = 0
            for file in files:
                romset = file["romset"]
                if progress.iscanceled():
		    break
                index += 1
                if self._MAME_TITLES_PATH:
                    filename = path.join(self._MAME_TITLES_PATH, "%s.png" % romset)
                    if self._CACHE_TITLES:
                        cachefile = path.join(self._MAME_CACHE_PATH, "%s.png" % romset)
                    if not path.exists(cachefile):
                        if path.exists(filename):
                            copyfile(filename, cachefile)
                            filename = cachefile
                if self._ONLINE_TITLES:
                    filename = path.join(self._MAME_CACHE_PATH, "%s.png" % romset)
                    if self._HIRES_TITLES:res="hi"
                    else:res="lo"
                    if not path.exists(filename):
                        urlcleanup()
                        urlretrieve("https://www.otaku-realm.net/xbmame/%s/%s.png" % (res, romset), filename)
                        progress.update(int((float(index)/float(count)) * 100), self.__language__(30616), self.__language__(30617) % romset, self.__language__(30618) % (index, count))
                if index % step == 0:
                    progress.update(int((float(index)/float(count)) * 100), self.__language__(30616), self.__language__(30617) % romset, self.__language__(30618) % (index, count))
            progress.close()

    def _haveList(self):
        progress = DialogProgress()
        progress.create(self.__language__(30611))
        files = listdir(self._MAME_ROM_PATH)
        count = len(files)
        step = count/20
        index = 0
        for file in files:
            if progress.iscanceled(): break
            index += 1
            romset = file.replace(".zip", "").replace(".rar", "").replace(".7z","")
            if index % step == 0:
                progress.update(int((float(index)/float(count)) * 100), self.__language__(30612), self.__language__(30613) % romset, self.__language__(30614) % (index, count))
            self._db.execute("UPDATE Games SET have=1 WHERE romset=?", (romset,))
        self._db.commit()
        progress.close()