]> git.phdru.name Git - m_librarian.git/commitdiff
Add option -C|--config file
authorOleg Broytman <phd@phdru.name>
Sat, 11 Jun 2016 00:41:55 +0000 (03:41 +0300)
committerOleg Broytman <phd@phdru.name>
Sat, 11 Jun 2016 00:56:12 +0000 (03:56 +0300)
Document configuration file. Test config

docs-ru/before_begin.rst
docs-ru/command_line.rst
docs/before_begin.rst
docs/command_line.rst
m_librarian/config.py
scripts/ml-import.py
scripts/ml-initdb.py
scripts/ml-search.py
tests/test_config.conf [new file with mode: 0644]
tests/test_config.py [new file with mode: 0755]

index 3af1db0bea51d38297bb18ab89369512923f83ee..213183fe8d522228f71521954e0c78bd8723a5ec 100644 (file)
@@ -44,6 +44,26 @@ m_Librarian пока не научился индексировать архив
 | http://home-lib.net/download/inpx/librusec_local_all.inpx
 
 
+Файл конфигурации
+-----------------
+
+Файл конфигурации по умолчанию ищется в $HOME/.config/ (если у вас
+POSIX-совместимая ОС). Файл должен называться ``m_librarian.conf``. Это
+должен быть файл в формате ``ini``. В настоящий момент m_librarian
+понимает следующие секции и ключи в них::
+
+    [database]
+    URI = "DB URI"
+
+    [library]
+    path = "путь к архивам библиотеки"
+
+    [download]
+    format = "формат имён сохраняемых файлов"
+
+Большинство программ имею опцию `-C|--config config`, которая позволяет
+использовать файл произвольный конфигурации.
+
 База данных
 -----------
 
@@ -56,12 +76,10 @@ m_Librarian пока не научился индексировать архив
 Database URI
 ^^^^^^^^^^^^
 
-Чтобы m_Librarian использовал сервер SQL создайте файл конфигурации и
-поместите его в $HOME/.config/ (если у вас POSIX-совместимая ОС). Файл
-должен называться ``m_librarian.conf``. Это должен быть файл в формате
-``ini``, в нём должна быть единственная секция ``[database]`` с
-единственным ключом ``URI``. Значением ключа должно быть Database URI в
-формате, который понимает SQLObject. Вот несколько примеров::
+Чтобы m_Librarian использовал сервер SQL в файле конфигурации должна
+быть секция ``[database]`` с единственным ключом ``URI``. Значением
+ключа должно быть Database URI в формате, который понимает SQLObject.
+Вот несколько примеров::
 
    [database]
    URI = mysql://user:password@host/database
index cbaad645d9d7acccc3a1dce9ebc33b6ef59003fd..70cd7cf0004d4d1d7b22b77e88e73e53d546837b 100644 (file)
@@ -13,10 +13,11 @@ ml-initdb.py
 
 Использование::
 
-    ml-initdb.py [-D]
+    ml-initdb.py [-C] [-D]
 
 Опции::
 
+    -C, --config config      Путь к файлу конфигурации
     -D, --database database  Использовать указанную БД
 
 Инициализирует базу данных и импортирует список жанров. Этот скрипт не
@@ -28,10 +29,11 @@ ml-import.py
 
 Использование::
 
-    ml-import.py [-D] [file.inpx ...]
+    ml-import.py [-C] [-D] [file.inpx ...]
 
 Опции::
 
+    -C, --config config      Путь к файлу конфигурации
     -D, --database database  Использовать указанную БД
 
 Инициализирует базу данных, импортирует список жанров и список файлов
@@ -45,13 +47,14 @@ ml-search.py
 
 Использование::
 
-    ml-search.py [-D] [-i] [-I] [-t] [-s] [-f] [-v] [-c] ...
+    ml-search.py [-C] [-D] [-i] [-I] [-t] [-s] [-f] [-v] [-c] ...
 
 Программа выполняет поиск по базе данных и показывает список
 результатов. В настоящее время может искать только в списке авторов.
 
 Глобальные опции::
 
+    -C, --config config      Путь к файлу конфигурации
     -D, --database database  Использовать указанную БД
     -i, --ignore-case        независимо от регистра (по умолчанию: угадать)
     -I, --case-sensitive     с учётом регистра
