This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author ajaksu2
Recipients ajaksu2, gvanrossum
Date 2009-03-06.04:52:52
SpamBayes Score 2.0277832e-05
Marked as misclassified No
Message-id <0016362836d09d566004646c0ec6@google.com>
In-reply-to
Content
Reviewers: ,

Message:
While this is a test issue, the attached diff is a crude first draft of
a patched upload.py that makes linking to the Python Tracker a bit
easier.

Here's the command line and output:
$ python static/upload.py -R 400608 -F msg32813
Upload server: [...]
Loaded authentication cookies [...]
Issue created. URL: http://codereview.appspot.com/25073
Uploading base file for static/upload.py

And the help is:
$ python static/upload.py -h | tail -n5
   Link options:
     -R ROUNDUP, --roundup=ROUNDUP
                         Python tracker issue number to link with.
     -F FETCHDESCR, --fetch_descr=FETCHDESCR
                         Tracker file or message to fetch description
from.

I like it :)

Description:
wish we could expunge the deleted ones

Please review this at http://codereview.appspot.com/25073

Affected files:
   M     static/upload.py

Index: static/upload.py
===================================================================
--- static/upload.py	(revision 402)
+++ static/upload.py	(working copy)
@@ -61,7 +61,31 @@
  # Max size of patch or base file.
  MAX_UPLOAD_SIZE = 900 * 1024

+fields = {'issue':'title', 'msg':'content', 'file':'description', }
+def fetch_item(nodeid, kind='issue', tracker='http://bugs.python.org'):
+  query_tpl = [('@action', 'export_csv'), ('@filter', 'id'),
+  ('id', nodeid), ('@columns', fields[kind])]
+  item_url = '/%s?%s' % (kind, urllib.urlencode(query_tpl))
+  content = urllib.urlopen(tracker + item_url).read().split('\r\n')
+  if content[0] == 'title':
+    return '[issue%s] %s' % (nodeid, content[1].strip())
+  elif content[0] == 'content' or content[0] == 'description':
+    return content[1].strip()

+def fetch(nodeid):
+  try:
+    result = fetch_item(int(nodeid))
+  except ValueError:
+    if nodeid.startswith('msg'):
+      nodeid = nodeid.replace('msg', '')
+      result = fetch_item(int(nodeid), 'msg')
+    elif nodeid.startswith('file'):
+      nodeid = nodeid.replace('file', '')
+      result = fetch_item(int(nodeid), 'file')
+    else:
+      raise
+  return result
+
  def GetEmail(prompt):
    """Prompts the user for their email address and returns it.

@@ -453,6 +477,14 @@
  group.add_option("--send_mail", action="store_true",
                   dest="send_mail", default=False,
                   help="Send notification email to reviewers.")
+# Link options
+group = parser.add_option_group("Link options")
+group.add_option("-R", "--roundup", action="store", dest="roundup",
+                 metavar="ROUNDUP", default=None,
+                 help="Python tracker issue number to link with.")
+group.add_option("-F", "--fetch_descr", action="store", dest="fetch_descr",
+                 metavar="FETCHDESCR", default=None,
+                 help="Tracker file or message to fetch description from.")

  def GetRpcServer(options):
@@ -1291,7 +1323,10 @@
      prompt = "Message describing this patch set: "
    else:
      prompt = "New issue subject: "
-  message = options.message or raw_input(prompt).strip()
+  if options.roundup:
+    message = fetch(options.roundup)
+  else:
+    message = options.message or raw_input(prompt).strip()
    if not message:
      ErrorExit("A non-empty message is required")
    rpc_server = GetRpcServer(options)
@@ -1307,11 +1342,16 @@
        if "@" in reviewer and not reviewer.split("@")[1].count(".") == 1:
          ErrorExit("Invalid email address: %s" % reviewer)
      form_fields.append(("reviewers", options.reviewers))
+  tracker_email = 'report@bugs.python.org,'
    if options.cc:
      for cc in options.cc.split(','):
        if "@" in cc and not cc.split("@")[1].count(".") == 1:
          ErrorExit("Invalid email address: %s" % cc)
-    form_fields.append(("cc", options.cc))
+    if options.roundup:
+      cc = tracker_email + options.cc
+    form_fields.append(("cc", cc))
+  elif options.roundup:
+    form_fields.append(("cc", tracker_email[:-1]))
    description = options.description
    if options.description_file:
      if options.description:
@@ -1319,6 +1359,9 @@
      file = open(options.description_file, 'r')
      description = file.read()
      file.close()
+  elif options.fetch_descr:
+    # XXX Add error handling as above
+    description = fetch(options.fetch_descr)
    if description:
      form_fields.append(("description", description))
    # Send a hash of all the base file so the server can determine if a copy
History
Date User Action Args
2009-03-06 04:52:57ajaksu2setrecipients: + gvanrossum
2009-03-06 04:52:55ajaksu2linkissue400608 messages
2009-03-06 04:52:52ajaksu2create