<?xml version="1.0"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>CKAN: Ticket #463: package diff exception</title>
    <link>http://localhost/ticket/463</link>
    <description>&lt;p&gt;
Investigate exception:
&lt;/p&gt;
&lt;pre class="wiki"&gt;
URL: http://ckan.net/revision/diff/dbtune-audioscrobbler?diff=66a47b9e-232a-4838-8674-66fa1a5c76e1&amp;amp;oldid=a99c98be-767a-4e49-9025-2472b2d18b9c
Module weberror.errormiddleware:162 in __call__
&amp;lt;&amp;lt;              __traceback_supplement__ = Supplement, self, environ
                   sr_checker = ResponseStartChecker(start_response)
                   app_iter = self.application(environ, sr_checker)
                   return self.make_catching_iter(app_iter, environ, sr_checker)
               except:
&amp;gt;&amp;gt;  app_iter = self.application(environ, sr_checker)
Module beaker.middleware:73 in __call__
&amp;lt;&amp;lt;                                                     self.cache_manager)
               environ[self.environ_key] = self.cache_manager
               return self.app(environ, start_response)
&amp;gt;&amp;gt;  return self.app(environ, start_response)
Module beaker.middleware:152 in __call__
&amp;lt;&amp;lt;                          headers.append(('Set-cookie', cookie))
                   return start_response(status, headers, exc_info)
               return self.wrap_app(environ, session_start_response)
           def _get_session(self):
&amp;gt;&amp;gt;  return self.wrap_app(environ, session_start_response)
Module routes.middleware:130 in __call__
&amp;lt;&amp;lt;                  environ['SCRIPT_NAME'] = environ['SCRIPT_NAME'][:-1]
               response = self.app(environ, start_response)
               # Wrapped in try as in rare cases the attribute will be gone already
&amp;gt;&amp;gt;  response = self.app(environ, start_response)
Module pylons.wsgiapp:125 in __call__
&amp;lt;&amp;lt;
               controller = self.resolve(environ, start_response)
               response = self.dispatch(controller, environ, start_response)
               if 'paste.testing_variables' in environ and hasattr(response,
&amp;gt;&amp;gt;  response = self.dispatch(controller, environ, start_response)
Module pylons.wsgiapp:324 in dispatch
&amp;lt;&amp;lt;          if log_debug:
                   log.debug("Calling controller class with WSGI interface")
               return controller(environ, start_response)
           def load_test_env(self, environ):
&amp;gt;&amp;gt;  return controller(environ, start_response)
Module ckan.lib.base:73 in __call__
&amp;lt;&amp;lt;          # available in environ['pylons.routes_dict']
               try:
                   return WSGIController.__call__(self, environ, start_response)
               finally:
                   model.Session.remove()
&amp;gt;&amp;gt;  return WSGIController.__call__(self, environ, start_response)
Module pylons.controllers.core:221 in __call__
&amp;lt;&amp;lt;                  return response(environ, self.start_response)
               response = self._dispatch_call()
               if not start_response_called:
                   self.start_response = start_response
&amp;gt;&amp;gt;  response = self._dispatch_call()
Module pylons.controllers.core:172 in _dispatch_call
&amp;lt;&amp;lt;              req.environ['pylons.action_method'] = func
                   response = self._inspect_call(func)
               else:
                   if log_debug:
&amp;gt;&amp;gt;  response = self._inspect_call(func)
Module pylons.controllers.core:107 in _inspect_call
&amp;lt;&amp;lt;                        func.__name__, args)
               try:
                   result = self._perform_call(func, args)
               except HTTPException, httpe:
                   if log_debug:
&amp;gt;&amp;gt;  result = self._perform_call(func, args)
Module pylons.controllers.core:60 in _perform_call
&amp;lt;&amp;lt;          """Hide the traceback for everything above this method"""
               __traceback_hide__ = 'before_and_this'
               return func(**args)
           def _inspect_call(self, func):