@@ -159,8 +162,8 @@ ml-search.py
 была ли книга помечена как удалённая.
 
 Опция `-P` задаёт путь к директории с архивами библиотеки. По умолчанию
-этот путь берётся из файла конфигурации `m_librarian`, секция
-`[library]`, ключ `path`, например::
+этот путь берётся из файла конфигурации, секция `[library]`, ключ
+`path`, например::
 
     [library]
     path = /var/lib/archives
@@ -173,7 +176,7 @@ ml-search.py
 использовать эту команду — совместно с опцией `--id`. Файл сохраняется в
 текущую директорию с тем именем, под которым он храниться в библиотеке.
 
-Ключ `format` в секции `[download]` файла конфигурации m_librarian.conf
+Ключ `format` в секции `[download]` файла конфигурации
 
 |    [download]
 |    format = %a/%s/%n %t
index a2c13b069562fcb49e34da589780802cf346e0d1..abbb1187957aaa8f988b4beaef21994e18c5f19e 100644 (file)
@@ -24,6 +24,25 @@ The program works with local library archives so download some. In
 addition to the very libraries you need to get INPX indices for them —
 m_Librarian cannot index libraries yet.
 
+Configuration file
+------------------
+
+m_librarian looks up configuration file in $HOME/.config/ (if your OS is
+POSIX-compatible). The configuration file must be named
+``m_librarian.conf``. It must be in ``ini``-file format. The following
+sections and keys are now understood::
+
+    [database]
+    URI = "database URI"
+
+    [library]
+    path = "path to the library archives"
+
+    [download]
+    format = "download file format"
+
+Most programs have an option `-C|--config file` to use a non-default
+configuration file.
 
 Database
 --------
@@ -37,10 +56,7 @@ way of using m_Librarian.
 Database URI
 ^^^^^^^^^^^^
 
-For m_Librarian to use an SQL server create a configuration file and put
-it in $HOME/.config/ (if your OS is POSIX-compatible). Name the
-configuration file ``m_librarian.conf``. It must be in ``ini``-file
-format and must have the only section ``[database]`` with the only key
+In configuration file define section ``[database]`` with the only key
 ``URI``. The value for the key must be a Database URI in format accepted
 by SQLObject. Some examples::
 
index 99b5c8425ba0d3234af47f21eaf37774f880c4c3..62584436047df73c9ef9169fea58a283e2a55e9e 100644 (file)
@@ -13,10 +13,11 @@ ml-initdb.py
 
 Usage::
 
-    ml-initdb.py [-D]
+    ml-initdb.py [-C] [-D]
 
 Options::
 
+    -C, --config config      Configuration file
     -D, --database database  Open this database by pathname/db uri
 
 Initialize database and import genres list. Isn’t really needed as
@@ -28,10 +29,11 @@ ml-import.py
 
 Usage::
 
-    ml-import.py [-D] [file.inpx ...]
+    ml-import.py [-C] [-D] [file.inpx ...]
 
 Options::
 
+    -C, --config config      Configuration file
     -D, --database database  Open this database by pathname/db uri
 
 Initialize database, import genres list and import a list of INPX files
@@ -44,13 +46,14 @@ ml-search.py
 
 Usage::
 
-    ml-search.py [-D] [-i] [-I] [-t] [-s] [-f] [-v] [-c] ...
+    ml-search.py [-C] [-D] [-i] [-I] [-t] [-s] [-f] [-v] [-c] ...
 
 Search through the database and display results. Currently can only
 search authors by name.
 
 Global options::
 
+    -C, --config config      Configuration file
     -D, --database database  Open this database by pathname/db uri
     -i, --ignore-case        ignore case (default is to guess)
     -I, --case-sensitive     don’t ignore case
@@ -157,7 +160,7 @@ archive name, file name, extension and size, and flag if the book is
 marked to be deleted.
 
 Option `-P` provides the path to the directory with the library
-archives. By default the path is extracted from `m_librarian.conf`,
+archives. By default the path is extracted from configuration file,
 section `[library]`, key `path`::
 
     [library]
index ca7eadd4fa95a168979c99672d3b6766ac6b19aa..fed06ae4ac2817ac521dc180b2a81d0932814981 100755 (executable)
@@ -38,13 +38,13 @@ def find_config_file(config_dirs=None):
 _ml_config = None
 
 
