]> git.phdru.name Git - m_librarian.git/blobdiff - m_librarian/wx/session_config.py
Merge branch 'wx'
[m_librarian.git] / m_librarian / wx / session_config.py
diff --git a/m_librarian/wx/session_config.py b/m_librarian/wx/session_config.py
new file mode 100755 (executable)
index 0000000..93b725c
--- /dev/null
@@ -0,0 +1,73 @@
+#! /usr/bin/env python
+
+from __future__ import print_function
+import os
+
+from ..config import RawConfigParser, ConfigWrapper, find_config_file
+
+
+__all__ = ['get_session_config']
+
+
+def _find_config_dirs_posix():
+    config_dirs = []
+    if 'XDG_CACHE_HOME' in os.environ:
+        config_dirs.append(os.environ['XDG_CACHE_HOME'])
+    home_cache = os.path.expanduser('~/.cache')
+    if home_cache not in config_dirs:
+        config_dirs.append(home_cache)
+    return config_dirs
+
+
+def _find_config_dirs():
+    if os.name == 'posix':
+        return _find_config_dirs_posix()
+    return None
+
+
+_ml_session_config = None
+
+
+class SessionConfigWrapper(ConfigWrapper):
+    def __init__(self, config, config_path):
+        ConfigWrapper.__init__(self, config)
+        self.config_path = config_path
+
+    def set(self, section, option, value):
+        if not self.config.has_section(section):
+            self.config.add_section(section)
+        super(SessionConfigWrapper, self).set(section, option, value)
+
+    def save(self):
+        if self.config_path is None:
+            config_dirs = _find_config_dirs()
+            self.config_path = \
+                os.path.join(config_dirs[0], 'm_librarian_session.conf')
+        with open(self.config_path, 'wt') as fp:
+            self.config.write(fp)
+
+
+def get_session_config(config_path=None):
+    global _ml_session_config
+    if _ml_session_config is None:
+        _ml_session_config = RawConfigParser()
+        if config_path is None:
+            config_dirs = _find_config_dirs()
+            config_path = \
+                find_config_file(config_dirs, 'm_librarian_session.conf')
+        if config_path is not None:
+            _ml_session_config.read(config_path)
+        _ml_session_config = \
+            SessionConfigWrapper(_ml_session_config, config_path)
+    return _ml_session_config
+
+
+def _test():
+    config_dirs = _find_config_dirs()
+    print("Config dirs:", config_dirs)
+    print("Config file:",
+          find_config_file(config_dirs, 'm_librarian_session.conf'))
+
+
+if __name__ == '__main__':
+    _test()