Changeset 1082 in products
- Timestamp:
- Jul 14, 2009 2:18:33 PM (15 years ago)
- Location:
- quintagroup.distrpoxy/trunk
- Files:
-
- 1 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
quintagroup.distrpoxy/trunk
-
Property
svn:ignore
set to
*.egg-info
*.pyc
-
Property
svn:ignore
set to
-
quintagroup.distrpoxy/trunk/quintagroup/distproxy/wsgi.py
r1066 r1082 4 4 from paste.script.appinstall import Installer as BaseInstaller 5 5 from paste.fileapp import FileApp 6 from paste import urlparser 7 from paste import request 6 8 from paste.httpexceptions import HTTPNotFound 7 9 from spider import webmirror … … 24 26 def __call__(self, environ, start_response): 25 27 path = environ.get('PATH_INFO', '').strip() 26 filename = self.checkCache(path)27 if path.split('/')[0] == "favicon.ico":28 return HTTPNotFound()(environ, start_response)28 if path.split('/')[1] == "favicon.ico": 29 return HTTPNotFound()(environ, start_response) 30 filename = self.checkCache(path) 29 31 if filename is None: 30 32 return HTTPNotFound()(environ, start_response) … … 39 41 pth = '/'.join(pth.split('/')[:-1]) 40 42 if not os.path.exists(pth1): 41 webmirror(pth,1,self.index_url+path,0,1) 43 webmirror(pth,1,self.index_url+path,0,1) 42 44 if pth1: 43 45 return pth1 … … 50 52 index_url = local_conf.get('index', None) 51 53 return PackageProxyApp(index_url, pack_dir) 54 55 class StaticURLParser(urlparser.StaticURLParser): 56 57 def __call__(self, environ, start_response): 58 path_info = environ.get('PATH_INFO', '') 59 if not path_info: 60 return self.add_slash(environ, start_response) 61 if path_info == '/': 62 # @@: This should obviously be configurable 63 filename = 'index.html' 64 else: 65 filename = request.path_info_pop(environ) 66 full = os.path.normcase(os.path.normpath( 67 os.path.join(self.directory, filename))) 68 if os.path.sep != '/': 69 full = full.replace('/', os.path.sep) 70 if self.root_directory is not None and not full.startswith(self.root_directory): 71 # Out of bounds 72 return self.not_found(environ, start_response) 73 if not os.path.exists(full): 74 if full.endswith('index.html') and not os.path.isfile(full): 75 start_response('200 OK', []) 76 return [self.get_index_html()] 77 return self.not_found(environ, start_response) 78 if os.path.isdir(full): 79 # @@: Cache? 80 child_root = self.root_directory is not None and \ 81 self.root_directory or self.directory 82 return self.__class__(full, root_directory=child_root, 83 cache_max_age=self.cache_max_age)(environ, 84 start_response) 85 if environ.get('PATH_INFO') and environ.get('PATH_INFO') != '/': 86 return self.error_extra_path(environ, start_response) 87 if_none_match = environ.get('HTTP_IF_NONE_MATCH') 88 if if_none_match: 89 mytime = os.stat(full).st_mtime 90 if str(mytime) == if_none_match: 91 headers = [] 92 ETAG.update(headers, mytime) 93 start_response('304 Not Modified', headers) 94 return [''] # empty body 95 96 fa = self.make_app(full) 97 if self.cache_max_age: 98 fa.cache_control(max_age=self.cache_max_age) 99 return fa(environ, start_response) 100 101 def get_index_html(self): 102 path = self.directory 103 # create sorted lists of directories and files 104 names = os.listdir(path) 105 dirs = [i for i in names if os.path.isdir(os.path.join(path, i))] 106 dirs.sort() 107 files = [i for i in names if os.path.isfile(os.path.join(path, i))] 108 files.sort() 109 names = dirs + files 110 links = '\n'.join(['<li><a href="%s">%s</a></li>' % (i, i) for i in names]) 111 template = open(os.path.join(os.path.dirname(__file__), 'index.html')).read() 112 return template % {'path': path[len(self.root_directory):], 'links': links} 113 114 def make_static(global_conf, document_root, cache_max_age=None): 115 """ 116 Return a WSGI application that serves a directory (configured 117 with document_root) 118 119 cache_max_age - integer specifies CACHE_CONTROL max_age in seconds 120 """ 121 if cache_max_age is not None: 122 cache_max_age = int(cache_max_age) 123 return StaticURLParser( 124 document_root, cache_max_age=cache_max_age) 125 126 52 127 """ 53 128 class Installer(BaseInstaller): -
quintagroup.distrpoxy/trunk/setup.py
r1067 r1082 32 32 'paste.app_factory': [ 33 33 'main = quintagroup.distproxy.wsgi:app_factory', 34 'static = quintagroup.distproxy.wsgi:make_static', 34 35 ], 35 36 },
Note: See TracChangeset
for help on using the changeset viewer.