Package pythonutils :: Module cgiutils
[hide private]
[frames] | no frames]

Module cgiutils
source code

Functions [hide private]
  getrequest(valuelist=None, nolist=False)
Initialise the FieldStorage and return the specified list of values as a dictionary.
  getform(valuelist, theform, notpresent='', nolist=False)
This function, given a CGI form, extracts the data from it, based on valuelist passed in.
  getall(theform, nolist=False)
Passed a form (FieldStorage instance) return all the values.
  isblank(indict)
Passed an indict of values it checks if any of the values are set.
  formencode(theform)
A version that turns a cgi form into a single string.
  formdecode(thestring)
Decode a single string back into a form like dictionary.
  mailme(to_email, msg, email_subject=None, from_email=None, host='localhost', port=25, username=None, password=None, html=True, sendmail=None)
This function will send an email using ``sendmail`` or ``smtplib``, depending on what parameters you pass it.
  sendmailme(to_email, msg, email_subject=None, from_email=None, html=True, sendmail=SENDMAIL)
Quick and dirty, pipe a message to sendmail.
  createhtmlmail(subject, html, text=None)
Create a mime-message that will render as HTML or text as appropriate.
  environdata()
Returns some data about the CGI environment, in a way that can be mailed.
  validemail(email)
A quick function to do a basic email validation.
  error(errorval='')
The generic error function.
  makeindexline(url, startpage, total, numonpage=10, pagesonscreen=5)
Make a menu line for a given number of inputs, with a certain number per page.
  istrue(value)
Accepts a string as input.
  randomstring(length)
Return a random string of length 'length'.
  cgiprint(inline='', unbuff=False, line_end='\r\n')
Print to the stdout.
  ucgiprint(inline='', unbuff=False, encoding='UTF-8', line_end='\r\n')
A unicode version of cgiprint.
  replace(instring, indict)
This function provides a simple but effective template system for your html pages.
  blacklisted(ip, DNSBL_HOST='sbl-xbl.spamhaus.org')