&amp;gt;&amp;gt;  return func(**args)
Module ckan.controllers.revision:119 in diff
&amp;lt;&amp;lt;          c.revision_to = model.Session.query(model.Revision).get(
                   request.params.getone('diff'))
               diff = pkg.diff(c.revision_to, c.revision_from)
               c.diff = diff.items()
               c.diff.sort()
&amp;gt;&amp;gt;  diff = pkg.diff(c.revision_to, c.revision_from)
Module ckan.model.package:340 in diff
&amp;lt;&amp;lt;                              display_id = to_obj_rev.tag.name
                               elif obj_class.__name__ == 'PackageExtra':
                                   display_id = to_obj_rev.key
                               else:
                                   display_id = related_obj_id[:4]
&amp;gt;&amp;gt;  display_id = to_obj_rev.key
AttributeError: 'NoneType' object has no attribute 'key'
CGI Variables
AUTH_TYPE	'cookie'
DOCUMENT_ROOT	'/htdocs'
GATEWAY_INTERFACE	'CGI/1.1'
HTTP_ACCEPT	'application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5'
HTTP_ACCEPT_CHARSET	'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
HTTP_ACCEPT_ENCODING	'gzip'
HTTP_ACCEPT_LANGUAGE	'en-US,en;q=0.8'
HTTP_CACHE_CONTROL	'max-age=0'
HTTP_COOKIE	'__utmz=27730403.1281000628.1.6.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=ckan; auth_tkt="e919c7bb40f890a0184ed7be95465e1a4c6d130bhttp://pudo.org/!"; auth_tkt="e919c7bb40f890a0184ed7be95465e1a4c6d130bhttp://pudo.org/!"; __utma=27730403.1381387877.1281962773.1282248244.1282250173.11; __utmc=27730403; __utmb=27730403.6.10.1282250173'
HTTP_HOST	'ckan.net'
HTTP_REFERER	'http://ckan.net/package/history/dbtune-audioscrobbler'
HTTP_USER_AGENT	'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.6 (KHTML, like Gecko) Chrome/6.0.490.1 Safari/534.6'
PATH	'/usr/local/bin:/usr/bin:/bin'
PATH_INFO	'/revision/diff/dbtune-audioscrobbler'
PATH_TRANSLATED	'/home/okfn/var/srvc/ckan.net/pyenv/bin/ckan.net.py/revision/diff/dbtune-audioscrobbler'
QUERY_STRING	'diff=66a47b9e-232a-4838-8674-66fa1a5c76e1&amp;amp;oldid=a99c98be-767a-4e49-9025-2472b2d18b9c'
REMOTE_ADDR	'92.226.62.168'
REMOTE_PORT	'55102'
REMOTE_USER	'http://pudo.org/'
REMOTE_USER_TOKENS	['']
REQUEST_METHOD	'GET'
REQUEST_URI	'/revision/diff/dbtune-audioscrobbler?diff=66a47b9e-232a-4838-8674-66fa1a5c76e1&amp;amp;oldid=a99c98be-767a-4e49-9025-2472b2d18b9c'
SCRIPT_FILENAME	'/home/okfn/var/srvc/ckan.net/pyenv/bin/ckan.net.py'
SCRIPT_URI	'http://ckan.net/revision/diff/dbtune-audioscrobbler'
SCRIPT_URL	'/revision/diff/dbtune-audioscrobbler'
SERVER_ADDR	'10.226.226.118'
SERVER_ADMIN	'[no address given]'
SERVER_NAME	'ckan.net'
SERVER_PORT	'80'
SERVER_PROTOCOL	'HTTP/1.1'
SERVER_SIGNATURE	'&amp;lt;address&amp;gt;Apache/2.2.9 (Debian) mod_wsgi/2.5 Python/2.5.2 Server at ckan.net Port 80&amp;lt;/address&amp;gt;\n'
SERVER_SOFTWARE	'Apache/2.2.9 (Debian) mod_wsgi/2.5 Python/2.5.2'
WSGI Variables
application	&amp;lt;beaker.middleware.CacheMiddleware object at 0xbb528cc&amp;gt;
beaker.cache	&amp;lt;beaker.cache.CacheManager object at 0xbb528ec&amp;gt;
beaker.get_session	&amp;lt;bound method SessionMiddleware._get_session of &amp;lt;beaker.middleware.SessionMiddleware object at 0xbb5286c&amp;gt;&amp;gt;
beaker.session	{'_accessed_time': 1282252047.603267, '_creation_time': 1282252047.603267}
mod_wsgi.application_group	'ckan.net|'
mod_wsgi.callable_object	'application'
mod_wsgi.listener_host	''
mod_wsgi.listener_port	'80'
mod_wsgi.process_group	''
mod_wsgi.reload_mechanism	'0'
mod_wsgi.script_reloading	'1'
mod_wsgi.version	(2, 5)
paste.cookies	(&amp;lt;SimpleCookie: __utma='27730403.1381387877.1281962773.1282248244.1282250173.11' __utmb='27730403.6.10.1282250173' __utmc='27730403' __utmz='27730403.1281000628.1.6.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=ckan' auth_tkt='e919c7bb40f890a0184ed7be95465e1a4c6d130bhttp://pudo.org/!'&amp;gt;, '__utmz=27730403.1281000628.1.6.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=ckan; auth_tkt="e919c7bb40f890a0184ed7be95465e1a4c6d130bhttp://pudo.org/!"; auth_tkt="e919c7bb40f890a0184ed7be95465e1a4c6d130bhttp://pudo.org/!"; __utma=27730403.1381387877.1281962773.1282248244.1282250173.11; __utmc=27730403; __utmb=27730403.6.10.1282250173')
paste.parsed_querystring	([('diff', '66a47b9e-232a-4838-8674-66fa1a5c76e1'), ('oldid', 'a99c98be-767a-4e49-9025-2472b2d18b9c')], 'diff=66a47b9e-232a-4838-8674-66fa1a5c76e1&amp;amp;oldid=a99c98be-767a-4e49-9025-2472b2d18b9c')
paste.registry	&amp;lt;paste.registry.Registry object at 0xf702aec&amp;gt;
paste.throw_errors	True
pylons.action_method	&amp;lt;bound method RevisionController.diff of &amp;lt;ckan.controllers.revision.RevisionController object at 0xf6eaf0c&amp;gt;&amp;gt;
pylons.controller	&amp;lt;ckan.controllers.revision.RevisionController object at 0xf6eaf0c&amp;gt;
pylons.environ_config	{'session': 'beaker.session', 'cache': 'beaker.cache'}
pylons.pylons	&amp;lt;pylons.util.PylonsContext object at 0xf6eaa8c&amp;gt;
pylons.routes_dict	{'action': u'diff', 'controller': u'revision', 'id': u'dbtune-audioscrobbler'}
repoze.who.identity	&amp;lt;repoze.who identity (hidden, dict-like) at 280815340&amp;gt;
repoze.who.logger	&amp;lt;logging.Logger instance at 0xbcdfccc&amp;gt;
repoze.who.plugins	{'openid': &amp;lt;OpenIdIdentificationPlugin 196612236&amp;gt;, 'auth_tkt': &amp;lt;AuthTktCookiePlugin 198048140&amp;gt;}
routes.route	&amp;lt;routes.route.Route object at 0xbbc44cc&amp;gt;
routes.url	&amp;lt;routes.util.URLGenerator object at 0xf5e55ec&amp;gt;
webob._parsed_query_vars	(GET([('diff', '66a47b9e-232a-4838-8674-66fa1a5c76e1'), ('oldid', 'a99c98be-767a-4e49-9025-2472b2d18b9c')]), 'diff=66a47b9e-232a-4838-8674-66fa1a5c76e1&amp;amp;oldid=a99c98be-767a-4e49-9025-2472b2d18b9c')
webob.adhoc_attrs	{'language': 'en-us'}
wsgi process	'Multi process AND threads (?)'
wsgi.file_wrapper	&amp;lt;built-in method file_wrapper of mod_wsgi.Adapter object at 0xfe0b0b0&amp;gt;
wsgiorg.routing_args	(&amp;lt;routes.util.URLGenerator object at 0xf5e55ec&amp;gt;, {'action': u'diff', 'controller': u'revision', 'id': u'dbtune-audioscrobbler'})
&lt;/pre&gt;</description>
    <language>en-us</language>
    <image>
      <title>CKAN</title>
      <url>http://assets.okfn.org/p/ckan/img/ckan_logo_shortname.png</url>
      <link>http://localhost/ticket/463</link>
    </image>
    <generator>Trac 0.12.3</generator>
    <item>
      
        <dc:creator>dread</dc:creator>

      <pubDate>Fri, 20 Aug 2010 12:14:40 GMT</pubDate>
      <title></title>
      <link>http://localhost/ticket/463#comment:1</link>
      <guid isPermaLink="false">http://localhost/ticket/463#comment:1</guid>
      <description>
        &lt;p&gt;
