Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #44004 > unrolled thread

Porting 2.x to 3.3: BaseHTTPServer

Started byChris Angelico <rosuav@gmail.com>
First post2013-04-21 23:46 +1000
Last post2013-04-22 00:13 +1000
Articles 3 — 2 participants

Back to article view | Back to comp.lang.python


Contents

  Porting 2.x to 3.3: BaseHTTPServer Chris Angelico <rosuav@gmail.com> - 2013-04-21 23:46 +1000
    Re: Porting 2.x to 3.3: BaseHTTPServer Roy Smith <roy@panix.com> - 2013-04-21 10:01 -0400
      Re: Porting 2.x to 3.3: BaseHTTPServer Chris Angelico <rosuav@gmail.com> - 2013-04-22 00:13 +1000

#44004 — Porting 2.x to 3.3: BaseHTTPServer

FromChris Angelico <rosuav@gmail.com>
Date2013-04-21 23:46 +1000
SubjectPorting 2.x to 3.3: BaseHTTPServer
Message-ID<mailman.879.1366551990.3114.python-list@python.org>
I'm porting an old project to Python 3, with the intention of making
one codebase that will still run on 2.6/2.7 as well as 3.2+ (or 3.3+,
if 3.2 is in any way annoying). My first step was to run the code
through 2to3, and the basics are already sorted out by that. Got one
question though, and it's more of an advice one.

In the current version of the code, I use BaseHTTPServer as the main
structure of the request handler. 2to3 translated this into
http.server, which seems to be the nearest direct translation. But is
that the best way to go about making a simple HTTP server?

Also, it's expecting bytes everywhere, and I can't find a simple way
to declare an encoding and let self.wfile.write() accept str. Do I
have to explicitly encode everything that I write, or is there a
cleaner way? (I could always make my own helper function, but would
prefer something standard if there's a way.)

The current version of the code is at: https://github.com/Rosuav/Yosemite

It's ugly in quite a few places; when I wrote most of that, I was
fairly new to Python, so I made a lot of naughty mistakes (bare except
clauses all over the place, ugh!). Adding support for Python 3 seems
like a good excuse to clean all that up, too :)

ChrisA

[toc] | [next] | [standalone]


#44005

FromRoy Smith <roy@panix.com>
Date2013-04-21 10:01 -0400
Message-ID<roy-5D8274.10011421042013@news.panix.com>
In reply to#44004
In article <mailman.879.1366551990.3114.python-list@python.org>,
 Chris Angelico <rosuav@gmail.com> wrote:

> In the current version of the code, I use BaseHTTPServer as the main
> structure of the request handler. 2to3 translated this into
> http.server, which seems to be the nearest direct translation. But is
> that the best way to go about making a simple HTTP server?

For most purposes, I would suggest one of the third-party web 
frameworks.  For simple things, I'm partial to Tornado, but it's not the 
only choice.  The advantage of these frameworks is they give you a lot 
of boilerplate code that handles all the low-level protocol gunk and 
lets you concentrate on writing your application logic.

My gut feeling is that nobody should ever be using BaseHTTPServer for 
anything other than as a learning exercise (or as a base on which to 
build other frameworks).  It's just too low level.  I haven't used the 
3.x http.server, but http.server looks like much of the same.

[toc] | [prev] | [next] | [standalone]


#44006

FromChris Angelico <rosuav@gmail.com>
Date2013-04-22 00:13 +1000
Message-ID<mailman.880.1366553632.3114.python-list@python.org>
In reply to#44005
On Mon, Apr 22, 2013 at 12:01 AM, Roy Smith <roy@panix.com> wrote:
> In article <mailman.879.1366551990.3114.python-list@python.org>,
>  Chris Angelico <rosuav@gmail.com> wrote:
>
>> In the current version of the code, I use BaseHTTPServer as the main
>> structure of the request handler. 2to3 translated this into
>> http.server, which seems to be the nearest direct translation. But is
>> that the best way to go about making a simple HTTP server?
>
> For most purposes, I would suggest one of the third-party web
> frameworks.  For simple things, I'm partial to Tornado, but it's not the
> only choice.  The advantage of these frameworks is they give you a lot
> of boilerplate code that handles all the low-level protocol gunk and
> lets you concentrate on writing your application logic.
>
> My gut feeling is that nobody should ever be using BaseHTTPServer for
> anything other than as a learning exercise (or as a base on which to
> build other frameworks).  It's just too low level.  I haven't used the
> 3.x http.server, but http.server looks like much of the same.

Have a look at the code in question:

https://github.com/Rosuav/Yosemite/blob/master/Yosemite.py#L81

It's REALLY simple. I don't need any sort of framework; it's basically
just using a web browser as its UI, to save on writing a client. So
I'm looking for the simplest possible option; I don't need security or
anything (this is designed for a trusted LAN), nor scaleability (we're
talking queries per hour, not per second).

I'm actually looking at cutting it back even further. There are
os.system() calls that I'm thinking should possibly become popen(),
and maybe copy a binary into /tmp and giving a full path to it, as
sometimes this is used on a low-end system and needs to perform
actions with low latency.

ChrisA

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web