Revert to . based variable definitions.
authorJack Miller <jack@codezen.org>
Sat, 20 Aug 2011 22:09:00 +0000 (17:09 -0500)
committerJack Miller <jack@codezen.org>
Sat, 20 Aug 2011 22:09:00 +0000 (17:09 -0500)
Signed-off-by: Jack Miller <jack@codezen.org>
canto_curses/command.py
canto_curses/gui.py
canto_curses/reader.py
canto_curses/screen.py
canto_curses/story.py
canto_curses/tag.py
canto_curses/taglist.py

index 82b0b00..0e1a5df 100644 (file)
@@ -83,7 +83,7 @@ class CommandHandler(PluginHandler):
 
         # Translate numeric key into config friendly keyname
 
-        optname = "['" + self.get_opt_name() + "']['key']['"
+        optname = self.get_opt_name() + ".key."
 
         # Add meta prefix.
         if self.meta:
@@ -121,8 +121,6 @@ class CommandHandler(PluginHandler):
 
             optname += k
 
-        optname += "']"
-
         log.debug("trying key: %s" % optname)
 
         try:
index b0709aa..fddc120 100644 (file)
@@ -10,7 +10,7 @@ COMPATIBLE_VERSION = 0.3
 
 from canto_next.hooks import call_hook, on_hook
 from canto_next.plugins import Plugin
-from canto_next.remote import assign_to_dict
+from canto_next.remote import assign_to_dict, access_dict
 from canto_next.encoding import decoder
 
 from command import CommandHandler, command_format