Could be related to this shortly afterwards at 22:32:
&lt;/p&gt;
&lt;pre class="wiki"&gt;Mail
Contacts
Tasks
Compose mail
Inbox (11364)
Starred
Sent Mail
Drafts (10)
alert (5090)
bts (383)
Notes
okfn (134)
okfn-lists (26)
osm (462)
8 more▼
David Read
Google Docs
Invite a friend
&amp;gt;&amp;lt;
About these ads
UK Ruby on Rails £10/m - www.1stEasy.com/ruby-on-rails - 1) Phusion Passenger LAMP stack. 2) Great support. 3) Try us free :)
« Back to InboxArchiveReport spamDeleteMove to Labels More actions
‹ Newer 29 of 19141 Older ›
WebApp Error: &amp;lt;class 'genshi.template.eval.UndefinedError'&amp;gt;: None has no member named "id"
Inbox
X
Reply
no-reply@ckan.net to ckan-sysadmin
show details 22:32 (14 hours ago)
URL: http://ckan.net/revision/diff/dbtune-audioscrobbler?diff=a99c98be-767a-4e49-9025-2472b2d18b9c&amp;amp;oldid=66a47b9e-232a-4838-8674-66fa1a5c76e1),
Module weberror.errormiddleware:162 in __call__
&amp;lt;&amp;lt;              __traceback_supplement__ = Supplement, self, environ
                   sr_checker = ResponseStartChecker(start_response)
                   app_iter = self.application(environ, sr_checker)
                   return self.make_catching_iter(app_iter, environ, sr_checker)
               except:
