fixed conflicts with master
authorMax Usachev <maxusachev@gmail.com>
Tue, 22 Jun 2010 12:19:02 +0000 (15:19 +0300)
committerMax Usachev <maxusachev@gmail.com>
Tue, 22 Jun 2010 12:19:02 +0000 (15:19 +0300)
1  2 
controller.py
database/SQLite.py

diff --combined controller.py
@@@ -3,14 -3,14 +3,14 @@@ Meabook controller clas
  """
  
  from meabook.constants import *
 -import gettext
 -
 -_ = gettext.gettext
 +from meabook.caller import PhoneCaller
 +from gettext import gettext as _
  
  
  class MeabookController:
      def __init__(self, model, view_class, renderer_class, config):
          self.config = config
 +        self.caller = PhoneCaller()
          self.model = model
          self.view = view_class(self, renderer_class(), self.config)
          self.view.start()
          self.config.save()
          self.model.close()
  
 +    def call(self, number):
 +        """Make a phone call."""
 +
 +        self.caller.call(number)
 +
      def get_items(self, parent=0):
          """Gets from model items with selected level."""
  
          folders_list = list(self.get_all_folders(parent))
          files_list = [(fields['cn'], internal_name, 'f') for internal_name, \
-             fields in self.model.get_files(['cn'], parent).items()]
+             fields in self.model._get_files(['cn'], parent).items()]
          return folders_list + files_list
  
      def get_item(self, _id):
          return [(name, internal_name, 'd') for name, internal_name in \
              self.model.get_folders()]
  
-     def get_all_files(self):
-         """Gets all peoples."""
+     #def get_all_files(self):
+     #    """Gets all peoples."""
  
-         # FIXME: read field names from Config
-         files_dict = self.model.get_files(['cn'])
-         return [(files_dict[internal_name]['cn'], internal_name, TYPE_FILE) \
-             for internal_name in files_dict]
+     #    # FIXME: read field names from Config
+     #    files_dict = self.model.get_files(['cn'])
+     #    return [(files_dict[internal_name]['cn'], internal_name, TYPE_FILE) \
+     #        for internal_name in files_dict]
  
 -    def get_all_files_by_pattern(self, pattern, separated=False):
 +    def get_files_by_pattern(self, pattern, separated=False):
          """Gets all peoples matched pattern."""
  
          if not separated:
              return [(name, internal_name, TYPE_FILE) for internal_name, name \
                  in self.model.get_files_by_pattern(pattern)]
          else:
-             files_dict = self.model.get_files(['cn', 'o', 'ou'], parent=0, \
-                 pattern=pattern)
-             return [("%s" % files_dict[iname]['cn'], "%s / %s" % \
-                 (files_dict[iname]['o'], files_dict[iname]['ou']), \
-                 iname, TYPE_FILE) for iname in files_dict]
+             files_dict = self.model._get_files(['cn', 'o', 'ou'], 'cn', pattern, True)
+             return [("%s" % files_dict[internal_name]['cn'], "%s / %s" % (
+                 files_dict[internal_name]['o'], files_dict[internal_name]['ou']), \
+                 internal_name, TYPE_FILE) for internal_name in files_dict]
  
      def get_fields(self):
          """Returns all exists fields from model."""
  
          return self.model.get_fields()
  
 +    def get_localized_fields(self):
 +        """Returns dict with original and localized filed names."""
 +
 +        return dict([(_(field).decode('utf-8'), field) for field in \
 +            self.model.get_fields()])
 +
      def show_about_dialog(self):
          """Shows view About Dialog."""
  
  
          self.view.create_configuration_dialog(self, self.config)
  
 +    def show_fields_configuration_dialog(self, parent):
 +        """Shows FieldsConfigurationDialog."""
 +
 +        selected_fields = self.view.create_fields_configuration_dialog( \
 +            self.get_localized_fields(), self.config.get_fields(), parent)
 +        if selected_fields is not None:
 +            self.config.set_fields(selected_fields)
 +
 +    def show_fields_order_configuration_dialog(self):
 +        """Shows FieldsOrderConfigurationDialog."""
 +
 +        selected_fields = self.view.create_fields_order_configuration_dialog( \
 +            self.get_localized_fields(), self.config.get_order())
 +        if selected_fields is not None:
 +            self.config.set_order(selected_fields)
 +
      def show_search_dialog(self):
          """Shows view Search Dialog."""
  
diff --combined database/SQLite.py
@@@ -136,6 -136,7 +136,7 @@@ class SQLite
          # update RELATION table
          execute("INSERT INTO relation values(?,?)", (_id, child_id))
  
+     
      def get_folders(self, parent=None):
          """
          Returns list of all folders (items with folders and files)
          else:
              return self.conn.execute("SELECT DISTINCT name, id FROM struct \
                  WHERE parent=? ORDER BY name ASC", (parent,)).fetchall()
