|
| 1 | +#!/usr/bin/env python |
| 2 | +# -*- Mode: python; coding: utf-8 -*- |
| 3 | + |
| 4 | +import os |
| 5 | +import sys |
| 6 | +import tempfile |
| 7 | + |
| 8 | +DFAULT_SCGI_PORT = 8000 |
| 9 | +CTK_ROOT_DEFAULT = "%datadir%/cherokee/admin/CTK" |
| 10 | + |
| 11 | +def write_cherokee_conf (app_file, CTK_root, SCGI_port): |
| 12 | + # Path to the CTK app |
| 13 | + if app_file.startswith ('/'): |
| 14 | + app_file_path = app_file |
| 15 | + else: |
| 16 | + app_file_path = os.path.join (os.getcwd(), app_file) |
| 17 | + |
| 18 | + # Get python executable, to make CTK work in virtualenv for example |
| 19 | + python_executable = sys.executable |
| 20 | + # Write the custom configuration file |
| 21 | + config = CONFIG_BASE[:] |
| 22 | + config = config.replace ('vserver!10!document_root = /var/www', |
| 23 | + 'vserver!10!document_root = %s' %(CTK_root)) |
| 24 | + config = config.replace ('source!1!interpreter = /usr/bin/true', |
| 25 | + 'source!1!interpreter = %s %s' %(python_executable, app_file_path)) |
| 26 | + config = config.replace ('source!1!host = localhost:8000', |
| 27 | + 'source!1!host = localhost:%s' %(SCGI_port)) |
| 28 | + config = config.replace ('vserver!10!rule!200!document_root = /var/www/static', |
| 29 | + 'vserver!10!rule!200!document_root = %s/static' %(CTK_root)) |
| 30 | + |
| 31 | + tempfd, tempname = tempfile.mkstemp() |
| 32 | + os.write(tempfd, config) |
| 33 | + os.close(tempfd) |
| 34 | + |
| 35 | + # Set environment var PYTHONPATH |
| 36 | + os.putenv("PYTHONPATH", "%s:%s"%(CTK_root, os.getenv("PYTHONPATH", ''))) |
| 37 | + return tempname |
| 38 | + |
| 39 | +def main(): |
| 40 | + # Usage |
| 41 | + if len(sys.argv) < 2: |
| 42 | + print "USAGE:" |
| 43 | + print " %s [-d /path/to/CTK] [-s SCGI-port-num] <file.py>" %(sys.argv[0]) |
| 44 | + raise SystemExit |
| 45 | + |
| 46 | + # Path to CTK |
| 47 | + if '-d' in sys.argv: |
| 48 | + CTK_root = sys.argv[sys.argv.index('-d') + 1] |
| 49 | + else: |
| 50 | + CTK_root = CTK_ROOT_DEFAULT |
| 51 | + |
| 52 | + # Internal SCGI port |
| 53 | + if '-s' in sys.argv: |
| 54 | + SCGI_port = sys.argv[sys.argv.index('-s') + 1] |
| 55 | + else: |
| 56 | + SCGI_port = DFAULT_SCGI_PORT |
| 57 | + |
| 58 | + # Write config file |
| 59 | + app_file = filter (lambda x: x.endswith('.py'), sys.argv)[-1] |
| 60 | + cherokee_conf = write_cherokee_conf (app_file, CTK_root, SCGI_port) |
| 61 | + command = "cherokee -C %s" %(cherokee_conf) |
| 62 | + |
| 63 | + # Run |
| 64 | + print "Running: %s" % (app_file) |
| 65 | + print "CTK Path: %s" % (CTK_root) |
| 66 | + print "Executing: %s" % (command) |
| 67 | + print |
| 68 | + |
| 69 | + os.system (command) |
| 70 | + |
| 71 | + |
| 72 | +CONFIG_BASE = """\ |
| 73 | +config!version = 000099040 |
| 74 | +server!bind!1!port = 9091 |
| 75 | +server!bind!1!tls = 0 |
| 76 | +server!chunked_encoding = 1 |
| 77 | +server!iocache = 0 |
| 78 | +server!ipv6 = 1 |
| 79 | +server!keepalive = 1 |
| 80 | +server!keepalive_max_requests = 500 |
| 81 | +server!panic_action = /usr/bin/cherokee-panic |
| 82 | +server!post_track = post_track |
| 83 | +server!server_tokens = full |
| 84 | +server!timeout = 15 |
| 85 | +vserver!10!collect_statistics = 0 |
| 86 | +vserver!10!collector!enabled = 0 |
| 87 | +vserver!10!directory_index = index.html |
| 88 | +vserver!10!document_root = /var/www |
| 89 | +vserver!10!error_writer!type = stderr |
| 90 | +vserver!10!keepalive = 1 |
| 91 | +vserver!10!logger!x_real_ip_access_all = 0 |
| 92 | +vserver!10!logger!x_real_ip_enabled = 0 |
| 93 | +vserver!10!nick = default |
| 94 | +vserver!10!rule!400!handler = post_report |
| 95 | +vserver!10!rule!400!match = directory |
| 96 | +vserver!10!rule!400!match!directory = /upload_report |
| 97 | +vserver!10!rule!300!expiration = time |
| 98 | +vserver!10!rule!300!expiration!time = 1h |
| 99 | +vserver!10!rule!300!handler = file |
| 100 | +vserver!10!rule!300!handler!iocache = 0 |
| 101 | +vserver!10!rule!300!match = fullpath |
| 102 | +vserver!10!rule!300!match!final = 1 |
| 103 | +vserver!10!rule!300!match!fullpath!1 = /favicon.ico |
| 104 | +vserver!10!rule!300!match!fullpath!2 = /robots.txt |
| 105 | +vserver!10!rule!300!match!fullpath!3 = /crossdomain.xml |
| 106 | +vserver!10!rule!200!handler = file |
| 107 | +vserver!10!rule!200!match = directory |
| 108 | +vserver!10!rule!200!match!directory = /CTK |
| 109 | +vserver!10!rule!200!document_root = /var/www/static |
| 110 | +vserver!10!rule!200!match!final = 1 |
| 111 | +vserver!10!rule!100!handler = scgi |
| 112 | +vserver!10!rule!100!handler!balancer = round_robin |
| 113 | +vserver!10!rule!100!handler!balancer!source!1 = 1 |
| 114 | +vserver!10!rule!100!handler!iocache = 0 |
| 115 | +vserver!10!rule!100!handler!xsendfile = 1 |
| 116 | +vserver!10!rule!100!match = default |
| 117 | +vserver!10!rule!100!match!final = 1 |
| 118 | +source!1!debug = 1 |
| 119 | +source!1!env_inherited = 1 |
| 120 | +source!1!host = localhost:8000 |
| 121 | +source!1!interpreter = /usr/bin/true |
| 122 | +source!1!nick = CTK-run Source |
| 123 | +source!1!type = interpreter |
| 124 | +icons!default = page_white.png |
| 125 | +icons!directory = folder.png |
| 126 | +icons!file!bomb.png = core |
| 127 | +icons!file!page_white_go.png = *README* |
| 128 | +icons!parent_directory = arrow_turn_left.png |
| 129 | +icons!suffix!camera.png = jpg,jpeg,jpe |
| 130 | +icons!suffix!cd.png = iso,ngr,cue |
| 131 | +icons!suffix!color_wheel.png = png,gif,xcf,bmp,pcx,tiff,tif,cdr,psd,xpm,xbm |
| 132 | +icons!suffix!control_play.png = bin,exe,com,msi,out |
| 133 | +icons!suffix!css.png = css |
| 134 | +icons!suffix!cup.png = java,class,jar |
| 135 | +icons!suffix!email.png = eml,mbox,box,email,mbx |
| 136 | +icons!suffix!film.png = avi,mpeg,mpe,mpg,mpeg3,dl,fli,qt,mov,movie,flv |
| 137 | +icons!suffix!font.png = ttf |
| 138 | +icons!suffix!html.png = html,htm |
| 139 | +icons!suffix!music.png = au,snd,mid,midi,kar,mpga,mpega,mp2,mp3,sid,wav,aif,aiff,aifc,gsm,m3u,wma,wax,ra,rm,ram,pls,sd2,ogg |
| 140 | +icons!suffix!package.png = tar,gz,bz2,zip,rar,ace,lha,Z,7z |
| 141 | +icons!suffix!page_white_acrobat.png = pdf |
| 142 | +icons!suffix!page_white_c.png = c,h,cpp |
| 143 | +icons!suffix!page_white_office.png = doc,ppt,xls |
| 144 | +icons!suffix!page_white_php.png = php |
| 145 | +icons!suffix!page_white_text.png = txt,text,rtf,sdw |
| 146 | +icons!suffix!printer.png = ps,eps |
| 147 | +icons!suffix!ruby.png = rb |
| 148 | +icons!suffix!script.png = sh,csh,ksh,tcl,tk,py,pl |
| 149 | +mime!application/bzip2!extensions = bz2 |
| 150 | +mime!application/gzip!extensions = gz |
| 151 | +mime!application/hta!extensions = hta |
| 152 | +mime!application/java-archive!extensions = jar |
| 153 | +mime!application/java-serialized-object!extensions = ser |
| 154 | +mime!application/java-vm!extensions = class |
| 155 | +mime!application/json!extensions = json |
| 156 | +mime!application/mac-binhex40!extensions = hqx |
| 157 | +mime!application/msaccess!extensions = mdb |
| 158 | +mime!application/msword!extensions = doc,dot |
| 159 | +mime!application/octet-stream!extensions = bin |
| 160 | +mime!application/octetstream!extensions = ace |
| 161 | +mime!application/oda!extensions = oda |
| 162 | +mime!application/ogg!extensions = ogx |
| 163 | +mime!application/pdf!extensions = pdf |
| 164 | +mime!application/pgp-keys!extensions = key |
| 165 | +mime!application/pgp-signature!extensions = pgp |
| 166 | +mime!application/pics-rules!extensions = prf |
| 167 | +mime!application/postscript!extensions = ps,ai,eps |
| 168 | +mime!application/rar!extensions = rar |
| 169 | +mime!application/rdf+xml!extensions = rdf |
| 170 | +mime!application/rss+xml!extensions = rss |
| 171 | +mime!application/smil!extensions = smi,smil |
| 172 | +mime!application/vnd.mozilla.xul+xml!extensions = xul |
| 173 | +mime!application/vnd.ms-excel!extensions = xls,xlb,xlt |
| 174 | +mime!application/vnd.ms-pki.seccat!extensions = cat |
| 175 | +mime!application/vnd.ms-pki.stl!extensions = stl |
| 176 | +mime!application/vnd.ms-powerpoint!extensions = ppt,pps |
| 177 | +mime!application/vnd.oasis.opendocument.chart!extensions = odc |
| 178 | +mime!application/vnd.oasis.opendocument.database!extensions = odb |
| 179 | +mime!application/vnd.oasis.opendocument.formula!extensions = odf |
| 180 | +mime!application/vnd.oasis.opendocument.graphics!extensions = odg |
| 181 | +mime!application/vnd.oasis.opendocument.image!extensions = odi |
| 182 | +mime!application/vnd.oasis.opendocument.presentation!extensions = odp |
| 183 | +mime!application/vnd.oasis.opendocument.spreadsheet!extensions = ods |
| 184 | +mime!application/vnd.oasis.opendocument.text!extensions = odt |
| 185 | +mime!application/vnd.oasis.opendocument.text-master!extensions = odm |
| 186 | +mime!application/vnd.oasis.opendocument.text-web!extensions = oth |
| 187 | +mime!application/vnd.pkg5.info!extensions = p5i |
| 188 | +mime!application/vnd.visio!extensions = vsd |
| 189 | +mime!application/vnd.wap.wbxml!extensions = wbxml |
| 190 | +mime!application/vnd.wap.wmlc!extensions = wmlc |
| 191 | +mime!application/vnd.wap.wmlscriptc!extensions = wmlsc |
| 192 | +mime!application/x-abiword!extensions = abw |
| 193 | +mime!application/x-apple-diskimage!extensions = dmg |
| 194 | +mime!application/x-bcpio!extensions = bcpio |
| 195 | +mime!application/x-bittorrent!extensions = torrent |
| 196 | +mime!application/x-cdf!extensions = cdf |
| 197 | +mime!application/x-cpio!extensions = cpio |
| 198 | +mime!application/x-csh!extensions = csh |
| 199 | +mime!application/x-debian-package!extensions = deb,udeb |
| 200 | +mime!application/x-director!extensions = dcr,dir,dxr |
| 201 | +mime!application/x-dvi!extensions = dvi |
| 202 | +mime!application/x-flac!extensions = flac |
| 203 | +mime!application/x-font!extensions = pfa,pfb,gsf,pcf,pcf.Z |
| 204 | +mime!application/x-freemind!extensions = mm |
| 205 | +mime!application/x-gnumeric!extensions = gnumeric |
| 206 | +mime!application/x-gtar!extensions = gtar,tgz,taz |
| 207 | +mime!application/x-gzip!extensions = gz,tgz |
| 208 | +mime!application/x-httpd-php!extensions = phtml,pht,php |
| 209 | +mime!application/x-httpd-php-source!extensions = phps |
| 210 | +mime!application/x-httpd-php3!extensions = php3 |
| 211 | +mime!application/x-httpd-php3-preprocessed!extensions = php3p |
| 212 | +mime!application/x-httpd-php4!extensions = php4 |
| 213 | +mime!application/x-internet-signup!extensions = ins,isp |
| 214 | +mime!application/x-iphone!extensions = iii |
| 215 | +mime!application/x-iso9660-image!extensions = iso |
| 216 | +mime!application/x-java-jnlp-file!extensions = jnlp |
| 217 | +mime!application/x-javascript!extensions = js |
| 218 | +mime!application/x-kchart!extensions = chrt |
| 219 | +mime!application/x-killustrator!extensions = kil |
| 220 | +mime!application/x-koan!extensions = skp,skd,skt,skm |
| 221 | +mime!application/x-kpresenter!extensions = kpr,kpt |
| 222 | +mime!application/x-kspread!extensions = ksp |
| 223 | +mime!application/x-kword!extensions = kwd,kwt |
| 224 | +mime!application/x-latex!extensions = latex |
| 225 | +mime!application/x-lha!extensions = lha |
| 226 | +mime!application/x-lzh!extensions = lzh |
| 227 | +mime!application/x-lzx!extensions = lzx |
| 228 | +mime!application/x-ms-wmd!extensions = wmd |
| 229 | +mime!application/x-ms-wmz!extensions = wmz |
| 230 | +mime!application/x-msdos-program!extensions = com,exe,bat,dll |
| 231 | +mime!application/x-msi!extensions = msi |
| 232 | +mime!application/x-netcdf!extensions = nc |
| 233 | +mime!application/x-ns-proxy-autoconfig!extensions = pac |
| 234 | +mime!application/x-nwc!extensions = nwc |
| 235 | +mime!application/x-object!extensions = o |
| 236 | +mime!application/x-oz-application!extensions = oza |
| 237 | +mime!application/x-pkcs7-certreqresp!extensions = p7r |
| 238 | +mime!application/x-pkcs7-crl!extensions = crl |
| 239 | +mime!application/x-python-code!extensions = pyc,pyo |
| 240 | +mime!application/x-quicktimeplayer!extensions = qtl |
| 241 | +mime!application/x-redhat-package-manager!extensions = rpm |
| 242 | +mime!application/x-sh!extensions = sh |
| 243 | +mime!application/x-shar!extensions = shar |
| 244 | +mime!application/x-shockwave-flash!extensions = swf,swfl |
| 245 | +mime!application/x-stuffit!extensions = sit,sea |
| 246 | +mime!application/x-sv4cpio!extensions = sv4cpio |
| 247 | +mime!application/x-sv4crc!extensions = sv4crc |
| 248 | +mime!application/x-tar!extensions = tar |
| 249 | +mime!application/x-tcl!extensions = tcl |
| 250 | +mime!application/x-tex-pk!extensions = pk |
| 251 | +mime!application/x-texinfo!extensions = texinfo,texi |
| 252 | +mime!application/x-trash!extensions = ~,bak,old,sik |
| 253 | +mime!application/x-troff!extensions = t,tr,roff |
| 254 | +mime!application/x-troff-man!extensions = man |
| 255 | +mime!application/x-troff-me!extensions = me |
| 256 | +mime!application/x-troff-ms!extensions = ms |
| 257 | +mime!application/x-ustar!extensions = ustar |
| 258 | +mime!application/x-x509-ca-cert!extensions = crt |
| 259 | +mime!application/x-xcf!extensions = xcf |
| 260 | +mime!application/x-xfig!extensions = fig |
| 261 | +mime!application/x-xpinstall!extensions = xpi |
| 262 | +mime!application/xhtml+xml!extensions = xhtml,xht |
| 263 | +mime!application/xml!extensions = xml,xsl |
| 264 | +mime!application/zip!extensions = zip |
| 265 | +mime!audio/basic!extensions = au,snd |
| 266 | +mime!audio/midi!extensions = mid,midi,kar |
| 267 | +mime!audio/mpeg!extensions = mpga,mpega,mp2,mp3,m4a |
| 268 | +mime!audio/ogg!extensions = ogg,oga |
| 269 | +mime!audio/prs.sid!extensions = sid |
| 270 | +mime!audio/x-aiff!extensions = aif,aiff,aifc |
| 271 | +mime!audio/x-gsm!extensions = gsm |
| 272 | +mime!audio/x-mpegurl!extensions = m3u |
| 273 | +mime!audio/x-ms-wax!extensions = wax |
| 274 | +mime!audio/x-ms-wma!extensions = wma |
| 275 | +mime!audio/x-pn-realaudio!extensions = ra,rm,ram |
| 276 | +mime!audio/x-realaudio!extensions = ra |
| 277 | +mime!audio/x-scpls!extensions = pls |
| 278 | +mime!audio/x-sd2!extensions = sd2 |
| 279 | +mime!audio/x-wav!extensions = wav |
| 280 | +mime!chemical/x-cache!extensions = cac,cache |
| 281 | +mime!chemical/x-cache-csf!extensions = csf |
| 282 | +mime!chemical/x-cdx!extensions = cdx |
| 283 | +mime!chemical/x-cif!extensions = cif |
| 284 | +mime!chemical/x-cmdf!extensions = cmdf |
| 285 | +mime!chemical/x-cml!extensions = cml |
| 286 | +mime!chemical/x-compass!extensions = cpa |
| 287 | +mime!chemical/x-crossfire!extensions = bsd |
| 288 | +mime!chemical/x-csml!extensions = csml,csm |
| 289 | +mime!chemical/x-ctx!extensions = ctx |
| 290 | +mime!chemical/x-cxf!extensions = cxf,cef |
| 291 | +mime!chemical/x-isostar!extensions = istr,ist |
| 292 | +mime!chemical/x-jcamp-dx!extensions = jdx,dx |
| 293 | +mime!chemical/x-kinemage!extensions = kin |
| 294 | +mime!chemical/x-pdb!extensions = pdb,ent |
| 295 | +mime!chemical/x-swissprot!extensions = sw |
| 296 | +mime!chemical/x-vamas-iso14976!extensions = vms |
| 297 | +mime!chemical/x-vmd!extensions = vmd |
| 298 | +mime!chemical/x-xtel!extensions = xtel |
| 299 | +mime!chemical/x-xyz!extensions = xyz |
| 300 | +mime!image/gif!extensions = gif |
| 301 | +mime!image/jpeg!extensions = jpeg,jpg,jpe |
| 302 | +mime!image/pcx!extensions = pcx |
| 303 | +mime!image/png!extensions = png |
| 304 | +mime!image/svg+xml!extensions = svg,svgz |
| 305 | +mime!image/tiff!extensions = tiff,tif |
| 306 | +mime!image/vnd.djvu!extensions = djvu,djv |
| 307 | +mime!image/vnd.wap.wbmp!extensions = wbmp |
| 308 | +mime!image/x-icon!extensions = ico |
| 309 | +mime!image/x-ms-bmp!extensions = bmp |
| 310 | +mime!image/x-photoshop!extensions = psd |
| 311 | +mime!image/x-portable-anymap!extensions = pnm |
| 312 | +mime!image/x-portable-bitmap!extensions = pbm |
| 313 | +mime!image/x-portable-graymap!extensions = pgm |
| 314 | +mime!image/x-portable-pixmap!extensions = ppm |
| 315 | +mime!image/x-xbitmap!extensions = xbm |
| 316 | +mime!image/x-xpixmap!extensions = xpm |
| 317 | +mime!image/x-xwindowdump!extensions = xwd |
| 318 | +mime!model/iges!extensions = igs,iges |
| 319 | +mime!model/mesh!extensions = msh,mesh,silo |
| 320 | +mime!model/vrml!extensions = wrl,vrml |
| 321 | +mime!text/calendar!extensions = ics,icz |
| 322 | +mime!text/comma-separated-values!extensions = csv |
| 323 | +mime!text/css!extensions = css |
| 324 | +mime!text/h323!extensions = 323 |
| 325 | +mime!text/html!extensions = html,htm,shtml |
| 326 | +mime!text/iuls!extensions = uls |
| 327 | +mime!text/mathml!extensions = mml |
| 328 | +mime!text/plain!extensions = asc,txt,text,diff,pot |
| 329 | +mime!text/richtext!extensions = rtx |
| 330 | +mime!text/rtf!extensions = rtf |
| 331 | +mime!text/scriptlet!extensions = sct,wsc |
| 332 | +mime!text/tab-separated-values!extensions = tsv |
| 333 | +mime!text/vnd.sun.j2me.app-descriptor!extensions = jad |
| 334 | +mime!text/vnd.wap.wml!extensions = wml |
| 335 | +mime!text/vnd.wap.wmlscript!extensions = wmls |
| 336 | +mime!text/x-boo!extensions = boo |
| 337 | +mime!text/x-c++hdr!extensions = h++,hpp,hxx,hh |
| 338 | +mime!text/x-c++src!extensions = c++,cpp,cxx,cc |
| 339 | +mime!text/x-chdr!extensions = h |
| 340 | +mime!text/x-csh!extensions = csh |
| 341 | +mime!text/x-csrc!extensions = c |
| 342 | +mime!text/x-dsrc!extensions = d |
| 343 | +mime!text/x-haskell!extensions = hs |
| 344 | +mime!text/x-java!extensions = java |
| 345 | +mime!text/x-literate-haskell!extensions = lhs |
| 346 | +mime!text/x-moc!extensions = moc |
| 347 | +mime!text/x-pascal!extensions = p,pas |
| 348 | +mime!text/x-pcs-gcd!extensions = gcd |
| 349 | +mime!text/x-perl!extensions = pl,pm |
| 350 | +mime!text/x-python!extensions = py |
| 351 | +mime!text/x-setext!extensions = etx |
| 352 | +mime!text/x-sh!extensions = sh |
| 353 | +mime!text/x-tcl!extensions = tcl,tk |
| 354 | +mime!text/x-tex!extensions = tex,ltx,sty,cls |
| 355 | +mime!text/x-vcalendar!extensions = vcs |
| 356 | +mime!text/x-vcard!extensions = vcf |
| 357 | +mime!video/dl!extensions = dl |
| 358 | +mime!video/dv!extensions = dif,dv |
| 359 | +mime!video/fli!extensions = fli |
| 360 | +mime!video/gl!extensions = gl |
| 361 | +mime!video/mp4!extensions = mp4 |
| 362 | +mime!video/mpeg!extensions = mpeg,mpg,mpe |
| 363 | +mime!video/ogg!extensions = ogv |
| 364 | +mime!video/quicktime!extensions = qt,mov |
| 365 | +mime!video/vnd.mpegurl!extensions = mxu |
| 366 | +mime!video/x-flv!extensions = flv |
| 367 | +mime!video/x-la-asf!extensions = lsf,lsx |
| 368 | +mime!video/x-mng!extensions = mng |
| 369 | +mime!video/x-ms-asf!extensions = asf,asx |
| 370 | +mime!video/x-ms-wm!extensions = wm |
| 371 | +mime!video/x-ms-wmv!extensions = wmv |
| 372 | +mime!video/x-ms-wmx!extensions = wmx |
| 373 | +mime!video/x-ms-wvx!extensions = wvx |
| 374 | +mime!video/x-msvideo!extensions = avi |
| 375 | +mime!video/x-sgi-movie!extensions = movie |
| 376 | +mime!x-conference/x-cooltalk!extensions = ice |
| 377 | +mime!x-world/x-vrml!extensions = vrm,vrml,wrl |
| 378 | +""" |
| 379 | + |
| 380 | +if __name__ == "__main__": |
| 381 | + main() |
0 commit comments