From: Alexandr Popov Date: Fri, 27 Mar 2009 19:17:42 +0000 (+0300) Subject: clean workdir X-Git-Url: https://vcs.maemo.org/git/?a=commitdiff_plain;h=1ca9f3a40f04f4246dd6a1375f598f499ae2f392;p=findit clean workdir --- diff --git a/src/__init__.py b/src/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/cli.py b/src/cli.py deleted file mode 100755 index 3f88185..0000000 --- a/src/cli.py +++ /dev/null @@ -1,14 +0,0 @@ - -#!/usr/bin/env python -# -*-coding: utf-8 -*- -# vim: sw=4 ts=4 expandtab ai -# pylint: disable-msg=C0301 - -class Cli(object): - - def __init__(self): - pass - - def show(self, fproperties): - path, size = fproperties - print "%12g %s" % (size/1024./1024., path) \ No newline at end of file diff --git a/src/configure.py b/src/configure.py deleted file mode 100755 index 086fc41..0000000 --- a/src/configure.py +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env python -# -*-coding: utf-8 -*- -# vim: sw=4 ts=4 expandtab ai -# pylint: disable-msg=C0301 - -"""Its configuration module for FindIT""" - -class Configure(object): - def load(self, config_file): - # Здесь планируется загрузка конфига из файла - пока так присваивается - self.default_start_dir = '/home/' - self.default_count = 10 - - def get(self, param): - return self.__getattribute__(param) - - def __init__(self): - config_file='findit.cfg' - self.load(config_file) \ No newline at end of file diff --git a/src/findit.py b/src/findit.py deleted file mode 100755 index c623ebf..0000000 --- a/src/findit.py +++ /dev/null @@ -1,351 +0,0 @@ -#!/usr/bin/env python -# -*-coding: utf-8 -*- -# vim: sw=4 ts=4 expandtab ai -# pylint: disable-msg=C0301 - -"""findIT: Gui prorgram to find various information. - At the moment it only finds largest files -""" - -import gtk -import gobject -import pango -from os import walk -from os.path import join, abspath, normcase, basename, \ - isdir, getsize, getatime, getmtime, expanduser -from heapq import nlargest -import gettext -import time -from sys import platform - -try: - import hildon - HILDON = True -except ImportError: - HILDON = False - -try: - # Подразумевается, что ru/LC_MESSAGES/program.mo находится в текущем каталоге (sys.path[0]) - # Для стандартного /usr/share/locale писать gettext.translation('findit') - #langRU = gettext.translation('findit', sys.path[0], languages=['ru']) - LANGRU = gettext.translation('findit') - LANGRU.install() -except IOError: - # Закомментировать перед использованием pygettext - def _(text): - return text - - -### Common functions ########################################################### - -# Функция которая возвращает строку из числа и единиц для столбца "Размер"("Size") -def size_convert(size): - """Return string with file size in b or Kb or Mb or Gb or Tb.""" - for i, unit in enumerate(['%d b', '%.1f Kb', '%.2f Mb', '%.3f Gb', '%.4f Tb']): - if size < 1024**(i+1): - return unit % (size/1024.**i) - return '>1024 Tb' - -# Функция поставляющая размер файла и путь к нему -def filegetter(startdir, obj): - """Generator of file sizes and paths based on os.walk.""" - # Список игнорируемых каталогов: - ignore_dirs = ['/dev', '/proc', '/sys', '/mnt'] - # Проходим по всем папкам вглубь от заданного пути - for dirpath, dirnames, fnames in walk(startdir): - # Исключаем каталоги из поиска в соответствии со списком исключений - for ign_dir in ignore_dirs[:]: - for dirname in dirnames[:]: - if ign_dir == normcase(join(abspath(dirpath), dirname)): - dirnames.remove(dirname) - ignore_dirs.remove(ign_dir) - - for fname in fnames: - flpath = abspath(join(dirpath, fname)) - # Выводим текущий опрашиваемый файл в строку статуса - obj.currfilelbl.set_text(flpath) - # обновляем окно - gtk.main_iteration() - # Останавливаем цикл по нажатию кнопки стоп - if obj.stopit: - obj.stopit = False - raise StopIteration - # Проверяем можем ли мы определить размер файла - иначе пропускаем его - try: - # Возвращаем размер и полный путь файла - yield getsize(flpath), flpath - except OSError: - continue - -# Fullscreen -def toggle_fullscreen(obj): - """Switch fullscreen on/off.""" - if obj.fullscreen: - obj.window.unfullscreen() - else: - obj.window.fullscreen() - obj.fullscreen = not obj.fullscreen - -# Нажатие на кнопку клавиатуры -def on_key_press(obj, event): - """Key press callback.""" - # Toggle fullscreen on Maemo when hw key is pressed - if HILDON and event.keyval == gtk.keysyms.F6: - toggle_fullscreen(obj) - -### Properties dialog ########################################################## - -class PropertiesDialog(gtk.Dialog): - """File property dialog window.""" - - def __init__(self, app, path, size, bytesize): - """Create&show file properties dialog.""" - gtk.Dialog.__init__(self, _('File properties'), app, - buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK)) - self.set_wmclass('PropertiesDialog', 'FindIT') - self.set_resizable(False) - - # Достаем свойства выбранного файла - name = basename(path) - access = time.strftime('%x %X', time.localtime(getatime(path))) - modified = time.strftime('%x %X', time.localtime(getmtime(path))) - - # Таблица надписей - table = gtk.Table() - table.set_border_width(10) - table.set_col_spacings(10) - table.set_row_spacings(10) - - # Надписи (подпись: значение) - lbls = [(gtk.Label(_(name)), gtk.Label(value)) for name, value in - [('Name', name), ('Size', "%s (%d b)" % (size, bytesize)), - ('Opened', access), ('Modified', modified)]] - - # Упаковка надписей в таблицу и выравнивание - for i, lbl in enumerate(lbls): - name, value = lbl - table.attach(name, 0, 1, i, i+1) - table.attach(value, 1, 2, i, i+1) - name.set_alignment(1, 0.5) - value.set_alignment(0, 0.5) - - # Упаковка таблицы в vbox диалога - self.vbox.add(table) - self.show_all() - self.run() - self.destroy() - -### Main window ################################################################ - -class MainWindow(gtk.Window): - """Main window class.""" - - # Окно сообщения заданного типа с заданным текстом - def mess_window(self, mestype, content): - """Show popup message window.""" - dialog = gtk.MessageDialog(parent=self, flags=gtk.DIALOG_MODAL, - type=mestype, buttons=gtk.BUTTONS_OK, - message_format=content) - dialog.set_wmclass('ErrorDialog', 'FindIT') - dialog.set_title( _('Error!') ) - dialog.run() - dialog.destroy() - - # Функция выполняющаяся при нажатии на кнопку "Показать" - def start_print(self, widget): - """Start file search. Button "Go" activate callback.""" - self.start_path = self.srch_p_entr.get_text() - # Проверяем правильное ли значение введено - if isdir(self.start_path): - self.butt_start.set_sensitive(False) - self.butt_stop.set_sensitive(True) - self.propertiesbtn.set_sensitive(False) - # Получаем значение количества файлов из SpinButton - self.fl_cnt = int( self.file_cnt.get_value() ) - # Очищаем список - self.treestore.clear() - self.treeview.columns_autosize() - # Получаем нужное количество самых больших файлов - for fsize, fpath in nlargest(self.fl_cnt, filegetter(self.start_path, self)): - # Возвращаем значения в treeview в таком порядке - путь, - # размер в Мб строкой и размер в байтах - # self.treestore.append(None, [fpath.replace(self.start_path,'', 1), - # size_convert(fsize), fsize]) - - # Выдает какую-то перманентную ошибку при присвоении значений treestore - - # кто увидит скажите - нужна статистика - try: - self.treestore.append(None, [fpath, size_convert(fsize), fsize]) - except SystemError: -# print 'error', fpath, size_convert(fsize), fsize - self.mess_window('error','Error in %s' % fpath) - self.butt_start.set_sensitive(True) - self.butt_stop.set_sensitive(False) - self.propertiesbtn.set_sensitive(True) - self.srch_p_entr.grab_focus() - else: - # Иначе выводим окошко с ошибкой - self.mess_window('error', _('Invalid directory') ) - - # Функция выполняющаяся при нажатии на кнопку "Стоп" - def stop_print(self, widget): - """Stop search. "Stop" button clicked callback.""" - self.stopit = True - - # Функция выполняющаяся при нажатии на кнопку "Свойства файла" - def show_properties_dialog(self, *args): - """Show property dialog window.""" - selection = self.treeview.get_selection() - (model, item) = selection.get_selected() - try: - path = model.get_value(item, 0) - size = model.get_value(item, 1) - bytesize = model.get_value(item, 2) - except (TypeError, ValueError): - self.mess_window('error', _('Please select file') ) - return - PropertiesDialog(self, path, size, bytesize) - - ### Window initialization ################################################## - - def __init__(self, win_width, win_height, st_path): - """Create MainWindow.""" - # Создаем новое окно - gtk.Window.__init__(self) - self.set_default_size(win_width, win_height) - self.set_border_width(4) - self.fullscreen = False - self.connect('delete_event', gtk.main_quit) - self.connect("key-press-event", on_key_press) - self.set_wmclass('MainWindow', 'FindIT') - - ######### Добавляем элементы ################ - # 1. Строка ввода каталога с которого начинать поиск - # переменная в которой храниться стартовый каталог = self.start_path - self.srch_p_entr = gtk.Entry() - self.start_path = st_path - self.srch_p_entr.set_text(self.start_path) - # Отключаем автокапитализацию(ввод первой буквы заглавной) на таблетке - if HILDON: - self.srch_p_entr.set_property("hildon-input-mode", 'full') - # Нажатие Enter в поле ввода - self.srch_p_entr.connect("activate", self.start_print) - - # 2. Кнопка "Обзор" - - # 3. Надпись1 "Количество отображаемых файлов:" - label1 = gtk.Label( _('Files quantity') ) - - # 4. Окошко ввода количества файлов, мин значение=1 макс=65536 по умолчанию 10 - # данные храняться в переменной self.fl_cnt - self.fl_cnt = 10 - if HILDON: - self.file_cnt = hildon.NumberEditor(1, 99) - self.file_cnt.set_value(self.fl_cnt) - else: - adj = gtk.Adjustment(self.fl_cnt, 1, 65536, 1, 5, 0) - self.file_cnt = gtk.SpinButton(adj, 0, 0) - - # 5.1 Кнопка "Показать" - self.butt_start = gtk.Button( _('Go') ) - self.butt_start.connect('released', self.start_print) - - # 5.2 Кнопка "Остановить" - self.butt_stop = gtk.Button( _('Stop') ) - self.butt_stop.set_sensitive(False) - self.butt_stop.connect('clicked', self.stop_print) - self.stopit = False - - # 5.3 Кнопка "Свойства файла" - self.propertiesbtn = gtk.Button( _('File properties') ) - self.propertiesbtn.connect('clicked', self.show_properties_dialog) - self.propertiesbtn.set_sensitive(False) - - # 6. Закладки - - # 6.1 Список файлов - scrollwind = gtk.ScrolledWindow() - scrollwind.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - - # Определяем переменную в которой будет храниться выводимый список - self.treestore = gtk.TreeStore(str, str, int) - self.treeview = gtk.TreeView(self.treestore) - # На таблетке не отображаються заголовки столбцов по умолчанию - - # след строка заставляет их отображаться принудительно - self.treeview.set_headers_visible(1) - self.treeview.connect('row-activated', self.show_properties_dialog) - - self.treestore.append(None, ['', '', 0]) - - # Создаем и настраиваем колонку с размером файла - size_col = gtk.TreeViewColumn( _('Size') ) - cell = gtk.CellRendererText() - cell.set_property('width', 90) - size_col.pack_start(cell, True) - size_col.add_attribute(cell, 'text', 1) - self.treeview.append_column(size_col) - # Создаем и настраиваем колонку с именем файла - path_col = gtk.TreeViewColumn( _('Path') ) - cell2 = gtk.CellRendererText() - path_col.pack_start(cell2, True) - path_col.add_attribute(cell2, 'text', 0) - self.treeview.append_column(path_col) - - # Добавляем сортировку для колонок - self.treeview.set_search_column(1) - path_col.set_sort_column_id(0) - size_col.set_sort_column_id(2) - - # 6.2 Надпись "Найти" - - # 6.3 Строка выводящая текущий осматриваемый файл - self.currfilelbl = gtk.Label() - self.currfilelbl.set_alignment(0, 0.5) - self.currfilelbl.set_ellipsize(pango.ELLIPSIZE_MIDDLE) - self.currfilelbl.set_padding(2, 2) - currfilefrm = gtk.Frame() - currfilefrm.add(self.currfilelbl) - - ######### Упаковываем элементы ################ - # Создаем основной вертикальный контейнер - main_vbox = gtk.VBox(False, 4) - - # Создаем вспомогательный горизонтальный контейнер для Надписи1, - # окошка ввода количества файлов и кнопки "Показать" - hbox1 = gtk.HBox(False, 5) - # Добавляем вышеперечисленные элементы во вспомогат. контейнер - hbox1.pack_start(label1, False, False, 5) - hbox1.pack_start(self.file_cnt, False, False, 0) - hbox1.pack_start(self.butt_start, True, True, 0) - hbox1.pack_start(self.butt_stop, True, True, 0) - hbox1.pack_start(self.propertiesbtn, True, True, 0) - - # Добавляем элементы в основной контейнер - main_vbox.pack_start(self.srch_p_entr, False, False, 0) - main_vbox.pack_start(hbox1, False, False, 0) - scrollwind.add(self.treeview) - main_vbox.pack_start(scrollwind, True, True, 0) - main_vbox.pack_start(currfilefrm, False, False, 0) - - self.add(main_vbox) - - def run(self): - """Show all widgets and run gtk.main().""" - self.show_all() - gtk.main() - - -### Main call ################################################################## -def main(): - """Main function.""" - gobject.set_application_name( _('FindIT') ) - - if platform == 'win32': - startpath = 'c:\\' - else: - startpath = expanduser('~') - - MainWindow(575, 345, startpath).run() - -if __name__ == '__main__': - main() diff --git a/src/gtk_ui.py b/src/gtk_ui.py deleted file mode 100644 index 376eff9..0000000 --- a/src/gtk_ui.py +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env python -# -*-coding: utf-8 -*- -# vim: sw=4 ts=4 expandtab ai -# pylint: disable-msg=C0301 - -"""findIT: Gui prorgram to find various information. - At the moment it only finds largest files -""" - -import gtk -import gobject -import gettext - -try: - LANGRU = gettext.translation('findit') - LANGRU.install() -except IOError: - def _(text): - return text - -### Main window ################################################################ - -class GtkWindow(gtk.Window): - """Main window class.""" - - ### Window initialization ################################################## - - def __init__(self, win_width, win_height, st_path): - """Create MainWindow.""" - # Создаем новое окно - gtk.Window.__init__(self) - self.set_default_size(win_width, win_height) - self.set_border_width(4) - self.fullscreen = False - self.connect('delete_event', gtk.main_quit) - self.set_wmclass('GtkWindow', 'FindIT') - - ######### Добавляем элементы ################ - # 1. Строка ввода каталога с которого начинать поиск - # переменная в которой храниться стартовый каталог = self.start_path - self.srch_p_entr = gtk.Entry() - self.start_path = st_path - self.srch_p_entr.set_text(self.start_path) - # Нажатие Enter в поле ввода - self.srch_p_entr.connect("activate", self.start_print) - - # 2. Кнопка "Обзор" - - # 3. Надпись1 "Количество отображаемых файлов:" - label1 = gtk.Label( _('Files quantity') ) - - # 4. Окошко ввода количества файлов, мин значение=1 макс=65536 по умолчанию 10 - # данные храняться в переменной self.fl_cnt - self.fl_cnt = 10 - adj = gtk.Adjustment(self.fl_cnt, 1, 65536, 1, 5, 0) - self.file_cnt = gtk.SpinButton(adj, 0, 0) - - # 5.1 Кнопка "Показать" - self.butt_start = gtk.Button( _('Go') ) - self.butt_start.connect('released', self.start_print) - - # 5.2 Кнопка "Остановить" - self.butt_stop = gtk.Button( _('Stop') ) - self.butt_stop.set_sensitive(False) - self.butt_stop.connect('clicked', self.stop_print) - self.stopit = False - - # 5.3 Кнопка "Свойства файла" - - # 6. Закладки - - # 6.1 Список файлов - scrollwind = gtk.ScrolledWindow() - scrollwind.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - - # Определяем переменную в которой будет храниться выводимый список - self.treestore = gtk.TreeStore(str, str, int) - self.treeview = gtk.TreeView(self.treestore) - # На таблетке не отображаються заголовки столбцов по умолчанию - - # след строка заставляет их отображаться принудительно - self.treeview.set_headers_visible(1) - - self.treestore.append(None, ['', '', 0]) - - # Создаем и настраиваем колонку с размером файла - size_col = gtk.TreeViewColumn( _('Size') ) - cell = gtk.CellRendererText() - cell.set_property('width', 90) - size_col.pack_start(cell, True) - size_col.add_attribute(cell, 'text', 1) - self.treeview.append_column(size_col) - # Создаем и настраиваем колонку с именем файла - path_col = gtk.TreeViewColumn( _('Path') ) - cell2 = gtk.CellRendererText() - path_col.pack_start(cell2, True) - path_col.add_attribute(cell2, 'text', 0) - self.treeview.append_column(path_col) - - # Добавляем сортировку для колонок - self.treeview.set_search_column(1) - path_col.set_sort_column_id(0) - size_col.set_sort_column_id(2) - - # 6.2 Надпись "Найти" - - # 6.3 Строка выводящая текущий осматриваемый файл - - ######### Упаковываем элементы ################ - # Создаем основной вертикальный контейнер - main_vbox = gtk.VBox(False, 4) - - # Создаем вспомогательный горизонтальный контейнер для Надписи1, - # окошка ввода количества файлов и кнопки "Показать" - hbox1 = gtk.HBox(False, 5) - # Добавляем вышеперечисленные элементы во вспомогат. контейнер - hbox1.pack_start(label1, False, False, 5) - hbox1.pack_start(self.file_cnt, False, False, 0) - hbox1.pack_start(self.butt_start, True, True, 0) - hbox1.pack_start(self.butt_stop, True, True, 0) - - # Добавляем элементы в основной контейнер - main_vbox.pack_start(self.srch_p_entr, False, False, 0) - main_vbox.pack_start(hbox1, False, False, 0) - scrollwind.add(self.treeview) - main_vbox.pack_start(scrollwind, True, True, 0) - - self.add(main_vbox) - - def run(self): - """Show all widgets and run gtk.main().""" - self.show_all() - gtk.main() - - # Окно сообщения заданного типа с заданным текстом - def mess_window(self, mestype, content): - """Show popup message window.""" - dialog = gtk.MessageDialog(parent=self, flags=gtk.DIALOG_MODAL, - type=mestype, buttons=gtk.BUTTONS_OK, - message_format=content) - dialog.set_wmclass('ErrorDialog', 'FindIT') - dialog.set_title( _('Error!') ) - dialog.run() - dialog.destroy() - - # Функция выполняющаяся при нажатии на кнопку "Показать" - def start_print(self, widget): - """Start file search. Button "Go" activate callback.""" - - # Функция выполняющаяся при нажатии на кнопку "Стоп" - def stop_print(self, widget): - """Stop search. "Stop" button clicked callback.""" - self.stopit = True - - def get_st_par(self): - self.start_path = self.srch_p_entr.get_text() - self.fl_cnt = int( self.file_cnt.get_value() ) - return self.start_path, self.fl_cnt - - def show(self): - pass - -### Main call ################################################################## -def main(): - """Main function.""" - gobject.set_application_name( _('FindIT') ) - - startpath = '/home/' - - GtkWindow(575, 345, startpath).run() - -if __name__ == '__main__': - main() diff --git a/src/main.py b/src/main.py deleted file mode 100755 index df33e0d..0000000 --- a/src/main.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python -# -*-coding: utf-8 -*- -# vim: sw=4 ts=4 expandtab ai -# pylint: disable-msg=C0301 - -from configure import Configure -config = Configure() - -# Как то выбираем ui - как это будет делаться пока не знаю -# поэтому просто присваиваю -current_ui = 'gtk' - -if current_ui is 'gtk': - from gtk_ui import GtkWindow - gtkui = GtkWindow(575, 345, config.get("default_start_dir")) - vvod = gtkui - output = gtkui - gtkui.run() - -elif current_ui is 'console': - from optparser import OptParser - vvod = OptParser() - from cli import Cli - output = Cli() - -# коментарии от Wall: -# получаем запрос от нашего объекта ввода. На этом уровне мы не знаем что за UI -# у нас и есть ли он вообще. Об этом знает наш объкт vvod -query = vvod.get_st_par() - -# Каким то макаром принимаем решение о объекте поиска -pass -# решили какой - подгружаем его -from searchfile import SearchFile -search = SearchFile(query, config) - -# коментарии от Wall: -# ищем и получаем результат, используя текущую конфигурацию -result = search.run() - -# коментарии от Wall: -# выводим результат. -result.show(output) diff --git a/src/optparser.py b/src/optparser.py deleted file mode 100755 index 293a3b8..0000000 --- a/src/optparser.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env python -# -*-coding: utf-8 -*- -# vim: sw=4 ts=4 expandtab ai -# pylint: disable-msg=C0301 - -import os -from optparse import OptionParser - -class OptParser(object): - - def __init__(self): - parser = OptionParser(usage="Usage: %prog -d -c", version="%prog 0.1.0") - # Парсим параметры ком строки - parser.add_option('--dir', '-d', dest='dir', type="string", \ - help="starting path for search" ) - parser.add_option('--count', '-c', metavar='COUNT',dest='cnt', type="int", \ - help="count of files for print") - parser.add_option('--config', '-C', metavar='CONFIG',dest='cfg', type="string", \ - help="config file") - (self.options, self.args) = parser.parse_args() - - # функция получения параметров из ком строки - def get(self): - return self.options - - def get_st_par(self): - return self.options.dir, self.options.cnt \ No newline at end of file diff --git a/src/resultlist.py b/src/resultlist.py deleted file mode 100755 index 6e20519..0000000 --- a/src/resultlist.py +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env python -# -*-coding: utf-8 -*- -# vim: sw=4 ts=4 expandtab ai -# pylint: disable-msg=C0301 - -class ResultList(object): - - def __init__(self): - self.rlist = [] - - def add(self, rproperties): - self.rlist.append(rproperties) - - def show(self, out_ui): - for rproperties in self.rlist: - out_ui.show(rproperties) diff --git a/src/searchfile.py b/src/searchfile.py deleted file mode 100755 index 3930c77..0000000 --- a/src/searchfile.py +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env python -# -*-coding: utf-8 -*- -# vim: sw=4 ts=4 expandtab ai -# pylint: disable-msg=C0301 - -class SearchFile(object): - - def __init__(self, vvod, config): - self.path, self.count = vvod - if not self.path: - self.path = config.get("default_start_dir") - if not self.count: - self.count = config.get("default_count") - - from resultlist import ResultList - self.result = ResultList() - - def filesorter(self, dir): - import os - # Проходим по всем папкам вглубь от заданного пути - for dirpath, dirname, names in os.walk(dir): - for name in names: - flpath = os.path.join(dirpath, name) - # Возвращаем размер и полный путь файла - yield (os.path.getsize(flpath), flpath) - - def run(self): - import heapq - for fsize, fpath in heapq.nlargest(self.count, self.filesorter(self.path)): - self.result.add((fpath, fsize)) - return self.result