+     
+     def _get_files(self, fields, parent=0):
+         
+         items_dict = {}
+         execute = self.conn.execute
+         fields = dict(execute("SELECT id, name FROM fields WHERE name IN (%s)" \
+             % ','.join('%r' % (field,) for field in fields)).fetchall())
+         """ 
+         query = "SELECT id, field_id, value FROM data \
+             left join relation on relation.data_id=data.id \
+             where relation.struct_id=? and field_id in (%s)"
+         """ 
+         query = "select id, field_id, value from data where id in (select data_id from relation where struct_id=?) and field_id in (%s)"
+         
+         data = execute(query % ','.join('%r' % f for f in fields.keys()), (parent,)).fetchall()
+                 
+         for id, field_id, value in data:
+             if not items_dict.has_key(id):
+                 items_dict[id] = {}
+             items_dict[id][fields[int(field_id)]] = value
+         return items_dict
  
+     
      def get_files(self, fields, parent=0, pattern=''):
          """Returns list of all files from DATA table."""
  
          fields = execute("SELECT id, name FROM fields WHERE name IN (%s)" \
              % ','.join('%r' % (field,) for field in fields)).fetchall()
          if parent == 0: # get all files
 +            field_id = execute("SELECT id FROM fields WHERE name=?", \
 +                ('cn',)).fetchone()[0]
              #data_ids = [_id[0] for _id in execute("SELECT DISTINCT id FROM \
              #    data").fetchall()]
              data_ids = [_id[0] for _id in execute("SELECT DISTINCT id FROM \
 -                data WHERE value LIKE '%s%%' LIMIT 50" % pattern.capitalize()).fetchall()]
 +                data WHERE value LIKE '%s%%' AND field_id=? LIMIT 50" % pattern.capitalize(), (field_id,)).fetchall()]
          else: # get files for selected parent
              data_ids = [_id[0] for _id in execute("SELECT data_id FROM \
                  relation WHERE struct_id=?", (parent,)).fetchall()]
                  items_dict[data_id][field_name] = field_value
          return items_dict
  
+     def _get_files_by_pattern(self, fields, key='cn', pattern='', search_from_start=False):
+         """Returns list of all files from DATA table."""
+         items_dict = {}
+         if key not in fields:
+             fields = fields + (key,)
+         execute = self.conn.execute
+         fields = dict(execute("SELECT id, name FROM fields WHERE name IN (%s)" \
+             % ','.join('%r' % (field,) for field in fields)).fetchall())
+         key_id = 1 
+         for k, val in fields.items():
+             if val == key:
+                 key_id = k
+                 break
+         if search_from_start:
+             s = '%s%%' % pattern.capitalize()
+         else:
+             s = '%%%s%%' % pattern
+         data = execute("SELECT id, field_id, value FROM data WHERE id in \
+             (select id from data where value LIKE '%s' and field_id=? LIMIT 50) \
+             and field_id in (%s)" % (s, ','.join('%r' % f for f in fields.keys())), (key_id,)).fetchall()
+         
+         for id, field_id, value in data:
+             if not items_dict.has_key(id):
+                 items_dict[id] = {}
+             items_dict[id][fields[int(field_id)]] = value
+         return items_dict
      def get_files_by_pattern(self, pattern):
          """Returns list of all files, matched pattern string."""
  
  
          execute = self.conn.execute
          entry_dict = {}
+         entry_dict = dict(execute("select fields.name, value from data \
+             left join fields on fields.id=data.field_id \
+             where data.id=?", (_id,)).fetchall())
+         sql_res = execute('select photo from photo where data_id=?', \
+             (_id,)).fetchone()
+         if sql_res is not None:
+             entry_dict['image'] = sql_res[0]
+         return entry_dict
+     def _get_entry(self, _id):
+         """Returns full entry by it id."""
+         execute = self.conn.execute
+         entry_dict = {}
          for field_id, value in execute("SELECT field_id, value FROM data WHERE \
              id=?", (_id,)).fetchall():
              field_name = execute("SELECT name FROM fields WHERE id=?", \
          if sql_res is not None:
              entry_dict['image'] = sql_res[0]
          return entry_dict
+ if __name__ == "__main__":
+     db = SQLite('/tmp')
+     #print db.get_files(('cn', 'o', 'ou'), 0)
+     print db._get_files_by_pattern(('cn', 'o', 'ou'), 'cn', 'Ра', True)