home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2009 May / maximum-cd-2009-05.iso / DiscContents / XBMC_for_Windows-8.10.exe / system / python / spyce / modules / request.py < prev    next >
Encoding:
Python Source  |  2008-11-03  |  7.1 KB  |  184 lines

  1. ##################################################
  2. # SPYCE - Python-based HTML Scripting
  3. # Copyright (c) 2002 Rimon Barr.
  4. #
  5. # Refer to spyce.py
  6. # CVS: $Id: request.py 5659 2006-04-27 16:15:15Z jwnmulder $
  7. ##################################################
  8.  
  9. from spyceModule import spyceModule
  10. import cgi, string, urlparse, spyceUtil
  11.  
  12. __doc__ = """Request module provides access to the browser request
  13. information. """
  14.  
  15. class request(spyceModule):
  16.   def start(self):
  17.     "Initialise module variables"
  18.     self._get = None
  19.     self._postfields = None
  20.   def uri(self, component=None):
  21.     "Return request URI, or URI component"
  22.     theuri = self._api.getRequest().env()['REQUEST_URI']
  23.     if not component:
  24.       return theuri
  25.     else:
  26.       component = string.lower(component)
  27.       if component == 'scheme': component = 0
  28.       elif component == 'location': component = 1
  29.       elif component == 'path': component = 2
  30.       elif component == 'parameters': component = 3
  31.       elif component == 'query': component = 4
  32.       elif component == 'fragment': component = 5
  33.       else: raise 'unknown uri component'
  34.       return urlparse.urlparse(theuri)[component]
  35.   def uri_scheme(self):
  36.     "Return request URI scheme, ie. http (usually)"
  37.   def uri_location(self):
  38.     "Return request URI scheme, ie. http (usually)"
  39.     return urlparse.urlparse(self.uri())[1]
  40.   def uri_path(self):
  41.     "Return request URI path component"
  42.     return urlparse.urlparse(self.uri())[2]
  43.   def method(self):
  44.     "Return request method: get/post/..."
  45.     return string.upper(self._api.getRequest().env()['REQUEST_METHOD'])
  46.   def query(self):
  47.     "Return request query string"
  48.     return self._api.getRequest().env()['QUERY_STRING']
  49.   def filename(self, relative=None):
  50.     "Return original Spyce filename"
  51.     myfile = self._api.getFilename()
  52.     if relative==None:
  53.       return myfile
  54.     else:
  55.       return os.path.normpath(os.path.join(os.path.dirname(myfile), relative))
  56.   def default(self, value, value2):
  57.     "Return value, or value2 if value==None"
  58.     if value==None: return value2
  59.     return value
  60.   def _getInit(self):
  61.     if self._get==None:
  62.       self._get = cgi.parse_qs(self.query(), 1)
  63.       self._get1 = {}
  64.       self._getL = {}
  65.       self._getL1 = {}
  66.       for key in self._get.keys():
  67.         self._getL[string.lower(key)] = []
  68.       for key in self._get.keys():
  69.         keyL = string.lower(key)
  70.         self._getL[keyL] = self._getL[keyL] + self._get[key]
  71.       for key in self._get.keys():
  72.         self._get1[key] = self._get[key][0]
  73.       for keyL in self._getL.keys():
  74.         self._getL1[keyL] = self._getL[keyL][0]
  75.   def get(self, name=None, default=None, ignoreCase=0):
  76.     "Return GET parameter(s) list(s)"
  77.     self._getInit()
  78.     if ignoreCase:
  79.       if name: name = string.lower(name)
  80.       value = spyceUtil.extractValue(self._getL, name)
  81.     else:
  82.       value = spyceUtil.extractValue(self._get, name)
  83.     return self.default(value, default)
  84.   def get1(self, name=None, default=None, ignoreCase=0):
  85.     "Return single GET parameter(s)"
  86.     self._getInit()
  87.     if ignoreCase:
  88.       if name: name = string.lower(name)
  89.       value = spyceUtil.extractValue(self._getL1, name)
  90.     else:
  91.       value = spyceUtil.extractValue(self._get1, name)
  92.     return self.default(value, default)
  93.   def _postInit(self):
  94.     if self._postfields==None:
  95.       self._post = {}
  96.       self._post1 = {}
  97.       self._file = {}
  98.       self._postL = {}
  99.       self._postL1 = {}
  100.       self._fileL = {}
  101.       self._postfields={}
  102.       try: len = int(str(self.env('CONTENT_LENGTH')))
  103.       except: len=0
  104.       if self.method()=='POST' and len:
  105.         self._postfields = cgi.FieldStorage(fp=self._api.getRequest(), environ=self.env(), keep_blank_values=1)
  106.         for key in self._postfields.keys():
  107.           if type(self._postfields[key]) == type( [] ):
  108.             self._post[key] = map(lambda attr: attr.value, self._postfields[key])
  109.             self._post1[key] = self._post[key][0]
  110.           elif not self._postfields[key].filename:
  111.             self._post[key] = [self._postfields[key].value]
  112.             self._post1[key] = self._post[key][0]
  113.           else:
  114.             self._file[key] = self._fileL[string.lower(key)] = self._postfields[key]
  115.         for key in self._post.keys():
  116.           self._postL[string.lower(key)] = []
  117.         for key in self._post.keys():
  118.           keyL = string.lower(key)
  119.           self._postL[keyL] = self._postL[keyL] + self._post[key]
  120.         for keyL in self._postL.keys():
  121.           self._postL1[keyL] = self._postL[keyL][0]
  122.   def post(self, name=None, default=None, ignoreCase=0):
  123.     "Return POST parameter(s) list(s)"
  124.     self._postInit()
  125.     if ignoreCase:
  126.       if name: name = string.lower(name)
  127.       value = spyceUtil.extractValue(self._postL, name)
  128.     else:
  129.       value = spyceUtil.extractValue(self._post, name)
  130.     return self.default(value, default)
  131.   def post1(self, name=None, default=None, ignoreCase=0):
  132.     "Return single POST parameter(s)"
  133.     self._postInit()
  134.     if ignoreCase:
  135.       if name: name = string.lower(name)
  136.       value = spyceUtil.extractValue(self._postL1, name)
  137.     else:
  138.       value = spyceUtil.extractValue(self._post1, name)
  139.     return self.default(value, default)
  140.   def file(self, name=None, ignoreCase=0):
  141.     "Return POSTed file(s)"
  142.     self._postInit()
  143.     if ignoreCase:
  144.       if name: name = string.lower(name)
  145.       return spyceUtil.extractValue(self._fileL, name)
  146.     else:
  147.       return spyceUtil.extractValue(self._file, name)
  148.   def env(self, name=None, default=None):
  149.     "Return other request (CGI) environment variables"
  150.     return self.default(self._api.getRequest().env(name), default)
  151.   def getHeader(self, type=None):
  152.     "Return browser HTTP header(s)"
  153.     return self._api.getRequest().getHeader(type)
  154.   def __getitem__(self, key):
  155.     v = self.get1(key)
  156.     if v!=None: return v
  157.     v = self.post1(key)
  158.     if v!=None: return v
  159.     v = self.file(key)
  160.     if v!=None: return v
  161.   def __repr__(self):
  162.     return ''
  163.   def getpost(self, name=None, default=None, ignoreCase=0):
  164.     "Return get() if not None, otherwise post() if not None, otherwise default"
  165.     value = self.get(name, None, ignoreCase)
  166.     if value==None: value = self.post(name, default, ignoreCase)
  167.     return value
  168.   def getpost1(self, name=None, default=None, ignoreCase=0):
  169.     "Return get1() if not None, otherwise post1() if not None, otherwise default"
  170.     value = self.get1(name, None, ignoreCase)
  171.     if value==None: value = self.post1(name, default, ignoreCase)
  172.     return value
  173.   def postget(self, name=None, default=None, ignoreCase=0):
  174.     "Return post() if not None, otherwise get() if not None, otherwise default"
  175.     value = self.post(name, None, ignoreCase)
  176.     if value==None: value = self.get(name, default, ignoreCase)
  177.     return value
  178.   def postget1(self, name=None, default=None, ignoreCase=0):
  179.     "Return post1() if not None, otherwise get1() if not None, otherwise default"
  180.     value = self.post1(name, None, ignoreCase)
  181.     if value==None: value = self.get1(name, default, ignoreCase)
  182.     return value
  183.  
  184.