&amp;gt;&amp;gt;  app_iter = self.application(environ, sr_checker)
Module beaker.middleware:73 in __call__
&amp;lt;&amp;lt;                                                     self.cache_manager)
               environ[self.environ_key] = self.cache_manager
               return self.app(environ, start_response)
&amp;gt;&amp;gt;  return self.app(environ, start_response)
Module beaker.middleware:152 in __call__
&amp;lt;&amp;lt;                          headers.append(('Set-cookie', cookie))
                   return start_response(status, headers, exc_info)
               return self.wrap_app(environ, session_start_response)
           def _get_session(self):
&amp;gt;&amp;gt;  return self.wrap_app(environ, session_start_response)
Module routes.middleware:130 in __call__
&amp;lt;&amp;lt;                  environ['SCRIPT_NAME'] = environ['SCRIPT_NAME'][:-1]
               response = self.app(environ, start_response)
               # Wrapped in try as in rare cases the attribute will be gone already
&amp;gt;&amp;gt;  response = self.app(environ, start_response)
Module pylons.wsgiapp:125 in __call__
&amp;lt;&amp;lt;
               controller = self.resolve(environ, start_response)
               response = self.dispatch(controller, environ, start_response)
               if 'paste.testing_variables' in environ and hasattr(response,
&amp;gt;&amp;gt;  response = self.dispatch(controller, environ, start_response)
Module pylons.wsgiapp:324 in dispatch
&amp;lt;&amp;lt;          if log_debug:
                   log.debug("Calling controller class with WSGI interface")
               return controller(environ, start_response)
           def load_test_env(self, environ):
&amp;gt;&amp;gt;  return controller(environ, start_response)
Module ckan.lib.base:73 in __call__
&amp;lt;&amp;lt;          # available in environ['pylons.routes_dict']
               try:
                   return WSGIController.__call__(self, environ, start_response)
               finally:
                   model.Session.remove()
&amp;gt;&amp;gt;  return WSGIController.__call__(self, environ, start_response)
Module pylons.controllers.core:221 in __call__
&amp;lt;&amp;lt;                  return response(environ, self.start_response)
               response = self._dispatch_call()
               if not start_response_called:
                   self.start_response = start_response
&amp;gt;&amp;gt;  response = self._dispatch_call()
Module pylons.controllers.core:172 in _dispatch_call
&amp;lt;&amp;lt;              req.environ['pylons.action_method'] = func
                   response = self._inspect_call(func)
               else:
                   if log_debug:
&amp;gt;&amp;gt;  response = self._inspect_call(func)
Module pylons.controllers.core:107 in _inspect_call
&amp;lt;&amp;lt;                        func.__name__, args)
               try:
                   result = self._perform_call(func, args)
               except HTTPException, httpe:
                   if log_debug:
