I have a project in production, and I decided to upgrade my app from
0.9.6.1 to 0.9.7.  I read all the docs related to upgrading.  I
decided to use "paster create myapp -t pylons" to upgrade my project.
These are the headaches I encountered:

 * Warn people that if they use paster create to upgrade their project, they
   probably don't want to override base.py.  After all, paster create doesn't
   update your controllers, and my controllers depended on the imports in
   base.py.

 * AttributeError: 'module' object has no attribute 'url_for'
   I was using "h.url_for" in a controller.  It's even mentioned in
   http://wiki.pylonshq.com/pages/viewpage.action?pageId=11174779
   (which is probably a bug).  I didn't find any mention in the upgrading docs
   that this was gone.  I added "from routes import url_for" to my helpers.py.

 * The jsonify decorator sets the Content-Type header, but it doesn't
   specify a charset.  Paste freaks out if you do that.  Here's what my
   controller does to work around that problem:

    def _jsonify(self, s):
        """This converts the jsonify decorator into a normal method.

                Sometimes a decorator isn't what I need, and treating a function
                decorator as a normal function is funky.

        HACK: The jsonify decorator sets the Content-Type header, but it
        doesn't specify a charset.  Paste freaks out if you do that.

        """
        ret = jsonify(lambda: s)()
        response.headers['Content-Type'] = 'application/json; charset=UTF-8'
        return ret

 * I updated my imports in helpers.py per the upgrading docs, but I was a bit
   surprised to find out that stylesheet_link_tag was gone.  It's been renamed
   stylesheet_link.

 * Since I decided to keep my old base.py (since I like the automatic imports),
   I had to manually change how I imported render to
   "from pylons.templating import render_mako as render".  The old render
   function is still available, and it's different from the new render
   function.  I'm guessing this isn't a big deal.

 * I had code that was setting response.status_code.  It's documented here
   http://wiki.pylonshq.com/pages/viewpage.action?pageId=11174779 that you
   should use status_int.  However, I didn't catch that and there was no
   deprecation warning.  Hence, my code failed silently, or rather it didn't
   fail at all.  It returned a 200 when I was trying to return a 400.  A
   deprecation warning would have been nice.

 * Once I got response.status_code working, it started shoving my HTML
   response into the middle of a big error template instead of just serving
   what I had.  This totally messed with my Web service which counts on
   the sparse HTML error messages I provide.  I hacked around the problem.
   In my action, I wrote:

       request.environ['error_response_is_intentional'] = True

   In error.py's document method, I wrote:

       resp = request.environ['pylons.original_response']
       if request.environ.get('error_response_is_intentional', False):
           page = resp.body
       else:
           content = literal(resp.body) or
cgi.escape(request.GET.get('message', ''))
           page = error_document_template % \
               dict(prefix=request.environ.get('SCRIPT_NAME', ''),
                    code=cgi.escape(request.GET.get('code',
str(resp.status_int))),
                    message=content)
       return pag

   This is definitely a hack.  I'm not even sure why this behavior changed.
   If I set request.status_code, and I set the HTML containing the error
   message, it should just leave it alone.

   By the way, why does the code use
   request.environ.get('pylons.original_response') when it soon does
   resp.body?  Why not do a normal dict lookup (i.e. [])?  If you don't have
   that key, you'll get a None, and resp.body will crash anyway.

Ok, I hope that was helpful.  If you want bugs for any of these, I'm
happy to submit them.

Best Regards,
-jj

-- 
In this life we cannot do great things. We can only do small things
with great love. -- Mother Teresa
http://jjinux.blogspot.com/

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" 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/pylons-discuss?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to