Files
web2py/scripts/manage.py
2014-04-15 10:22:57 -05:00

117 lines
3.6 KiB
Python

import os
import glob
import zipfile
import urllib
import tempfile
import shutil
def copytree(src, dst):
names = os.listdir(src)
ignored_names = set()
errors = []
if not os.path.exists(dst):
os.makedirs(dst)
for name in names:
srcname = os.path.join(src, name)
dstname = os.path.join(dst, name)
if os.path.isdir(srcname):
copytree(srcname, dstname)
else:
shutil.copy2(srcname, dstname)
class W2PInstance(object):
SOURCES = {'stable':'http://web2py.com/examples/static/web2py_src.zip',
'nightly':'http://web2py.com/examples/static/nightly/web2py_src.zip',
'trunk':'https://github.com/web2py/web2py/archive/master.zip'}
def __init__(self,path):
self.path = path
def warn(self,message="system going down soon"):
apps = glob.glob(os.path.join(self.path,'applications','*'))
for app in apps:
if os.path.isdir(app):
open(os.path.join(app,'notifications.txt'),'w').write(message)
def install(self,source='stable'):
if not os.path.exists(self.path):
os.mkdir(self.path)
tmpdir = tempfile.mkdtemp()
link = self.SOURCES[source]
srcfile = os.path.join(tmpdir,'web2py_src.zip')
print 'downloading...'
open(srcfile,'wb').write(urllib.urlopen(link).read())
print 'extracing...'
zipfile.ZipFile(srcfile,'r').extractall(tmpdir)
print 'copying...'
copytree(os.path.join(tmpdir,'web2py'),self.path)
def upgrade(self,source='stable'):
self.install(source)
def upgrade_tmp(self,source,common=False):
tmpdir = tempfile.mkdtemp()
link = self.SOURCES[source]
srcfile = os.path.join(tmpdir,'web2py_src.zip')
print 'copying production...'
copytree(self.path,os.path.join(tmpdir,'web2py'))
tmpdir_web2py = os.path.join(tmpdir,'web2py')
tmp_web2py = W2PInstance(tempdir_web2py)
tmp_web2py.clear_sessions()
tmp_web2py.clear_cache()
tmp_web2py.clear_error()
print 'downloading...'
open(srcfile,'wb').write(urllib.urlopen(link).read())
print 'extracing...'
zipfile.ZipFile(srcfile,'r').extractall(tmpdir)
print 'running tests...'
try:
olddir = os.getcwd()
os.chdir(tempdir_web2py)
ret = os.system("PYTHONPATH=. python -m unittest -v gluon.tests")
# eventually start web2py and run functional tests
finally:
os.chrid(olddir)
if ret:
sys.exit(ret and 1)
copytree(os.path.join(tmpdir,'web2py'),self.path)
def clear_sessions(self):
files = glob.glob(os.path.join(self.path,'applications','*','sessions','*'))
for file in files:
try:
os.unlink(file)
except:
pass
def clear_cache(self):
files = glob.glob(os.path.join(self.path,'applications','*','cache','*'))
for file in files:
try:
os.unlink(file)
except:
pass
def clear_errors(self):
files = glob.glob(os.path.join(self.path,'applications','*','errors','*'))
for file in files:
try:
os.unlink(file)
except:
pass
web2py = W2PInstance('/Users/massimodipierro/Downloads/web2py')
#web2py.install()
web2py.clear_sessions()
"""
{{
import os
_notifications = os.path.join(request.folder,'notifications.txt')
if os.path.exixts(_notifications):
response.flash = response.flash or open(_notifications).read()
pass
}}
"""