@@ -217,8 +217,8 @@ Press [space] to close."""
                 "key" :
                 {
                     "space" : "destroy",
-                    "d" : "toggle ['reader']['show_description']",
-                    "l" : "toggle ['reader']['enumerate_links']",
+                    "d" : "toggle reader.show_description",
+                    "l" : "toggle reader.enumerate_links",
                     "g" : "goto",
                     "down" : "scroll-down",
                     "up" : "scroll-up",
@@ -247,8 +247,8 @@ Press [space] to close."""
                 {
                     "space" : "foritem & item-state read & reader",
                     "g" : "foritems & goto & item-state read & clearitems",
-                    "E" : "toggle ['taglist']['tags_enumerated']",
-                    "e" : "toggle ['story']['enumerated']",
+                    "E" : "toggle taglist.tags_enumerated",
+                    "e" : "toggle story.enumerated",
                     "R" : "item-state read *",
                     "U" : "item-state -read *",
                     "r" : "tag-state read",
@@ -951,18 +951,14 @@ Press [space] to close."""
     def get_tag_conf(self, tag):
         return eval(repr(self.tag_config[tag.tag]), {}, {})
 
-    # Single option set / get which will query a dict based on a string given
-    # to access a dict, like "['reader']['blah']"
-
-    # These are intended to be used as a convenience when dealing with strings
-    # from the user.
-
     def _get_opt(self, option, d):
-        com = "d" + option.replace("\\","\\\\")
-        return eval(com, {}, { "d" : d })
+        valid, value = access_dict(d, option)
+        if not valid:
+            return None
+        return value
 
     def _set_opt(self, option, value, d):
-        assign_to_dict(d, option.replace("\\","\\\\"), value)
+        assign_to_dict(d, option, value)
 
     def set_opt(self, option, value):
         c = self.get_conf()
index 587cf99..d1f69c7 100644 (file)
@@ -58,7 +58,7 @@ class Reader(TextBox):
             self.refresh()
 
     def update_text(self):
-        reader_conf = self.callbacks["get_opt"]("['reader']")
+        reader_conf = self.callbacks["get_opt"]("reader")
 
         s = "No selected story.\n"
 
index f6ab2a0..f8dd4e8 100644 (file)
@@ -103,7 +103,7 @@ class Screen(CommandHandler):
 
         self.height, self.width = self.stdscr.getmaxyx()
 
-        color_conf = self.callbacks["get_opt"]("['color']")
+        color_conf = self.callbacks["get_opt"]("color")
 
         for i in xrange(curses.COLOR_PAIRS):
             if ("%s" % i) not in color_conf:
@@ -149,8 +149,7 @@ class Screen(CommandHandler):
     #       - The configured size (given by the config)
 
     def _subw_size_height(self, ci, height):
-        window_conf = self.callbacks["get_opt"]\
-                ("['" +  ci.get_opt_name() + "']['window']")
+        window_conf = self.callbacks["get_opt"](ci.get_opt_name() + ".window")
 
         if not window_conf["maxheight"]:
             window_conf["maxheight"] = height
@@ -159,8 +158,7 @@ class Screen(CommandHandler):
         return min(height, window_conf["maxheight"], req_height)
 
     def _subw_size_width(self, ci, width):
-        window_conf = self.callbacks["get_opt"]\
-                ("['" +  ci.get_opt_name() + "']['window']")
+        window_conf = self.callbacks["get_opt"](ci.get_opt_name() + ".window")
 
         if not window_conf["maxwidth"]:
             window_conf["maxwidth"] = width
@@ -221,8 +219,7 @@ class Screen(CommandHandler):
         # Floating windows are, by design, given a window the size of the
         # entire screen, but only actually written lines are drawn.
 
-        window_conf = self.callbacks["get_opt"]\
-                ("['" +  ci.get_opt_name() + "']['window']")
+        window_conf = self.callbacks["get_opt"](ci.get_opt_name() + ".window")
 
         if window_conf['border'] == "smart":
             top_border = top != 0
@@ -389,7 +386,7 @@ class Screen(CommandHandler):
             # Separate windows by alignment.
             for w in windows:
                 align = self.callbacks["get_opt"]\
-                        ("['" + w.get_opt_name() + "']['window']['align']")
+                        (w.get_opt_name() + ".window.align")
 
                 # Move taglist deeper so that it absorbs any
                 # extra space left in the rest of the layout.
@@ -421,8 +418,7 @@ class Screen(CommandHandler):
         for wt in self.window_types:
             w = wt()
             optname = w.get_opt_name()
-            flt = self.callbacks["get_opt"]\
-                    ("['" + optname + "']['window']['float']")
+            flt = self.callbacks["get_opt"](optname + ".window.float")
             if flt:
                 self.floats.append(w)
             else:
@@ -439,7 +435,7 @@ class Screen(CommandHandler):
         # Init floating windows.
         for f in self.floats: 
             align = self.callbacks["get_opt"]\
-                    ("['" + f.get_opt_name() + "']['window']['align']")
+                    (f.get_opt_name() + ".window.align")
             height = self._subw_size_height(f, self.height)
             width = self._subw_size_width(f, self.width)
 
index aed8cb9..86fa0bc 100644 (file)
@@ -195,7 +195,7 @@ class Story(PluginHandler):
             self.refresh(width)
 
     def refresh(self, width):
-        story_conf = self.callbacks["get_opt"]("['story']")
+        story_conf = self.callbacks["get_opt"]("story")
         self.width = width
 
         # Make sure we actually have all of the attributes needed
@@ -212,7 +212,7 @@ class Story(PluginHandler):
                 return
 
         # Do we need the relative enumerated form?
-        rel_enumerated = self.callbacks["get_tag_opt"]("['enumerated']")
+        rel_enumerated = self.callbacks["get_tag_opt"]("enumerated")
 
         # These are the only things that affect the drawing
         # of this item.
index 06e669d..ae9f21e 100644 (file)
@@ -230,7 +230,7 @@ class Tag(list):
     def set_sel_offset(self, offset):
         self.sel_offset = offset
 
-        if not self.callbacks["get_tag_opt"]("['collapsed']"):
+        if not self.callbacks["get_tag_opt"]("collapsed"):
             for i, item in enumerate(self):
                 item.set_sel_offset(offset + i)
 
@@ -274,9 +274,9 @@ class Tag(list):
         self.changed = False
 
     def render_header(self, width, pad):
-        fstring = self.callbacks["get_opt"]("['tag']['format']")
-        taglist_conf = self.callbacks["get_opt"]("['taglist']")
-        collapsed = self.callbacks["get_tag_opt"]("['collapsed']")
+        fstring = self.callbacks["get_opt"]("tag.format")
+        taglist_conf = self.callbacks["get_opt"]("taglist")
+        collapsed = self.callbacks["get_tag_opt"]("collapsed")
 
         # Make sure to strip out the category from category:name
         tag = self.tag.split(':', 1)[1]
index 71d79d8..4283f7d 100644 (file)
@@ -148,7 +148,7 @@ class TagList(GuiBase):
         log.info("Fetching any needed search attributes")
 
         need_attrs = {}
-        sa = self.callbacks["get_opt"]("['taglist']['search_attributes']")
+        sa = self.callbacks["get_opt"]("taglist.search_attributes")
 
         # Make sure that we have all attributes needed for a search.
         for attr in sa:
@@ -165,20 +165,19 @@ class TagList(GuiBase):
 
     # Prompt that ensures the items are enumerated first
     def eprompt(self, prompt):
-        return self._cfg_set_prompt("['story']['enumerated']", prompt)
+        return self._cfg_set_prompt("story.enumerated", prompt)
 
     # Prompt that enumerates only items in a single tag.
     def tag_eprompt(self, tag, prompt):
-        return self._tag_cfg_set_prompt(tag, "['enumerated']", prompt)
+        return self._tag_cfg_set_prompt(tag, "enumerated", prompt)
 
     # Enumerates visible tags.
     def teprompt(self, prompt):
-        return self._cfg_set_prompt("['taglist']['tags_enumerated']", prompt)
+        return self._cfg_set_prompt("taglist.tags_enumerated", prompt)
 
     # Enumerates all tags.
     def teprompt_absolute(self, prompt):
-        return self._cfg_set_prompt("['taglist']['tags_enumerated_absolute']",
-                prompt)
+        return self._cfg_set_prompt("taglist.tags_enumerated_absolute", prompt)
 
     # Following we have a number of command helpers. These allow
     # commands to take lists of items, tags, or tag subranges of items in
@@ -621,7 +620,7 @@ class TagList(GuiBase):
             toffset = self.callbacks["get_var"]("target_offset")
             self._set_cursor(tag, toffset) 
 
-        self.callbacks["set_tag_opt"](tag, "['collapsed']", True)
+        self.callbacks["set_tag_opt"](tag, "collapsed", True)
 
     @command_format([("tags", "listof_tags")])
     def cmd_collapse(self, **kwargs):
@@ -639,7 +638,7 @@ class TagList(GuiBase):
             toffset = self.callbacks["get_var"]("target_offset") + tag.lines
             self._set_cursor(tag[0], toffset)
 
-        self.callbacks["set_tag_opt"](tag, "['collapsed']", False)
+        self.callbacks["set_tag_opt"](tag, "collapsed", False)
 
     @command_format([("tags", "listof_tags")])
     def cmd_uncollapse(self, **kwargs):
@@ -649,7 +648,7 @@ class TagList(GuiBase):
     @command_format([("tags", "listof_tags")])
     def cmd_toggle_collapse(self, **kwargs):
         for tag in kwargs["tags"]:
-            if self.callbacks["get_tag_opt"](tag, "['collapsed']"):
+            if self.callbacks["get_tag_opt"](tag, "collapsed"):
                 self._uncollapse_tag(tag)
             else:
                 self._collapse_tag(tag)
@@ -668,7 +667,7 @@ class TagList(GuiBase):
             return
 
         story = self.first_story
-        terms = self.callbacks["get_opt"]("['taglist']['search_attributes']")
+        terms = self.callbacks["get_opt"]("taglist.search_attributes")
 
         while story:
             for t in terms:
@@ -770,7 +769,7 @@ class TagList(GuiBase):
         tag = kwargs["tag"].tag
         config = kwargs["config"]
 
-        argv = ["canto-remote", "one-config", "['tags']['" + tag + "']" + config]
+        argv = ["canto-remote", "one-config", "tags." + tag + "." + config]
         argv = [ encoder(x) for x in argv ]
         self._remote_argv(argv)
 
@@ -787,7 +786,7 @@ class TagList(GuiBase):
             sel_is_tag = True
 
         self.tags = self.callbacks["get_var"]("curtags")
-        hide_empty = self.callbacks["get_opt"]("['taglist']['hide_empty_tags']")
+        hide_empty = self.callbacks["get_opt"]("taglist.hide_empty_tags")
 
         t = []
         cur_item_offset = 0
@@ -803,7 +802,7 @@ class TagList(GuiBase):
             tag.set_tag_offset(i)
             tag.set_visible_tag_offset(len(t))
 
-            if self.callbacks["get_tag_opt"](tag, "['collapsed']"):
+            if self.callbacks["get_tag_opt"](tag, "collapsed"):
                 cur_sel_offset += 1
             else:
                 cur_sel_offset += len(tag)
@@ -866,7 +865,7 @@ class TagList(GuiBase):
             prev_obj = tag
 
             # Collapsed tags (with items) skip stories.
-            if self.callbacks["get_tag_opt"](tag, "['collapsed']"):
+            if self.callbacks["get_tag_opt"](tag, "collapsed"):
                 if prev_sel:
                     prev_sel.next_sel = tag
                 tag.prev_sel = prev_sel
@@ -1022,7 +1021,7 @@ class TagList(GuiBase):
         self.first_sel = obj
         while self.first_sel in self.tags:
 
-            if self.callbacks["get_tag_opt"](obj, "['collapsed']"):
+            if self.callbacks["get_tag_opt"](obj, "collapsed"):
                 break
 
             if self.first_sel.next_obj: