Add support for viewi...
Content-type: text/plain

Author: andar

Revision: 5164

Log:
        Change color tags to '{! !}'
Add support for viewing config values

Diff:
Modified: trunk/deluge/ui/console/colors.py
===================================================================
--- trunk/deluge/ui/console/colors.py   2009-04-25 00:30:11 UTC (rev 5163)
+++ trunk/deluge/ui/console/colors.py   2009-04-25 00:31:07 UTC (rev 5164)
@@ -52,12 +52,12 @@
 
 # Colors for various torrent states
 state_color = {
-    "Seeding": "{{blue,black,bold}}",
-    "Downloading": "{{green,black,bold}}",
-    "Paused": "{{white,black}}",
-    "Checking": "{{green,black}}",
-    "Queued": "{{yellow,black}}",
-    "Error": "{{red,black,bold}}"
+    "Seeding": "{!blue,black,bold!}",
+    "Downloading": "{!green,black,bold!}",
+    "Paused": "{!white,black!}",
+    "Checking": "{!green,black!}",
+    "Queued": "{!yellow,black!}",
+    "Error": "{!red,black,bold!}"
 }
 
 def init_colors():
@@ -89,12 +89,12 @@
     Returns the string length without the color formatting.
 
     """
-    if line.count("{{") != line.count ("}}"):
-        raise BadColorString("Number of {{ does not equal number of }}")
+    if line.count("{!") != line.count("!}"):
+        raise BadColorString("Number of {! is not equal to number of !}")
 
     # Remove all the color tags
-    while line.find("{{") != -1:
-        line = line[:line.find("{{")] + line[line.find("}}") + 2:]
+    while line.find("{!") != -1:
+        line = line[:line.find("{!")] + line[line.find("!}") + 2:]
 
     # Replace tabs with the appropriate amount of spaces
     line = replace_tabs(line)
@@ -107,27 +107,26 @@
     :param s:, string to parse
 
     """
-    if s.count("{{") != s.count ("}}"):
-        raise BadColorString("Number of {{ does not equal number of }}")
+    if s.count("{!") != s.count("!}"):
+        raise BadColorString("Number of {! is not equal to number of !}")
 
-
     ret = []
     # Keep track of where the strings
     col_index = 0
-    while s.find("{{") != -1:
-        begin = s.find("{{")
+    while s.find("{!") != -1:
+        begin = s.find("{!")
         if begin > 0:
             ret.append((curses.color_pair(color_pairs[(schemes["input"][0], 
schemes["input"][1])]), s[:begin]))
 
-        end = s.find("}}")
+        end = s.find("!}")
         if end == -1:
-            raise BadColorString("Missing closing '}}'")
+            raise BadColorString("Missing closing '!}'")
 
         # Get a list of attributes in the bracketed section
         attrs = s[begin+2:end].split(",")
 
         if len(attrs) == 1 and not attrs:
-            raise BadColorString("No description in {{ }}")
+            raise BadColorString("No description in {! !}")
 
         def apply_attrs(cp, a):
             # This function applies any additional attributes as necessary
@@ -151,13 +150,17 @@
                 # Default to 'black' if no bg is chosen
                 bg = "black"
 
-            color_pair = curses.color_pair(color_pairs[(fg, bg)])
+            try:
+                color_pair = curses.color_pair(color_pairs[(fg, bg)])
+            except KeyError:
+                raise BadColorString("Bad color value in tag: %s,%s" % (fg, 
bg))
+
             # Check for additional attributes and OR them to the color_pair
             color_pair = apply_attrs(color_pair, attrs)
 
-        # We need to find the text now, so lets try to find another {{ and if
+        # We need to find the text now, so lets try to find another {! and if
         # there isn't one, then it's the rest of the string
-        next_begin = s.find("{{", end)
+        next_begin = s.find("{!", end)
 
         if next_begin == -1:
             ret.append((color_pair, replace_tabs(s[end+2:])))

Modified: trunk/deluge/ui/console/commands/add.py
===================================================================
--- trunk/deluge/ui/console/commands/add.py     2009-04-25 00:30:11 UTC (rev 
5163)
+++ trunk/deluge/ui/console/commands/add.py     2009-04-25 00:31:07 UTC (rev 
5164)
@@ -48,13 +48,13 @@
             t_options["download_location"] = options["path"]
 
         for arg in args:
-            self.console.write("{{info}}Attempting to add torrent: %s" % arg)
+            self.console.write("{!info!}Attempting to add torrent: %s" % arg)
             filename = os.path.split(arg)[-1]
             filedump = base64.encodestring(open(arg).read())
 
             def on_success(result):
-                self.console.write("{{success}}Torrent added!")
+                self.console.write("{!success!}Torrent added!")
             def on_fail(result):
-                self.console.write("{{error}}Torrent was not added! %s" % 
result)
+                self.console.write("{!error!}Torrent was not added! %s" % 
result)
 
             client.core.add_torrent_file(filename, filedump, 
t_options).addCallback(on_success).addErrback(on_fail)

Modified: trunk/deluge/ui/console/commands/config.py
===================================================================
--- trunk/deluge/ui/console/commands/config.py  2009-04-25 00:30:11 UTC (rev 
5163)
+++ trunk/deluge/ui/console/commands/config.py  2009-04-25 00:31:07 UTC (rev 
5164)
@@ -23,9 +23,12 @@
 #      Boston, MA    02110-1301, USA.
 #
 
-from deluge.ui.console.main import BaseCommand, match_torrents
+from deluge.ui.console.main import BaseCommand
 import deluge.ui.console.colors as colors
 from deluge.ui.client import client
+import deluge.component as component
+from deluge.log import LOG as log
+
 from optparse import make_option
 import re
 
@@ -78,34 +81,46 @@
             "       config --set key value"
 
     def handle(self, *args, **options):
+        self.console = component.get("ConsoleUI")
         if options['set']:
             self._set_config(*args, **options)
         else:
             self._get_config(*args, **options)
 
     def _get_config(self, *args, **options):
-        def _on_get_config(config):
-            keys = config.keys()
-            keys.sort()
-            for key in keys:
-                if args and key not in args:
-                    continue
-                color = 'white'
-                value = config[key]
-                if isinstance(value, bool):
-                    color = 'yellow'
-                elif isinstance(value, int) or isinstance(value, float):
-                    color = 'green'
-                elif isinstance(value, str):
-                    color = 'cyan'
-                elif isinstance(value, list):
-                    color = 'magenta'
+        config = component.get("CoreConfig")
 
-                print templates.config_display(key, style[color](str(value)))
-        client.get_config(_on_get_config)
+        keys = config.keys()
+        keys.sort()
+        s = ""
+        for key in keys:
+            if args and key not in args:
+                continue
+            color = 'white'
+            value = config[key]
+            if isinstance(value, bool):
+                color = 'yellow'
+            elif isinstance(value, int) or isinstance(value, float):
+                color = 'green'
+            elif isinstance(value, str):
+                color = 'cyan'
+            elif isinstance(value, list):
+                color = 'magenta'
+            elif isinstance(value, dict):
+                import pprint
+                value = pprint.pformat(value, 2, 80)
+                new_value = []
+                for line in value.splitlines():
+                    new_value.append("{!%s,black,bold!}%s" % (color, line))
+                value = "\n".join(new_value)
 
+            s += "  %s: {!%s,black,bold!}%s\n" % (key, color, value)
+
+        self.console.write(s)
+
     def _set_config(self, *args, **options):
-        def _got_config_value(config_val):
+        pass
+"""        def _got_config_value(config_val):
             global c_val
             c_val = config_val
         key = args[0]
@@ -135,4 +150,4 @@
         return [ k for k in keys if k.startswith(text) ]
 
     def split(self, text):
-        return str.split(text)
+        return str.split(text)"""

Modified: trunk/deluge/ui/console/commands/connect.py
===================================================================
--- trunk/deluge/ui/console/commands/connect.py 2009-04-25 00:30:11 UTC (rev 
5163)
+++ trunk/deluge/ui/console/commands/connect.py 2009-04-25 00:31:07 UTC (rev 
5164)
@@ -34,10 +34,10 @@
         port = int(port)
         d = client.connect(host, port, username, password)
         def on_connect(result):
-            self.console.write("{{success}}Connected to %s:%s!" % (host, port))
+            self.console.write("{!success!}Connected to %s:%s!" % (host, port))
 
         def on_connect_fail(result):
-            self.console.write("{{error}}Failed to connect to %s:%s!" % (host, 
port))
+            self.console.write("{!error!}Failed to connect to %s:%s!" % (host, 
port))
 
         d.addCallback(on_connect)
         d.addErrback(on_connect_fail)

Modified: trunk/deluge/ui/console/commands/halt.py
===================================================================
--- trunk/deluge/ui/console/commands/halt.py    2009-04-25 00:30:11 UTC (rev 
5163)
+++ trunk/deluge/ui/console/commands/halt.py    2009-04-25 00:31:07 UTC (rev 
5164)
@@ -33,9 +33,9 @@
         self.console = component.get("ConsoleUI")
 
         def on_shutdown(result):
-            self.write("{{success}}Daemon was shutdown")
+            self.write("{!success!}Daemon was shutdown")
 
         def on_shutdown_fail(reason):
-            self.write("{{error}}Unable to shutdown daemon: %s" % reason)
+            self.write("{!error!}Unable to shutdown daemon: %s" % reason)
 
         
client.daemon.shutdown().addCallback(on_shutdown).addErrback(on_shutdown_fail)

Modified: trunk/deluge/ui/console/commands/help.py
===================================================================
--- trunk/deluge/ui/console/commands/help.py    2009-04-25 00:30:11 UTC (rev 
5163)
+++ trunk/deluge/ui/console/commands/help.py    2009-04-25 00:31:07 UTC (rev 
5164)
@@ -41,7 +41,7 @@
             try:
                 cmd = self._commands[args[0]]
             except KeyError:
-                self.console.write("{{error}}Unknown command %r" % args[0])
+                self.console.write("{!error!}Unknown command %r" % args[0])
                 return
             try:
                 parser = cmd.create_parser()
@@ -51,6 +51,6 @@
         else:
             max_length = max( len(k) for k in self._commands)
             for cmd in sorted(self._commands):