-def get_config(config_filename=None):
+def get_config(config_path=None):
     global _ml_config
     if _ml_config is None:
-        if config_filename is None:
-            config_filename = find_config_file()
+        if config_path is None:
+            config_path = find_config_file()
         _ml_config = RawConfigParser()
-        _ml_config.read(config_filename)
+        _ml_config.read(config_path)
     return _ml_config
 
 
index f154841f1742cee8719811dedbfc02779805c630..3ccbd319a87cf1101e95431ab3836393b974d5bd 100755 (executable)
@@ -1,16 +1,21 @@
 #! /usr/bin/env python
 
 import argparse
+from m_librarian.config import get_config
 from m_librarian.db import open_db, init_db, update_counters
 from m_librarian.glst import import_glst
 from m_librarian.inp import import_inpx
 
 if __name__ == '__main__':
     parser = argparse.ArgumentParser(description='Import')
+    parser.add_argument('-C', '--config', help='configuration file')
     parser.add_argument('-D', '--database', help='database URI')
     parser.add_argument('inpx', nargs='+', help='INPX files to import')
     args = parser.parse_args()
 
+    if args.config:
+        get_config(args.config)  # Get and cache config file
+
     open_db(args.database)
     init_db()
     import_glst()
index f46b7c2bdb264561fb0b8bde407ea7a043d565e3..0d4e73b6467d7e93bff7febe22e9622ad3b8e64b 100755 (executable)
@@ -1,14 +1,19 @@
 #! /usr/bin/env python
 
 import argparse
+from m_librarian.config import get_config
 from m_librarian.db import open_db, init_db
 from m_librarian.glst import import_glst
 
 if __name__ == '__main__':
     parser = argparse.ArgumentParser(description='Init')
+    parser.add_argument('-C', '--config', help='configuration file')
     parser.add_argument('-D', '--database', help='database URI')
     args = parser.parse_args()
 
+    if args.config:
+        get_config(args.config)  # Get and cache config file
+
     open_db(args.database)
     init_db()
     old, new = import_glst()
index 0742a53753067b154ea17ce3d7ce9c5873bcc13b..bd5df8cdf2341d0f2a619bf6d2be178a5d59aa12 100755 (executable)
@@ -5,6 +5,7 @@ import sys
 from sqlobject.sqlbuilder import CONCAT
 
 from m_lib.defenc import default_encoding
+from m_librarian.config import get_config
 from m_librarian.db import Author, Book, Extension, Genre, Language, open_db
 from m_librarian.download import download
 from m_librarian.search import mk_search_conditions, \
@@ -261,6 +262,7 @@ def _search_languages(case_sensitive, search_type, args):
 
 if __name__ == '__main__':
     main_parser = argparse.ArgumentParser(description='Search')
+    main_parser.add_argument('-C', '--config', help='configuration file')
     main_parser.add_argument('-D', '--database', help='database URI')
     main_parser.add_argument('-i', '--ignore-case', action='store_true',
                              help='ignore case '
@@ -334,6 +336,9 @@ if __name__ == '__main__':
 
     args = main_parser.parse_args()
 
+    if args.config:
+        get_config(args.config)  # Get and cache config file
+
     if args.case_sensitive:
         if args.ignore_case:
             sys.stderr.write(
diff --git a/tests/test_config.conf b/tests/test_config.conf
new file mode 100644 (file)
index 0000000..8154b2b
--- /dev/null
@@ -0,0 +1,2 @@
+[library]
+path = /home/test-config
diff --git a/tests/test_config.py b/tests/test_config.py
new file mode 100755 (executable)
index 0000000..6e0c6a3
--- /dev/null
@@ -0,0 +1,19 @@
+#! /usr/bin/env python
+
+import os
+import unittest
+from tests import main
+from m_librarian.config import get_config
+
+
+class TestFormat(unittest.TestCase):
+    def test_config(self):
+        config_path = os.path.join(
+            os.path.dirname(__file__), 'test_config.conf')
+        get_config(config_path)
+        ml_conf = get_config()
+        self.assertEqual(ml_conf.get('library', 'path'), '/home/test-config')
+
+
+if __name__ == "__main__":
+    main()