Returns True if ip address is a blacklisted IP (i.e.

Variables [hide private]
__version__  
serverline  
SENDMAIL  
validchars  
alphanums  

Imports: os, sys

Function Details [hide private]

getrequest(valuelist=None, nolist=False)

source code 

Initialise the FieldStorage and return the specified list of values as a dictionary.

If you don't specify a list of values, then all values will be returned.

If you set nolist to True then any parameters supplied as lists will only have their first entry returned.

getform(valuelist, theform, notpresent='', nolist=False)

source code 

This function, given a CGI form, extracts the data from it, based on valuelist passed in. Any non-present values are set to '' - although this can be changed.

It also takes a keyword argument 'nolist'. If this is True list values only return their first value.

Returns a dictionary.

getall(theform, nolist=False)

source code 

Passed a form (FieldStorage instance) return all the values. This doesn't take into account file uploads.

Also accepts the 'nolist' keyword argument as getform.

Returns a dictionary.

isblank(indict)

source code 

Passed an indict of values it checks if any of the values are set.

Returns True if every member of the indict is empty (evaluates as False).

I use it on a form processed with getform to tell if my CGI has been activated without any values.

formencode(theform)

source code 
A version that turns a cgi form into a single string. It only handles single and list values, not multipart. This allows the contents of a form requested to be encoded into a single value as part of another request.

formdecode(thestring)

source code 
Decode a single string back into a form like dictionary.

mailme(to_email, msg, email_subject=None, from_email=None, host='localhost', port=25, username=None, password=None, html=True, sendmail=None)

source code 

This function will send an email using ``sendmail`` or ``smtplib``, depending 
on what parameters you pass it.

If you want to use ``sendmail`` to send the email then set 
``sendmail='/path/to/sendmail'``. (The ``SENDMAIL`` value from Constants_ often 
works).

If you aren't using sendmail then you will need to set ``host`` and ``port`` to 
the correct values. If your server requires authentication then you'll need to 
supply the correct ``username`` and ``password``. 

``to_email`` can be a single email address, *or* a list of addresses.

``mailme`` *assumes* you are sending an html email created by 
``createhtmlmail``. If this isn't the case then set ``html=False``.

Some servers won't let you send a message without supplying a ``from_email``.

sendmailme(to_email, msg, email_subject=None, from_email=None, html=True, sendmail=SENDMAIL)

source code 

Quick and dirty, pipe a message to sendmail. Can only work on UNIX type systems with sendmail.

Will need the path to sendmail - defaults to the 'SENDMAIL' constant.

to_email can be a single email address, or a list of addresses.

Assumes you are sending an html email created by createhtmlmail. If this isn't the case then set html=False.

createhtmlmail(subject, html, text=None)

source code 

Create a mime-message that will render as HTML or text as appropriate. If no text is supplied we use htmllib to guess a text rendering. (so html needs to be well formed)

Adapted from recipe 13.5 from Python Cookbook 2

environdata()

source code 
Returns some data about the CGI environment, in a way that can be mailed.

validemail(email)

source code 
A quick function to do a basic email validation. Returns False or the email address.

error(errorval='')

source code 
The generic error function.

makeindexline(url, startpage, total, numonpage=10, pagesonscreen=5)

source code 

Make a menu line for a given number of inputs, with a certain number per page. Will look something like :

First  Previous  22 23 24 25 26 27 28 29 30 31 32  Next  Last

Each number or word will be a link to the relevant page.

url should be in the format : '<a href="script.py?start=%s">%s</a>' - it will have the two %s values filled in by the function.

The url will automatically be put between <strong></strong> tags. Your script needs to accepts a parameter start telling it which page to display.

startpage is the page actually being viewed - which won't be a link.

total is the number of total inputs.

numonpage is the number of inputs per page - this tells makeindexline how many pages to divide the total into.

The links shown will be some before startpage and some after. The amount of pages links are shown for is pagesonscreen. (The actual total number shown will be 2 * pagesonscreen + 1).

The indexes generated are a bit like the ones created by google. Unlike google however, next and previous jump you into the middle of the next set of links. i.e. If you are on page 27 next will take you to 33 and previous to 21. (assuming pagesonscreen is 5). This makes it possible to jump more quickly through a lot of links. Also - the current page will always be in the center of the index. (So you never need Next just to get to the next page).

istrue(value)

source code 

Accepts a string as input.

If the string is one of True, On, Yes, or 1 it returns True.

If the string is one of False, Off, No, or 0 it returns False.

istrue is not case sensitive.

Any other input will raise a KeyError.

randomstring(length)

source code 

Return a random string of length 'length'.

The string is comprised only of numbers and lowercase letters.

cgiprint(inline='', unbuff=False, line_end='\r\n')

source code 

Print to the stdout.

Set unbuff=True to flush the buffer after every write.

It prints the inline you send it, followed by the line_end. By default this is ``

`` - which is the standard specified by the RFC for http headers.

ucgiprint(inline='', unbuff=False, encoding='UTF-8', line_end='\r\n')

source code 

A unicode version of cgiprint. It allows you to store everything in your script as unicode and just do your encoding in one place.

Print to the stdout.

Set unbuff=True to flush the buffer after every write.

It prints the inline you send it, followed by the line_end. By default this is ``

`` - which is the standard specified by the RFC for http headers.

inline should be a unicode string.

encoding is the encoding used to encode inline to a byte-string. It defaults to UTF-8, set it to None if you pass in inline as a byte string rather than a unicode string.

replace(instring, indict)

source code 

This function provides a simple but effective template system for your html pages. Effectively it is a convenient way of doing multiple replaces in a single string.

Takes a string and a dictionary of replacements.

This function goes through the string and replaces every occurrence of every dicitionary key with it's value.

indict can also be a list of tuples instead of a dictionary (or anything accepted by the dict function).

blacklisted(ip, DNSBL_HOST='sbl-xbl.spamhaus.org')

source code 

Returns True if ip address is a blacklisted IP (i.e. from a spammer).

ip can also be a domain name - this raises socket.gaierror if the ip is a domain name that cannot be resolved.

The DNS blacklist host (DNSBL_HOST) defaults to sbl-xbl.spamhaus.org.

Other ones you could use include :

  • 'relays.ordb.org'
  • 'dns.rfc-ignorant.org'
  • 'postmaster.rfc-ignorant.org'
  • 'http.dnsbl.sorbs.net'
  • 'misc.dnsbl.sorbs.net'
  • 'spam.dnsbl.sorbs.net'
  • 'bl.spamcop.net'

Useful for vetting user added information posted to web applications.

  • 'relays.ordb.org'
  • 'dns.rfc-ignorant.org'
  • 'postmaster.rfc-ignorant.org'
  • 'http.dnsbl.sorbs.net'
  • 'misc.dnsbl.sorbs.net'
  • 'spam.dnsbl.sorbs.net'
  • 'bl.spamcop.net'

Note

Another, possibly more effective, way of coping with spam input to web applications is to use the Akismet Web Service.

For this you can use the Python Akismet API Interface.


Variables Details [hide private]

__version__

Value:
'0.3.5'                                                                
      

serverline

Value:
'Content-Type: text/html'                                              
      

SENDMAIL

Value:
'/usr/sbin/sendmail'                                                   
      

validchars

Value:
'abcdefghijklmnopqrstuvwxyz0123456789!-_*'                             
      

alphanums

Value:
'abcdefghijklmnopqrstuvwxyz0123456789'