&amp;gt;&amp;gt;  result = self._perform_call(func, args)
Module pylons.controllers.core:60 in _perform_call
&amp;lt;&amp;lt;          """Hide the traceback for everything above this method"""
               __traceback_hide__ = 'before_and_this'
               return func(**args)
           def _inspect_call(self, func):
&amp;gt;&amp;gt;  return func(**args)
Module ckan.controllers.revision:123 in diff
&amp;lt;&amp;lt;          c.diff.sort()
               c.pkg = pkg
               return render('revision/diff.html')
           def _has_purge_permissions(self):
&amp;gt;&amp;gt;  return render('revision/diff.html')
Module ckan.lib.base:38 in render
&amp;lt;&amp;lt;          return literal(stream.render(method=method, encoding=None))
           return render_template()
       #return cached_template(template_name, render_template, cache_key=cache_key,
       #                       cache_type=cache_type, cache_expire=cache_expire,
&amp;gt;&amp;gt;  return render_template()
Module ckan.lib.base:36 in render_template
&amp;lt;&amp;lt;              stream = _filter(stream)
               return literal(stream.render(method=method, encoding=None))
           return render_template()
&amp;gt;&amp;gt;  return literal(stream.render(method=method, encoding=None))
Module genshi.core:183 in render
&amp;lt;&amp;lt;              method = self.serializer or 'xml'
               generator = self.serialize(method=method, **kwargs)
               return encode(generator, method=method, encoding=encoding, out=out)
           def select(self, path, namespaces=None, variables=None):
&amp;gt;&amp;gt;  return encode(generator, method=method, encoding=encoding, out=out)
Module genshi.output:57 in encode
&amp;lt;&amp;lt;          _encode = lambda string: string
           if out is None:
               return _encode(''.join(list(iterator)))
           for chunk in iterator:
               out.write(_encode(chunk))
&amp;gt;&amp;gt;  return _encode(''.join(list(iterator)))
Module genshi.output:339 in __call__
&amp;lt;&amp;lt;          for filter_ in self.filters:
                   stream = filter_(stream)
               for kind, data, pos in stream:
                   cached = cache_get((kind, data))
                   if cached is not None:
&amp;gt;&amp;gt;  for kind, data, pos in stream:
Module genshi.output:670 in __call__
&amp;lt;&amp;lt;          _gen_prefix = _gen_prefix().next
               for kind, data, pos in stream:
                   output = cache_get((kind, data))
                   if output is not None:
