OSDN Git Service

remove singleton function from table accessor
authorkei9 <kei9@users.sourceforge.jp>
Sat, 21 Dec 2013 10:12:18 +0000 (19:12 +0900)
committerkei9 <kei9@users.sourceforge.jp>
Sat, 21 Dec 2013 10:15:22 +0000 (19:15 +0900)
because when db_generator & db_accessor run simultaneously, encoding error occurs.

14 files changed:
AmuletToolsMH4.spec
amulettool.py
model/alchemysimulator.py
model/amulettable.py
model/db_accessor.py
model/seed1tenuntable.py
model/seed2inishietable.py
model/seed2skill2table.py
model/seed2thresholdtable.py
model/skillminmaxtable.py
model/skilltable.py
model/sufficienttable.py
readme.txt
view/constnumbers.py

index 1ee4bf0..14f09d4 100644 (file)
@@ -6,6 +6,7 @@ a = Analysis(['amulettool.py'],
              runtime_hooks=None)
 a.datas += [("view/mainframe.xrc", r"D:\Git\Publish\AmuletToolsMH4\view\mainframe.xrc", "DATA")]
 a.datas += [("view/gaugedialog.xrc", r"D:\Git\Publish\AmuletToolsMH4\view\gaugedialog.xrc", "DATA")]