-                self.console.write("{{info}}" + cmd + "{{input}} - " + 
self._commands[cmd].__doc__ or '')
+                self.console.write("{!info!}" + cmd + "{!input!} - " + 
self._commands[cmd].__doc__ or '')
             self.console.write(" ")
             self.console.write('For help on a specific command, use "<command> 
--help"')

Modified: trunk/deluge/ui/console/commands/info.py
===================================================================
--- trunk/deluge/ui/console/commands/info.py    2009-04-25 00:30:11 UTC (rev 
5163)
+++ trunk/deluge/ui/console/commands/info.py    2009-04-25 00:31:07 UTC (rev 
5164)
@@ -106,7 +106,7 @@
                 self.show_info(key, value, options["verbose"])
 
         def on_torrents_status_fail(reason):
-            self.console.write("{{error}}Error getting torrent info: %s" % 
reason)
+            self.console.write("{!error!}Error getting torrent info: %s" % 
reason)
 
         d = client.core.get_torrents_status({"id": torrent_ids}, status_keys)
         d.addCallback(on_torrents_status)
@@ -123,61 +123,61 @@
             the torrent
         """
         self.console.write(" ")
-        self.console.write("{{info}}Name: {{input}}%s" % (status["name"]))
-        self.console.write("{{info}}ID: {{input}}%s" % (torrent_id))
-        s = "{{info}}State: %s%s" % (colors.state_color[status["state"]], 
status["state"])
+        self.console.write("{!info!}Name: {!input!}%s" % (status["name"]))
+        self.console.write("{!info!}ID: {!input!}%s" % (torrent_id))
+        s = "{!info!}State: %s%s" % (colors.state_color[status["state"]], 
status["state"])
         # Only show speed if active
         if status["state"] in ("Seeding", "Downloading"):
             if status["state"] != "Seeding":
-                s += " {{info}}Down Speed: {{input}}%s" % 
common.fspeed(status["download_payload_rate"])
-            s += " {{info}}Up Speed: {{input}}%s" % 
common.fspeed(status["upload_payload_rate"])
+                s += " {!info!}Down Speed: {!input!}%s" % 
common.fspeed(status["download_payload_rate"])
+            s += " {!info!}Up Speed: {!input!}%s" % 
common.fspeed(status["upload_payload_rate"])
 
             if common.ftime(status["eta"]):
-                s += " {{info}}ETA: {{input}}%s" % common.ftime(status["eta"])
+                s += " {!info!}ETA: {!input!}%s" % common.ftime(status["eta"])
 
         self.console.write(s)
 
         if status["state"] in ("Seeding", "Downloading", "Queued"):
-            s = "{{info}}Seeds: {{input}}%s (%s)" % (status["num_seeds"], 
status["total_seeds"])
-            s += " {{info}}Peers: {{input}}%s (%s)" % (status["num_peers"], 
status["total_peers"])
-            s += " {{info}}Availibility: {{input}}%.2f" % 
status["distributed_copies"]
+            s = "{!info!}Seeds: {!input!}%s (%s)" % (status["num_seeds"], 
status["total_seeds"])
+            s += " {!info!}Peers: {!input!}%s (%s)" % (status["num_peers"], 
status["total_peers"])
+            s += " {!info!}Availibility: {!input!}%.2f" % 
status["distributed_copies"]
             self.console.write(s)
 
-        s = "{{info}}Size: {{input}}%s/%s" % 
(common.fsize(status["total_done"]), common.fsize(status["total_size"]))
-        s += " {{info}}Ratio: {{input}}%.3f" % status["ratio"]
+        s = "{!info!}Size: {!input!}%s/%s" % 
(common.fsize(status["total_done"]), common.fsize(status["total_size"]))
+        s += " {!info!}Ratio: {!input!}%.3f" % status["ratio"]
         self.console.write(s)
 
         if not status["is_finished"]:
             pbar = format_progressbar(status["progress"], 
self.console.screen.cols - (13 + len("%.2f%%" % status["progress"])))
-            s = "{{info}}Progress: {{input}}%.2f%% %s" % (status["progress"], 
pbar)
+            s = "{!info!}Progress: {!input!}%.2f%% %s" % (status["progress"], 
pbar)
             self.console.write(s)
 
 
         if verbose:
-            self.console.write("  {{info}}::Files")
+            self.console.write("  {!info!}::Files")
             for i, f in enumerate(status["files"]):
-                s = "    {{input}}%s (%s)" % (f["path"], 
common.fsize(f["size"]))
-                s += " {{info}}Progress: {{input}}%.2f%%" % 
(status["file_progress"][i] * 100)
-                s += " {{info}}Priority:"
+                s = "    {!input!}%s (%s)" % (f["path"], 
common.fsize(f["size"]))
+                s += " {!info!}Progress: {!input!}%.2f%%" % 
(status["file_progress"][i] * 100)
+                s += " {!info!}Priority:"
                 fp = 
common.FILE_PRIORITY[status["file_priorities"][i]].replace("Priority", "")
                 if fp == "Do Not Download":
-                    s += "{{error}}"
+                    s += "{!error!}"
                 else:
-                    s += "{{success}}"
+                    s += "{!success!}"
 
                 s += " %s" % (fp)
                 self.console.write(s)
 
-            self.console.write("  {{info}}::Peers")
+            self.console.write("  {!info!}::Peers")
             if len(status["peers"]) == 0:
                 self.console.write("    None")
             else:
                 s = ""
                 for peer in status["peers"]:
                     if peer["seed"]:
-                        s += "%sSeed\t{{input}}" % 
colors.state_color["Seeding"]
+                        s += "%sSeed\t{!input!}" % 
colors.state_color["Seeding"]
                     else:
-                        s += "%sPeer\t{{input}}" % 
colors.state_color["Downloading"]
+                        s += "%sPeer\t{!input!}" % 
colors.state_color["Downloading"]
 
                     s += peer["country"] + "\t"
                     s += peer["ip"]

Modified: trunk/deluge/ui/console/eventlog.py
===================================================================
--- trunk/deluge/ui/console/eventlog.py 2009-04-25 00:30:11 UTC (rev 5163)
+++ trunk/deluge/ui/console/eventlog.py 2009-04-25 00:31:07 UTC (rev 5164)
@@ -49,11 +49,11 @@
 
     def on_torrent_added_event(self, torrent_id):
         def on_torrent_status(status):
-            self.console.write("{{event}}* TorrentAdded: {{info}}%s (%s)" % 
(status["name"], torrent_id))
+            self.console.write("{!event!}* TorrentAdded: {!info!}%s (%s)" % 
(status["name"], torrent_id))
         client.core.get_torrent_status(torrent_id, 
["name"]).addCallback(on_torrent_status)
 
     def on_torrent_removed_event(self, torrent_id):
-        self.console.write("{{event}}* TorrentRemovedEvent: {{info}}%s (%s)" %
+        self.console.write("{!event!}* TorrentRemovedEvent: {!info!}%s (%s)" %
             (self.console.get_torrent_name(torrent_id), torrent_id))
 
     def on_torrent_state_changed_event(self, torrent_id, state):
@@ -62,27 +62,27 @@
         if state in colors.state_color:
             state = colors.state_color[state] + state
 
-        self.console.write("{{event}}* TorrentStateChanged: %s {{info}}%s 
(%s)" %
+        self.console.write("{!event!}* TorrentStateChanged: %s {!info!}%s 
(%s)" %
             (state, self.console.get_torrent_name(torrent_id), torrent_id))
 
     def on_torrent_paused_event(self, torrent_id):
-        self.console.write("{{event}}* TorrentPaused: {{info}}%s (%s)" %
+        self.console.write("{!event!}* TorrentPaused: {!info!}%s (%s)" %
             (self.console.get_torrent_name(torrent_id), torrent_id))
 
     def on_torrent_finished_event(self, torrent_id):
-        self.console.write("{{event}}* TorrentFinished: {{info}}%s (%s)" %
+        self.console.write("{!event!}* TorrentFinished: {!info!}%s (%s)" %
             (self.console.get_torrent_name(torrent_id), torrent_id))
 
     def on_new_version_available_event(self, version):
-        self.console.write("{{event}}* NewVersionAvailable: {{info}}%s" %
+        self.console.write("{!event!}* NewVersionAvailable: {!info!}%s" %
             (version))
 
     def on_session_paused_event(self):
-        self.console.write("{{event}}* SessionPaused")
+        self.console.write("{!event!}* SessionPaused")
 
     def on_session_resumed_event(self):
-        self.console.write("{{event}}* SessionResumed")
+        self.console.write("{!event!}* SessionResumed")
 
     def on_config_value_changed_event(self, key, value):
-        self.console.write("{{event}}* ConfigValueChanged: %s: %s" %
+        self.console.write("{!event!}* ConfigValueChanged: %s: %s" %
             (key, value))

Modified: trunk/deluge/ui/console/main.py
===================================================================
--- trunk/deluge/ui/console/main.py     2009-04-25 00:30:11 UTC (rev 5163)
+++ trunk/deluge/ui/console/main.py     2009-04-25 00:31:07 UTC (rev 5164)
@@ -40,10 +40,6 @@
 import deluge.ui.console.colors as colors
 from deluge.log import LOG as log
 
-# XXX: Remove when the commands are all fixed up
-def match_torrents(a=[]):
-    pass
-
 class OptionParser(optparse.OptionParser):
     """subclass from optparse.OptionParser so exit() won't exit."""
     def exit(self, status=0, msg=None):
@@ -149,8 +145,8 @@
         self.statusbars = StatusBars()
         self.eventlog = EventLog()
 
-        self.screen.topbar = "{{status}}Deluge " + deluge.common.get_version() 
+ " Console"
-        self.screen.bottombar = "{{status}}"
+        self.screen.topbar = "{!status!}Deluge " + deluge.common.get_version() 
+ " Console"
+        self.screen.bottombar = "{!status!}"
         self.screen.refresh()
 
         # The Screen object is designed to run as a twisted reader so that it
@@ -203,7 +199,7 @@
         try:
             parser = self._commands[cmd].create_parser()
         except KeyError:
-            self.write("{{error}}Unknown command: %s" % cmd)
+            self.write("{!error!}Unknown command: %s" % cmd)
             return
         args = self._commands[cmd].split(line)
 
@@ -221,7 +217,7 @@
             try:
                 self._commands[cmd].handle(*args, **options.__dict__)
             except Exception, e:
-                self.write("{{error}}" + str(e))
+                self.write("{!error!}" + str(e))
                 log.exception(e)
                 import traceback
                 self.write("%s" % traceback.format_exc())

Modified: trunk/deluge/ui/console/screen.py
===================================================================
--- trunk/deluge/ui/console/screen.py   2009-04-25 00:30:11 UTC (rev 5163)
+++ trunk/deluge/ui/console/screen.py   2009-04-25 00:31:07 UTC (rev 5164)
@@ -97,37 +97,35 @@
         Add a line to the screen.  This will be showed between the two bars.
         The text can be formatted with color using the following format:
 
-        "{{fg, bg, attributes, ...}}"
+        "{!fg, bg, attributes, ...!}"
 
         See: http://docs.python.org/library/curses.html#constants for 
attributes.
 
         Alternatively, it can use some built-in scheme for coloring.
         See colors.py for built-in schemes.
 
-        "{{scheme}}"
+        "{!scheme!}"
 
         Examples:
 
-        "{{blue, black, bold}}My Text is {{white, black}}cool"
-        "{{info}}I am some info text!"
-        "{{error}}Uh oh!"
+        "{!blue, black, bold!}My Text is {!white, black!}cool"
+        "{!info!}I am some info text!"
+        "{!error!}Uh oh!"
 
         :param text: str, the text to show
         """
-        log.debug("adding line: %s", text)
 
-
         def get_line_chunks(line):
             """
             Returns a list of 2-tuples (color string, text)
 
             """
             chunks = []
-            num_chunks = line.count("{{")
+            num_chunks = line.count("{!")
             for i in range(num_chunks):
                 # Find the beginning and end of the color tag
-                beg = line.find("{{")
-                end = line.find("}}") + 2
+                beg = line.find("{!")
+                end = line.find("!}") + 2
                 color = line[beg:end]
                 line = line[end:]
 
@@ -137,8 +135,8 @@
                 else:
                     # Not the last chunk so get the text up to the next tag
                     # and remove the text from line
-                    text = line[:line.find("{{")]
-                    line = line[line.find("{{"):]
+                    text = line[:line.find("{!")]
+                    line = line[line.find("{!"):]
 
                 chunks.append((color, text))
 
@@ -196,8 +194,8 @@
         col = 0
         try:
             parsed = colors.parse_color_string(string)
-        except colors.BadColorString:
-            log.error("Cannot add bad color string: %s", string)
+        except colors.BadColorString, e:
+            log.error("Cannot add bad color string %s: %s", string, e)
             return
 
         for index, (color, s) in enumerate(parsed):

Modified: trunk/deluge/ui/console/statusbars.py
===================================================================
--- trunk/deluge/ui/console/statusbars.py       2009-04-25 00:30:11 UTC (rev 
5163)
+++ trunk/deluge/ui/console/statusbars.py       2009-04-25 00:31:07 UTC (rev 
5164)
@@ -74,7 +74,7 @@
 
     def update_statusbars(self):
         # Update the topbar string
-        self.screen.topbar = "{{status}}Deluge %s Console - " % 
deluge.common.get_version()
+        self.screen.topbar = "{!status!}Deluge %s Console - " % 
deluge.common.get_version()
         if client.connected():
             info = client.connection_info()
             self.screen.topbar += "%...@%s:%s" % (info[2], info[0], info[1])
@@ -82,7 +82,7 @@
             self.screen.topbar += "Not Connected"
 
         # Update the bottombar string
-        self.screen.bottombar = "{{status}}C: %s" % self.connections
+        self.screen.bottombar = "{!status!}C: %s" % self.connections
 
         if self.config["max_connections_global"] > -1:
             self.screen.bottombar += " (%s)" % 
self.config["max_connections_global"]



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"deluge-commit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/deluge-commit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to