123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- 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
- }}
- """
|