&amp;gt;&amp;gt;  for kind, data, pos in stream:
Module genshi.output:771 in __call__
&amp;lt;&amp;lt;          push_text = textbuf.append
               pop_text = textbuf.pop
               for kind, data, pos in chain(stream, [(None, None, None)]):
                   if kind is TEXT:
&amp;gt;&amp;gt;  for kind, data, pos in chain(stream, [(None, None, None)]):
Module genshi.output:586 in __call__
&amp;lt;&amp;lt;      def __call__(self, stream):
               prev = (None, None, None)
               for ev in stream:
                   if prev[0] is START:
                       if ev[0] is END:
&amp;gt;&amp;gt;  for ev in stream:
Module genshi.core:288 in _ensure
&amp;lt;&amp;lt;      # unchanged
           yield event
           for event in stream:
               yield event
&amp;gt;&amp;gt;  for event in stream:
Module genshi.template.base:618 in _include
&amp;lt;&amp;lt;                      tmpl = self.loader.load(href, relative_to=event[2][0],
                                                   cls=cls or self.__class__)
                           for event in tmpl.generate(ctxt, **vars):
                               yield event
                       except TemplateNotFound:
&amp;gt;&amp;gt;  for event in tmpl.generate(ctxt, **vars):
Module genshi.template.base:618 in _include
&amp;lt;&amp;lt;                      tmpl = self.loader.load(href, relative_to=event[2][0],
                                                   cls=cls or self.__class__)
                           for event in tmpl.generate(ctxt, **vars):
                               yield event
                       except TemplateNotFound:
&amp;gt;&amp;gt;  for event in tmpl.generate(ctxt, **vars):
Module genshi.template.base:618 in _include
&amp;lt;&amp;lt;                      tmpl = self.loader.load(href, relative_to=event[2][0],
                                                   cls=cls or self.__class__)
                           for event in tmpl.generate(ctxt, **vars):
                               yield event
                       except TemplateNotFound:
&amp;gt;&amp;gt;  for event in tmpl.generate(ctxt, **vars):
Module genshi.template.base:605 in _include
&amp;lt;&amp;lt;          from genshi.template.loader import TemplateNotFound
               for event in stream:
                   if event[0] is INCLUDE:
                       href, cls, fallback = event[1]
&amp;gt;&amp;gt;  for event in stream:
Module genshi.template.markup:378 in _match
&amp;lt;&amp;lt;                      for event in self._match(self._flatten(template, ctxt,
                                                                  **vars),
                                                    ctxt, start=idx + 1, **vars):
                               yield event
&amp;gt;&amp;gt;  ctxt, start=idx + 1, **vars):
Module genshi.template.markup:327 in _match
&amp;lt;&amp;lt;                      break
               for event in stream:
                   # We (currently) only care about start and end events for matching
&amp;gt;&amp;gt;  for event in stream:
Module genshi.template.base:565 in _flatten
&amp;lt;&amp;lt;                  elif kind is EXPR:
                           result = _eval_expr(data, ctxt, vars)
                           if result is not None:
                               # First check for a string, otherwise the iterable test
&amp;gt;&amp;gt;  result = _eval_expr(data, ctxt, vars)
Module genshi.template.base:277 in _eval_expr
&amp;lt;&amp;lt;      if vars:
               ctxt.push(vars)
           retval = expr.evaluate(ctxt)
           if vars:
               ctxt.pop()
&amp;gt;&amp;gt;  retval = expr.evaluate(ctxt)
Module genshi.template.eval:178 in evaluate
&amp;lt;&amp;lt;          __traceback_hide__ = 'before_and_this'
               _globals = self._globals(data)
               return eval(self.code, _globals, {'__data__': data})
&amp;gt;&amp;gt;  return eval(self.code, _globals, {'__data__': data})
Module ?:11 in &amp;lt;Expression u'c.revision_from.id'&amp;gt;
&amp;lt;&amp;lt;
           &amp;lt;p&amp;gt;
           From: ${c.revision_from.id} - ${c.revision_from.timestamp}
           &amp;lt;/p&amp;gt;