+a.datas += [("view/memodialog.xrc", r"D:\Git\Publish\AmuletToolsMH4\view\memodialog.xrc", "DATA")]
 pyz = PYZ(a.pure)
 exe = EXE(pyz,
           a.scripts,
index 6f2a06e..d4d850a 100644 (file)
@@ -102,12 +102,14 @@ class AmuletToolController(wx.App):
         # access to db
         try:
             self.db_accessor = model.DataBaseAccessor(model.DB_FILE_NAME)
+            #self.db_accessor = model.DataBaseAccessor(u"test.sqlite3")
         except sqlite3.Error as e:
             self._show_error_dialog(u"データベースが壊れています")
 
         self._minmax_dict = self.db_accessor.get_minmax_dict()
         self._amulet_names = self.db_accessor.get_id_sorted_amulet_names()
         self._skill_names = self.db_accessor.get_id_sorted_skill_names()
+        #print self._minmax_dict
 
     def _init_notebook_seed1(self):
         u""" Seed1特定タブのviewの初期化 """
index 2a312f3..8ff4029 100644 (file)
@@ -14,11 +14,11 @@ from skillminmaxtable import SkillMinMaxTableAccessor
 from skilltable import SkillTableAccessor
 from amulettable import AmuletTableAccessor
 from sufficienttable import SufficientTableAccessor
-import singleton
+#import singleton
 
 class AlchemySimulator(object):
     u""" 特定Seed1,2から生じる錬金結果を模擬するクラス """
-    __metaclass__ = singleton.Singleton
+    #__metaclass__ = singleton.Singleton
     def __init__(self, db_cursor):
         u""" 錬金結果の模擬クラス """
         self._cursor = db_cursor
index a1a3634..138bdfd 100644 (file)
@@ -8,7 +8,7 @@ IDとお守り名の組み合わせテーブルの作成・アクセスをする
 import sqlite3
 import csv
 
-import singleton
+#import singleton
 
 # for amulet table
 NAME = u"amulet_table"
@@ -52,27 +52,29 @@ class AmuletTableGenerator(object):
 
 
 class AmuletTableAccessor(object):
-    u""" ã\82¹ã\82­ã\83«IDã\81¨ã\82¹ã\82­ã\83«名の組み合わせテーブルへのアクセス用クラス """
-    __metaclass__ = singleton.Singleton
+    u""" ã\81\8aå®\88ã\82\8aIDã\81¨ã\81\8aå®\88ã\82\8a名の組み合わせテーブルへのアクセス用クラス """
+    #__metaclass__ = singleton.Singleton
     def __init__(self, db_cursor):
         u""" db_cursor: cursor of sqlite3 database """
         self._cursor = db_cursor
         self._id2name_dict, self._name2id_dict = self._get_dict()
 
-    def _get_dict(self):
-        u""" ã\82¹ã\82­ã\83«IDã\81\8bã\82\89ã\82¹ã\82­ã\83«名への変換辞書を得る。
+    def _get_dict(self, unicodeing=False):
+        u""" ã\81\8aå®\88ã\82\8aIDã\81\8bã\82\89ã\81\8aå®\88ã\82\8a名への変換辞書を得る。
         return (id2name_dict, name2id_dict)"""
         self._cursor.execute(SELECT_ALL_SQL)
         id2name_dict, name2id_dict = {}, {}
         for row in self._cursor.fetchall(): #(id, name)
-            skill_id, skill_name = row[0], row[1]
-            id2name_dict[skill_id] = skill_name
-            name2id_dict[skill_name] = skill_id
+            amulet_id, amulet_name = row[0], row[1]
+            #if not isinstance(amulet_name, unicode):
+            #    amulet_name = unicode(amulet_name, u"utf-8")
+            id2name_dict[amulet_id] = amulet_name
+            name2id_dict[amulet_name] = amulet_id
 
         return (id2name_dict, name2id_dict)
 
     def get_dict(self, copied=False):
-        u""" ã\82¹ã\82­ã\83«IDã\81\8bã\82\89ã\82¹ã\82­ã\83«名への変換辞書を得る。
+        u""" ã\81\8aå®\88ã\82\8aIDã\81\8bã\82\89ã\81\8aå®\88ã\82\8a名への変換辞書を得る。
         return (id2name_dict, name2id_dict)"""
         if copied is True:
             return (self._id2name_dict.copy(), self._name2id_dict.copy())
index 205240c..277c7f7 100644 (file)
@@ -26,6 +26,8 @@ class DataBaseAccessor(object):
         u""" db_name is database name to access """
         self._db_name = db_name
         self._connect = sqlite3.connect(self._db_name)
+        #self._connect.text_factory = unicode
+        #self._connect.text_factory = str
         self._cursor = self._connect.cursor()
 
         self._acc_skill = SkillTableAccessor(self._cursor)
index ef74218..d2af4a6 100644 (file)
@@ -11,7 +11,7 @@ import csv
 import mh4constnumbers
 import skilltable
 import amulettable
-import singleton
+#import singleton
 
 # for seed1 table by tenun
 NAME = u"seed1_table_{alchemy_type}"
@@ -230,7 +230,7 @@ class Seed1TenunTableGenerator(object):
 
 class Seed1TenunTableAccessor(object):
     u""" スキルIDとスキル名の組み合わせテーブルへのアクセス用クラス """
-    __metaclass__ = singleton.Singleton
+    #__metaclass__ = singleton.Singleton
     def __init__(self, db_cursor):
         u""" db_cursor: cursor of sqlite3 database """
         self._cursor = db_cursor
index b21475b..c13b2e5 100644 (file)
@@ -71,6 +71,8 @@ class Seed2InishieTableGenerator(object):
         csv_reader.next()   # skip header row
         for row in csv_reader:  # (seed2, skill_name, th1, th2)
             skill_name = row[1].strip()
+            #if not isinstance(skill_name, unicode):
+            #    skill_name = unicode(skill_name, u"utf-8")
             skill_id = skill_name2id[skill_name]
             seed2, th1, th2 = int(row[0].strip()), int(row[2].strip()), int(row[3].strip())
             db_cursor.execute(INSERT_SQL, (seed2, skill_id, th1, th2))
index 4e01686..5608a9d 100644 (file)
@@ -10,7 +10,7 @@ import csv
 
 import amulettable
 import skilltable
-import singleton
+#import singleton
 
 # for Seed2 to skill2
 u""" SEED2から各お守りの第2スキルへのテーブル """
@@ -132,6 +132,8 @@ class Seed2Skill2TableGenerator(object):
         csv_reader.next()   # skip header row
         for row in csv_reader:
             amulet_name = row[0].strip()
+            #if not isinstance(amulet_name, unicode):
+            #    amulet_name = unicode(amulet_name, u"utf-8")
             skill2_file = row[1].strip()
             amulet_id = amu_name2id[amulet_name]
             table_name = NAME.format(amulet_id=amulet_id)
@@ -159,16 +161,21 @@ class Seed2Skill2TableGenerator(object):
             insert_values = {}
 
             reader.next()   # skip header row
-            for row in reader:  # (skill_name, min1, max1)
+            for row in reader:
                 seed2 = int(row[0].strip())
-                skill_ids = [skill_name2id[x.strip()] for x in row[1:]]
+                skill_ids = []
+                for skill_name in row[1:]:
+                    skill_name = skill_name.strip()
+                    #if not isinstance(skill_name, unicode):
+                    #    skill_name = unicode(skill_name, u"utf-8")
+                    skill_ids.append(skill_name2id[skill_name])
 
                 sql = INSERT_SQL.format(table_name=table_name)
                 db_cursor.execute(sql, tuple([seed2] + skill_ids))
 
 class Seed2Skill2TableAccessor(object):
     u""" Seed2とスキル名の組み合わせテーブルへのアクセス用クラス """
-    __metaclass__ = singleton.Singleton
+    #__metaclass__ = singleton.Singleton
     def __init__(self, db_cursor):
         u""" db_cursor: cursor of sqlite3 database """
         self._cursor = db_cursor
@@ -207,10 +214,14 @@ class Seed2Skill2TableAccessor(object):
             where_sql = " where " + " and ".join(where_list)
             sql = SELECT_SEED2_SQL.format(table_name=table_name) + where_sql
             self._cursor.execute(sql)
-            if len(result_set) == 0:
-                result_set = set([x[0] for x in self._cursor.fetchall()])
+            seed2s = set([x[0] for x in self._cursor.fetchall()])
+            if len(seed2s) == 0:
+                continue
+
+            if len(result_set) != 0:
+                result_set &= seed2s
             else:
-                result_set = result_set & set([x[0] for x in self._cursor.fetchall()])
+                result_set = seed2s
 
         return result_set
 
index 8fab165..e4ff0a1 100644 (file)
@@ -8,7 +8,7 @@ Seed2と判定値の組み合わせテーブルの作成・アクセスをする
 import sqlite3
 import csv
 
-import singleton
+#import singleton
 
 # for seed2 to threshold1
 u""" SEED2から判定値1へのテーブル """
@@ -110,7 +110,7 @@ class Seed2ThresholdTableGenerator(object):
 
 class Seed2ThresholdTableAccessor(object):
     u""" Seed2と判定値の組み合わせテーブルへのアクセス用クラス """
-    __metaclass__ = singleton.Singleton
+    #__metaclass__ = singleton.Singleton
     def __init__(self, db_cursor):
         u""" db_cursor: cursor of sqlite3 database """
         self._cursor = db_cursor
index d613dd0..0d84e56 100644 (file)
@@ -10,7 +10,7 @@ import csv
 
 import skilltable
 import amulettable
-import singleton
+#import singleton
 
 # for minmax table
 MASTER_NAME = u"skill_minmax_master"
@@ -96,6 +96,8 @@ class SkillMinMaxTableGenerator(object):
         csv_reader.next()   # skip header row
         for row in csv_reader:
             amulet_name = row[0].strip()
+            #if not isinstance(amulet_name, unicode):
+            #    amulet_name = unicode(amulet_name, u"utf-8")
             skill1_file, skill2_file = row[1].strip(), row[2].strip()
             amulet_id = amu_name2id[amulet_name]
             table_name = NAME.format(amulet_id=amulet_id)
@@ -128,6 +130,8 @@ class SkillMinMaxTableGenerator(object):
             skill1_reader.next()   # skip header row
             for row in skill1_reader:  # (skill_name, min1, max1)
                 skill_name = row[0].strip()
+                #if not isinstance(skill_name, unicode):
+                #    skill_name = unicode(skill_name, u"utf-8")
                 min1, max1 = int(row[1].strip()), int(row[2].strip())
                 skill_id = skill_name2id[skill_name]
                 insert_values[skill_id] = (skill_id, min1, max1, 0, 0)
@@ -136,6 +140,8 @@ class SkillMinMaxTableGenerator(object):
                 skill2_reader.next()   # skip header row
                 for row in skill2_reader:  # (skill_name, min2, max2)
                     skill_name = row[0].strip()
+                    #if not isinstance(skill_name, unicode):
+                    #    skill_name = unicode(skill_name, u"utf-8")
                     min2, max2 = int(row[1].strip()), int(row[2].strip())
                     skill_id = skill_name2id[skill_name]
                     if skill_id in insert_values:
@@ -149,7 +155,7 @@ class SkillMinMaxTableGenerator(object):
 
 class SkillMinMaxTableAccessor(object):
     u""" お守りID、スキルIDから取りうるスキルの最大値への組み合わせテーブルのアクセスクラス"""
-    __metaclass__ = singleton.Singleton
+    #__metaclass__ = singleton.Singleton
     def __init__(self, db_cursor):
         u""" db_cursor: cursor of sqlite3 database """
         self._cursor = db_cursor
index c3122ff..56abb0d 100644 (file)
@@ -8,7 +8,7 @@ u"""
 import sqlite3
 import csv
 
-import singleton
+#import singleton
 
 # for skill table
 NAME = u"skill_table"
@@ -60,7 +60,7 @@ class SkillTableGenerator(object):
 
 class SkillTableAccessor(object):
     u""" スキルIDとスキル名の組み合わせテーブルへのアクセス用クラス """
-    __metaclass__ = singleton.Singleton
+    #__metaclass__ = singleton.Singleton
     def __init__(self, db_cursor):
         u""" db_cursor: cursor of sqlite3 database """
         self._cursor = db_cursor
@@ -73,6 +73,8 @@ class SkillTableAccessor(object):
         id2name_dict, name2id_dict = {}, {}
         for row in self._cursor.fetchall(): #(id, name)
             skill_id, skill_name = row[0], row[1]
+            #if not isinstance(skill_name, unicode):
+            #    skill_name = unicode(skill_name, u"utf-8")
             id2name_dict[skill_id] = skill_name
             name2id_dict[skill_name] = skill_id
 
index 667c798..5191673 100644 (file)
@@ -9,7 +9,7 @@ import sqlite3
 import csv
 
 import amulettable
-import singleton
+#import singleton
 
 # for sufficient value for slots
 MASTER_NAME = u"sufficient_master"
@@ -78,6 +78,8 @@ class SufficientTableGenerator(object):
         csv_reader.next()   # skip header row
         for row in csv_reader: # (omamori_name, filename of sufficient values)
             amulet_name = row[0].strip()
+            #if not isinstance(amulet_name, unicode):
+            #    amulet_name = unicode(amulet_name, u"utf-8")
             suff_file = row[1].strip()
             amulet_id = amu_name2id[amulet_name]
             table_name = NAME.format(amulet_id=amulet_id)
@@ -108,7 +110,7 @@ class SufficientTableGenerator(object):
 
 class SufficientTableAccessor(object):
     u"""充足値から判定値の組み合わせテーブルへのアクセスをするクラス"""
-    __metaclass__ = singleton.Singleton
+    #__metaclass__ = singleton.Singleton
     def __init__(self, db_cursor):
         u""" db_cursor: cursor of sqlite3 database """
         self._cursor = db_cursor
index 3dd90d9..5f96c3d 100644 (file)
@@ -2,7 +2,7 @@
 概要
 -------------------------------------------------
 ソフトウェア名: AmuletToolsMH4
-version: 0.3.0
+version: 0.3.1
 Copyright (C) 2013 key9
 
 Nintendo3DS用ソフトであるMomsterHunter4の
@@ -123,6 +123,9 @@ A. Seed表のセルを選択するのではなく、左端の列ラベルをク
 -------------------------------------------------
 更新情報
 -------------------------------------------------
+2013/12/21 version 0.3.1
+    0.3.0でDB生成終了時にアプリが落ちるバグの修正
+
 2013/12/21 version 0.3.0
     お守り検索ロジックの修正
     錬金シミュレーターの追加
index 1bc132b..10180d8 100644 (file)
@@ -125,7 +125,7 @@ XRC_MAIN_FRAME = u"mainframe.xrc"
 
 # for about
 NAME = u"Amulet Tools MH4"
-VERSION = u"0.3.0"
+VERSION = u"0.3.1"
 AUTHOR = u"kei9"
 COPYRIGHT = u"(C) 2013 kei9"
 DESCRIPTION = u"""MH4のお守り厳選用ツールです"""