]> git.phdru.name Git - bookmarks_db.git/commitdiff
Allow parameters in BKMK_* environment variables
authorOleg Broytman <phd@phdru.name>
Sun, 29 Jun 2014 15:50:19 +0000 (19:50 +0400)
committerOleg Broytman <phd@phdru.name>
Sun, 29 Jun 2014 15:50:19 +0000 (19:50 +0400)
For example, BKMK_ROBOT=forking:subproc=urllib or
BKMK_STORAGE=json:filename=bookmarks_db.json.

bkmk_objects.py
doc/ANNOUNCE
doc/ChangeLog
doc/TODO
robots.py
storage.py
writers.py

index a8c75f279b39962034ca8b8f4ca8e954d183051c..dce981190c217b7602bcd600b53055dd47c13488 100644 (file)
@@ -10,7 +10,7 @@ __license__ = "GNU GPL"
 
 __all__ = ['Folder', 'Bookmark', 'Ruler', 'Walker', 'Writer', 'Robot',
     'InverseLinker', 'Linear', 'make_linear', 'make_tree', 'break_tree',
-    'quote_title', 'unquote_title',
+    'quote_title', 'unquote_title', 'parse_params', 'set_params',
 ]
 
 
@@ -218,3 +218,19 @@ def unquote_title(title):
       title = HTMLParser().unescape(title.replace("&amp;", '&').decode('utf-8'))
       title = title.encode('utf-8').replace("&#39;", "'")
    return title
+
+
+def parse_params(param_str):
+    params = param_str.split(':')
+    main_param = params.pop(0)
+    param_list = {}
+    for param in params:
+        key, value = param.split('=', 1)
+        param_list[key] = value
+    return main_param, param_list
+
+def set_params(obj, params):
+    if hasattr(params, "items"):
+        params = params.items()
+    for key, value in params:
+        setattr(obj, key, value)
index 92cb6248df36e5431842f45c132478c7b743f88d..8e06cdd97ee505a425207ce1277d08f0711a95e0 100644 (file)
@@ -17,12 +17,20 @@ WHAT'S NEW in version 4.6.0 (2014-06-??)
 
    Adapt JSON storage to recent Mozilla export format.
 
+   Add ChangeLog.
+
+   Allow parameters in BKMK_* environment variables; for example,
+   BKMK_ROBOT=forking:subproc=urllib or
+   BKMK_STORAGE=json:filename=bookmarks_db.json.
+
 
 WHERE TO GET
    Home page:  http://phdru.name/Software/Python/#bookmarks_db
      git clone http://git.phdru.name/bookmarks_db.git
      git clone  git://git.phdru.name/bookmarks_db.git
 
+   Requires: Python 2.5+, m_lib 2.0+.
+
 AUTHOR
    Oleg Broytman <phd@phdru.name>
 
index f83c649de90d7a1dd251497dfcbc6ae4d670dd25..8919e53a2ef8673af79965db052e7b3f16d9b646 100644 (file)
@@ -11,6 +11,10 @@ WHAT'S NEW in version 4.6.0 (2014-06-??)
 
    Add ChangeLog.
 
+   Allow parameters in BKMK_* environment variables; for example,
+   BKMK_ROBOT=forking:subproc=urllib or
+   BKMK_STORAGE=json:filename=bookmarks_db.json.
+
 
 WHAT'S NEW in version 4.5.6 (2014-01-14)
 
index 943919eb30cfc338b2cff8b4372f54fdc70684b9..234dc2bb4b2a90dcfb0903b7c34135d61e47631e 100644 (file)
--- a/doc/TODO
+++ b/doc/TODO
@@ -1,5 +1,3 @@
-Allow parameters in BKMK_ROBOT; for example, 'forking:urllib'.
-
 A new robot based on urllib2.
 
 A new robot based on PycURL.
index 3a0238de4c48d96bb77e278fb23dc21b4d08845e..3efb8f02de8dcee0a4b3429a474c160992b8d8d6 100644 (file)
--- a/robots.py
+++ b/robots.py
@@ -1,17 +1,20 @@
 """Thin wrapper for module Robots. Provides "default" robot
 
 This file is a part of Bookmarks database and Internet robot.
+
 """
 
 __author__ = "Oleg Broytman <phd@phdru.name>"
-__copyright__ = "Copyright (C) 1997-2012 PhiloSoft Design"
+__copyright__ = "Copyright (C) 1997-2014 PhiloSoft Design"
 __license__ = "GNU GPL"
 
 __all__ = ['import_robot', 'robot']
 
 
 from os import environ
-robot_name = environ.get("BKMK_ROBOT", "forking")
+from bkmk_objects import parse_params, set_params
+
+robot_name, robot_params = parse_params(environ.get("BKMK_ROBOT", "forking"))
 
 def import_robot(robot_name):
    exec "from Robots import bkmk_r%s" % robot_name
@@ -19,3 +22,4 @@ def import_robot(robot_name):
    return robot
 
 robot = import_robot(robot_name)
+set_params(robot, robot_params)
index 704fc7f124ed74a527d3a482b49f05957ec39a20..9c806e43f97933705383d114ed363ae2b5bc2722 100644 (file)
@@ -1,17 +1,20 @@
 """Thin wrapper for module Storage. Provides "default" storage
 
 This file is a part of Bookmarks database and Internet robot.
+
 """
 
 __author__ = "Oleg Broytman <phd@phdru.name>"
-__copyright__ = "Copyright (C) 1997-2012 PhiloSoft Design"
+__copyright__ = "Copyright (C) 1997-2014 PhiloSoft Design"
 __license__ = "GNU GPL"
 
 __all__ = ['import_storage', 'storage']
 
 
 from os import environ
-storage_name = environ.get("BKMK_STORAGE", "pickle")
+from bkmk_objects import parse_params, set_params
+
+storage_name, storage_params = parse_params(environ.get("BKMK_STORAGE", "pickle"))
 
 def import_storage(storage_name):
    exec "from Storage import bkmk_st%s" % storage_name
@@ -19,3 +22,4 @@ def import_storage(storage_name):
    return storage
 
 storage = import_storage(storage_name)
+set_params(storage, storage_params)
index 42402023ee796cad901fe95601c25d0f923df187..57d963cfbb2f15e3d10d6394138c9b527c982dbe 100644 (file)
@@ -1,17 +1,20 @@
 """Thin wrapper for module Writers. Provides "default" writer
 
 This file is a part of Bookmarks database and Internet robot.
+
 """
 
 __author__ = "Oleg Broytman <phd@phdru.name>"
-__copyright__ = "Copyright (C) 1997-2012 PhiloSoft Design"
+__copyright__ = "Copyright (C) 1997-2014 PhiloSoft Design"
 __license__ = "GNU GPL"
 
 __all__ = ['import_writer', 'writer']
 
 
 from os import environ
-writer_name = environ.get("BKMK_WRITER", "html")
+from bkmk_objects import parse_params, set_params
+
+writer_name, writer_params = parse_params(environ.get("BKMK_WRITER", "html"))
 
 def import_writer(writer_name):
    exec "from Writers import bkmk_w%s" % writer_name
@@ -19,3 +22,4 @@ def import_writer(writer_name):
    return writer
 
 writer = import_writer(writer_name)
+set_params(writer, writer_params)