&amp;gt;&amp;gt;  From: ${c.revision_from.id} - ${c.revision_from.timestamp}
Module genshi.template.eval:324 in lookup_attr
&amp;lt;&amp;lt;                      val = obj[key]
                       except (KeyError, TypeError):
                           val = cls.undefined(key, owner=obj)
               return val
&amp;gt;&amp;gt;  val = cls.undefined(key, owner=obj)
Module genshi.template.eval:410 in undefined
&amp;lt;&amp;lt;          """Raise an ``UndefinedError`` immediately."""
               __traceback_hide__ = True
               raise UndefinedError(key, owner=owner)
&amp;gt;&amp;gt;  raise UndefinedError(key, owner=owner)
UndefinedError: None has no member named "id"
CGI Variables
DOCUMENT_ROOT	'/htdocs'
GATEWAY_INTERFACE	'CGI/1.1'
HTTP_ACCEPT	'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*'
HTTP_ACCEPT_ENCODING	'gzip, deflate'
HTTP_ACCEPT_LANGUAGE	'en-us'
HTTP_CONNECTION	'TE, close'
HTTP_HOST	'ckan.net'
HTTP_TE	'deflate,gzip;q=0.3'
HTTP_UA_CPU	'x86'
HTTP_USER_AGENT	'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; MS-RTC LM 8)'
PATH	'/usr/local/bin:/usr/bin:/bin'
PATH_INFO	'/revision/diff/dbtune-audioscrobbler'
PATH_TRANSLATED	'/home/okfn/var/srvc/ckan.net/pyenv/bin/ckan.net.py/revision/diff/dbtune-audioscrobbler'
QUERY_STRING	'diff=a99c98be-767a-4e49-9025-2472b2d18b9c&amp;amp;oldid=66a47b9e-232a-4838-8674-66fa1a5c76e1),'
REMOTE_ADDR	'89.145.108.201'
REMOTE_PORT	'39586'
REQUEST_METHOD	'GET'
REQUEST_URI	'/revision/diff/dbtune-audioscrobbler?diff=a99c98be-767a-4e49-9025-2472b2d18b9c&amp;amp;oldid=66a47b9e-232a-4838-8674-66fa1a5c76e1),'
SCRIPT_FILENAME	'/home/okfn/var/srvc/ckan.net/pyenv/bin/ckan.net.py'
SCRIPT_URI	'http://ckan.net/revision/diff/dbtune-audioscrobbler'
SCRIPT_URL	'/revision/diff/dbtune-audioscrobbler'
SERVER_ADDR	'10.226.226.118'
SERVER_ADMIN	'[no address given]'
SERVER_NAME	'ckan.net'
SERVER_PORT	'80'
SERVER_PROTOCOL	'HTTP/1.1'
SERVER_SIGNATURE	'&amp;lt;address&amp;gt;Apache/2.2.9 (Debian) mod_wsgi/2.5 Python/2.5.2 Server at ckan.net Port 80&amp;lt;/address&amp;gt;\n'
SERVER_SOFTWARE	'Apache/2.2.9 (Debian) mod_wsgi/2.5 Python/2.5.2'
WSGI Variables
application	&amp;lt;beaker.middleware.CacheMiddleware object at 0xaa5f14c&amp;gt;
beaker.cache	&amp;lt;beaker.cache.CacheManager object at 0xaa5f16c&amp;gt;
beaker.get_session	&amp;lt;bound method SessionMiddleware._get_session of &amp;lt;beaker.middleware.SessionMiddleware object at 0xaa5f0ec&amp;gt;&amp;gt;
beaker.session	{'_accessed_time': 1282253553.63995, '_creation_time': 1282253553.63995}
mod_wsgi.application_group	'ckan.net|'
mod_wsgi.callable_object	'application'
mod_wsgi.listener_host	''
mod_wsgi.listener_port	'80'
mod_wsgi.process_group	''
mod_wsgi.reload_mechanism	'0'
mod_wsgi.script_reloading	'1'
mod_wsgi.version	(2, 5)
paste.cookies	(&amp;lt;SimpleCookie: &amp;gt;, '')
paste.parsed_querystring	([('diff', 'a99c98be-767a-4e49-9025-2472b2d18b9c'), ('oldid', '66a47b9e-232a-4838-8674-66fa1a5c76e1),')], 'diff=a99c98be-767a-4e49-9025-2472b2d18b9c&amp;amp;oldid=66a47b9e-232a-4838-8674-66fa1a5c76e1),')
paste.registry	&amp;lt;paste.registry.Registry object at 0x11f9d8cc&amp;gt;
paste.throw_errors	True
pylons.action_method	&amp;lt;bound method RevisionController.diff of &amp;lt;ckan.controllers.revision.RevisionController object at 0x1200454c&amp;gt;&amp;gt;
pylons.controller	&amp;lt;ckan.controllers.revision.RevisionController object at 0x1200454c&amp;gt;
pylons.environ_config	{'session': 'beaker.session', 'cache': 'beaker.cache'}
pylons.pylons	&amp;lt;pylons.util.PylonsContext object at 0x11fb464c&amp;gt;
pylons.routes_dict	{'action': u'diff', 'controller': u'revision', 'id': u'dbtune-audioscrobbler'}
repoze.who.logger	&amp;lt;logging.Logger instance at 0xab7168c&amp;gt;
repoze.who.plugins	{'openid': &amp;lt;OpenIdIdentificationPlugin 179181772&amp;gt;, 'auth_tkt': &amp;lt;AuthTktCookiePlugin 179770188&amp;gt;}
routes.route	&amp;lt;routes.route.Route object at 0xaa42fac&amp;gt;
routes.url	&amp;lt;routes.util.URLGenerator object at 0x11f9d42c&amp;gt;
webob._parsed_query_vars	(GET([('diff', 'a99c98be-767a-4e49-9025-2472b2d18b9c'), ('oldid', '66a47b9e-232a-4838-8674-66fa1a5c76e1),')]), 'diff=a99c98be-767a-4e49-9025-2472b2d18b9c&amp;amp;oldid=66a47b9e-232a-4838-8674-66fa1a5c76e1),')
webob.adhoc_attrs	{'language': 'en-us'}
wsgi process	'Multi process AND threads (?)'
wsgi.file_wrapper	&amp;lt;built-in method file_wrapper of mod_wsgi.Adapter object at 0x11c20698&amp;gt;
wsgiorg.routing_args	(&amp;lt;routes.util.URLGenerator object at 0x11f9d42c&amp;gt;, {'action': u'diff', 'controller': u'revision', 'id': u'dbtune-audioscrobbler'})
&lt;/pre&gt;
      </description>
      <category>Ticket</category>
    </item><item>
      
        <dc:creator>dread</dc:creator>

      <pubDate>Thu, 13 Jan 2011 10:55:48 GMT</pubDate>
      <title>status changed; resolution, component set</title>
      <link>http://localhost/ticket/463#comment:2</link>
      <guid isPermaLink="false">http://localhost/ticket/463#comment:2</guid>
      <description>
          &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;status&lt;/strong&gt;
                changed from &lt;em&gt;new&lt;/em&gt; to &lt;em&gt;closed&lt;/em&gt;
            &lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;resolution&lt;/strong&gt;
                set to &lt;em&gt;worksforme&lt;/em&gt;
            &lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;component&lt;/strong&gt;
                set to &lt;em&gt;ckan&lt;/em&gt;
            &lt;/li&gt;
          &lt;/ul&gt;
        &lt;p&gt;
Haven't seen this for ages.
&lt;/p&gt;
      </description>
      <category>Ticket</category>
    </item>
 </channel>
</rss>