summaryrefslogtreecommitdiff
path: root/scripts
Side-by-side diff
Diffstat (limited to 'scripts') (more/less context) (ignore whitespace changes)
-rw-r--r--scripts/builder/backendBuilder.py37
-rw-r--r--scripts/builder/backends/devBuilder.py56
-rw-r--r--scripts/builder/frontendBuilder.py58
-rw-r--r--scripts/builder/frontends/betaBuilder.py14
-rw-r--r--scripts/builder/frontends/gammaBuilder.py26
-rw-r--r--scripts/builder/frontends/gamma_mobileBuilder.py9
-rwxr-xr-xscripts/builder/main.py26
-rwxr-xr-xscripts/dev-proxy7
-rwxr-xr-xscripts/proxy/main.py95
9 files changed, 291 insertions, 37 deletions
diff --git a/scripts/builder/backendBuilder.py b/scripts/builder/backendBuilder.py
index 5b91678..36b28ca 100644
--- a/scripts/builder/backendBuilder.py
+++ b/scripts/builder/backendBuilder.py
@@ -6,13 +6,12 @@ import shutil
import hashlib
import main
#===================================================================
-
class BackendBuilder(object):
def __init__ (self, projectTargetDir, frontends, versions, settings):
self.projectTargetDir = projectTargetDir
self.frontends = frontends
self.versions = versions
@@ -47,16 +46,18 @@ class BackendBuilder(object):
def frontEndTempFolder (self):
return self.tempFolder()
def developmentTargetFolder (self):
- return os.path.join(self.projectTargetDir, 'development', self.relativePath())
+ return os.path.join(self.projectTargetDir, 'development')
+
def targetFolder (self):
return os.path.join(self.projectTargetDir, self.relativePath())
+
# --------------------------------------------------------------------------
def writeToFolder (self, folder, filename, content):
file = open(os.path.join(folder, filename), 'w')
file.write(content.encode('utf-8'))
@@ -100,32 +101,34 @@ class BackendBuilder(object):
if 'debug' in self.versions:
frontend.copyResourcesToFolder(self.frontEndTempFolder())
index = self.configureIndexContent(frontend.assemble(assemblyMode='DEBUG', versionType='DEBUG'))
self.writeToFolder(self.frontEndTempFolder(), os.path.join(frontend.module, 'index_debug' + submoduleExtension + '.html'), index)
-
+
if 'install' in self.versions:
index = self.configureIndexContent(frontend.assemble())
self.writeToFolder(self.frontEndTempFolder(), os.path.join(frontend.module, 'index' + submoduleExtension + '.html'), index)
self.logChecksums(index, "[" + self.name() + " - " + frontend.module + "] index" + submoduleExtension + ".html checksum")
self.createPackage()
- if 'development' in self.versions:
- for frontend in self.frontends:
- if (frontend.module == frontend.submodule):
- submoduleExtension = ''
- else:
- submoduleExtension = '.' + frontend.submodule
-
- print "FRONTEND module: " + frontend.module
- print "FRONTEND submodule: " + frontend.submodule
-
- main.createFolder(os.path.join(self.developmentTargetFolder(), frontend.module))
-
- index = self.configureIndexContent(frontend.assemble(assemblyMode='DEVELOPMENT', versionType='DEBUG'), self.settings['development.settings']['url'])
- self.writeToFolder(self.developmentTargetFolder(), os.path.join(frontend.module, 'index' + submoduleExtension + '.html'), index)
+# if 'development' in self.versions:
+# for frontend in self.frontends:
+# if (frontend.module == frontend.submodule):
+# submoduleExtension = ''
+# else:
+# submoduleExtension = '.' + frontend.submodule
+#
+# print "FRONTEND module: " + frontend.module
+# print "FRONTEND submodule: " + frontend.submodule
+#
+## main.createFolder(os.path.join(self.developmentTargetFolder(), frontend.module))
+# main.createFolder(self.developmentTargetFolder())
+#
+# index = self.configureIndexContent(frontend.assemble(assemblyMode='DEVELOPMENT', versionType='DEBUG'), self.settings['development.settings']['url'])
+## self.writeToFolder(self.developmentTargetFolder(), os.path.join(frontend.module, 'index_development' + submoduleExtension + '.html'), index)
+# self.writeToFolder(self.developmentTargetFolder(), os.path.join(frontend.module + submoduleExtension + '.html'), index)
#===================================================================
diff --git a/scripts/builder/backends/devBuilder.py b/scripts/builder/backends/devBuilder.py
new file mode 100644
index 0000000..671765e
--- a/dev/null
+++ b/scripts/builder/backends/devBuilder.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+
+import os
+import shutil
+import subprocess
+import main
+
+from backendBuilder import BackendBuilder
+
+class DevBuilder(BackendBuilder):
+
+ def name(self):
+ return "Dev builder"
+
+
+ def relativePath(self):
+ return 'dev'
+
+
+# def frontEndTempFolder (self):
+# return os.path.join(self.tempFolder(), 'src', 'main', 'webapp')
+
+
+# def targetFolder (self):
+# return self.projectTargetDir
+
+
+ def compileCode (self):
+ pass
+
+
+ def createPackage (self):
+ src = self.tempFolder()
+ dst = self.targetFolder()
+
+ shutil.copytree(src, dst)
+
+
+ def run (self):
+ print self.name() + " - RUN (dev)"
+
+ for frontend in self.frontends:
+ if (frontend.module == frontend.submodule):
+ submoduleExtension = ''
+ else:
+ submoduleExtension = '.' + frontend.submodule
+
+ main.createFolder(os.path.join(self.frontEndTempFolder(), frontend.module))
+
+ index = self.configureIndexContent(frontend.assemble(assemblyMode='DEBUG', versionType='DEBUG'))
+ self.writeToFolder(self.frontEndTempFolder(), os.path.join(frontend.module, 'index' + submoduleExtension + '.html'), index)
+
+ self.createPackage()
+
+
diff --git a/scripts/builder/frontendBuilder.py b/scripts/builder/frontendBuilder.py
index 1f0f92f..e52c31e 100644
--- a/scripts/builder/frontendBuilder.py
+++ b/scripts/builder/frontendBuilder.py
@@ -8,12 +8,14 @@ import codecs
import shutil
import StringIO
import urllib
import main
+#===============================================================================
+
class FrontendBuilder(object):
def __init__ (self, frontend, settings, repositoryVersion):
if '.' in frontend:
moduleComponents = frontend.split('.')
self.module = moduleComponents[0]
@@ -24,16 +26,29 @@ class FrontendBuilder(object):
self.settings = settings
self.projectDir = main.projectBaseDir()
# self.repository = repository.repositoryWithPath(self.projectDir)
self.repositoryVersion = repositoryVersion
self.processedFiles = {}
-
+
+ #---------------------------------------------------------------------------
+
+ def name (self):
+ raise NotImplementedError()
+
+
+ def copyStaticResources (self, targetFolder):
+ raise NotImplementedError()
+
+ #---------------------------------------------------------------------------
def log (self, message):
- print "frontend [" + self.module + "]: " + message
+ module = self.module
+ if (self.module != self.submodule):
+ module = module + "." + self.submodule
+ print "frontend [" + module + "]: " + message
def absolutePathForSources (self):
return os.path.join(self.projectDir, 'frontend', self.module)
@@ -55,22 +70,36 @@ class FrontendBuilder(object):
result.append(file)
return result
def copyResources (self, sourceFolder, destinationFolder, fileType):
- for file in self.filterFiles(self.settings[fileType]):
- src = self.absolutePathForSourceFile(fileType, file)
- dst = self.absolutePathForTargetFile(destinationFolder, fileType, file)
- main.createFolder(os.path.dirname(dst))
- shutil.copy2(src, dst)
+ if fileType in self.settings:
+ for file in self.filterFiles(self.settings[fileType]):
+ src = self.absolutePathForSourceFile(fileType, file)
+ dst = self.absolutePathForTargetFile(destinationFolder, fileType, file)
+ main.createFolder(os.path.dirname(dst))
+ shutil.copy2(src, dst)
+ else:
+ srcFolder = os.path.join(self.absolutePathForSources(), fileType)
+ dstFolder = os.path.join(destinationFolder, self.module, fileType)
+ if not(os.path.exists(dstFolder)):
+ shutil.copytree(srcFolder, dstFolder)
+
+# try:
+# shutil.copytree(srcFolder, dstFolder)
+# except:
+# pass
+
def copyResourcesToFolder (self, targetFolder):
self.copyResources(self.projectDir, targetFolder, 'css')
self.copyResources(self.projectDir, targetFolder, 'js')
+ self.copyResources(self.projectDir, targetFolder, 'images')
+ self.copyStaticResources(targetFolder)
def loadFilesContent (self, basePath, files):
result = ""
for file in self.filterFiles(files):
@@ -276,19 +305,19 @@ class FrontendBuilder(object):
return result
def replaceTemplatePlaceholders (self, pageTitle, copyright, css, code, jsLoadMode, version, versionType):
result = self.template()
- result = result.replace('@page.title@', pageTitle, 1)
- result = result.replace('@copyright@', copyright, 1)
- result = result.replace('@css@', css, 1)
- #result = result.replace('@bookmarklet@', bookmarklet, 1)
- result = result.replace('@application.version@', version, 1)
- result = result.replace('@application.version.type@', versionType, 1)
- result = result.replace('@js_' + jsLoadMode + '@', code, 1)
+ result = result.replace('@page.title@', pageTitle)
+ result = result.replace('@copyright@', copyright)
+ result = result.replace('@css@', css)
+ #result = result.replace('@bookmarklet@', bookmarklet)
+ result = result.replace('@application.version@', version)
+ result = result.replace('@application.version.type@', versionType)
+ result = result.replace('@js_' + jsLoadMode + '@', code)
result = re.sub('@js_[^@]+@', '', result)
return result
@@ -368,12 +397,13 @@ class FrontendBuilder(object):
copyright = ""
css = self.cssTagsForFiles('file://' + str(os.path.join(self.absolutePathForSources(), 'css')), self.filterFiles(self.settings['css']))
js = self.scriptTagForContent(self.bookmarklet()) + \
'\n' + \
self.scriptTagsForFiles('file://' + str(os.path.join(self.absolutePathForSources(), 'js')), self.filterFiles(self.settings['js']))
jsLoadMode = 'LINKED'
+ versionType = 'development'
else:
raise NotImplementedError()
return self.assembleVersion(
pageTitle = pageTitle,
diff --git a/scripts/builder/frontends/betaBuilder.py b/scripts/builder/frontends/betaBuilder.py
new file mode 100644
index 0000000..c5a3e76
--- a/dev/null
+++ b/scripts/builder/frontends/betaBuilder.py
@@ -0,0 +1,14 @@
+from frontendBuilder import FrontendBuilder
+import shutil
+
+class BetaBuilder(FrontendBuilder):
+
+ def name(self):
+ return "/beta builder"
+
+ def copyStaticResources (self, targetFolder):
+ for file in self.filterFiles(self.settings['staticResources']):
+ src = self.absolutePathForSourceFile('staticResources', file)
+ dst = self.absolutePathForTargetFile(targetFolder, '', file)
+ shutil.copy2(src, dst)
+
diff --git a/scripts/builder/frontends/gammaBuilder.py b/scripts/builder/frontends/gammaBuilder.py
new file mode 100644
index 0000000..35fa68b
--- a/dev/null
+++ b/scripts/builder/frontends/gammaBuilder.py
@@ -0,0 +1,26 @@
+from frontendBuilder import FrontendBuilder
+import shutil
+
+class GammaBuilder(FrontendBuilder):
+
+ def name(self):
+ return "/gamma builder"
+
+ def copyStaticResources (self, targetFolder):
+ resourcesToCopy = [
+ {'folder': 'html', 'source': 'exit_template.html', 'target': 'exit.html'},
+ {'folder': 'css', 'source': 'static.css', 'target': 'static.css'}
+ ]
+
+ for resource in resourcesToCopy:
+ src = self.absolutePathForSourceFile(resource['folder'], resource['source'])
+ dst = self.absolutePathForTargetFile(targetFolder, '', resource['target'])
+ shutil.copy2(src, dst)
+
+ # src = self.absolutePathForSourceFile('html', 'exit_template.html')
+ # dst = self.absolutePathForTargetFile(targetFolder, '', 'exit.html')
+ # shutil.copy2(src, dst)
+
+ # src = self.absolutePathForSourceFile('css', 'static.css')
+ # dst = self.absolutePathForTargetFile(targetFolder, '', 'static.css')
+ # shutil.copy2(src, dst)
diff --git a/scripts/builder/frontends/gamma_mobileBuilder.py b/scripts/builder/frontends/gamma_mobileBuilder.py
new file mode 100644
index 0000000..f2e80c9
--- a/dev/null
+++ b/scripts/builder/frontends/gamma_mobileBuilder.py
@@ -0,0 +1,9 @@
+from frontendBuilder import FrontendBuilder
+
+class Gamma_MobileBuilder(FrontendBuilder):
+
+ def name(self):
+ return "/gamma.mobile builder"
+
+ def copyStaticResources (self, targetFolder):
+ pass
diff --git a/scripts/builder/main.py b/scripts/builder/main.py
index 6fce65d..b9fe04a 100755
--- a/scripts/builder/main.py
+++ b/scripts/builder/main.py
@@ -7,13 +7,13 @@ import json
import shutil
import pprint
import codecs
import itertools
from collections import deque
-import frontendBuilder
+#import frontendBuilder
import repository
pp = pprint.PrettyPrinter(indent=4, depth=4)
#--------------------------------------------------------------------
@@ -72,29 +72,41 @@ def loadSettings (component, module):
def assembleBackend (backend, frontends, versions):
settings = loadSettings('backend', backend)
builderModuleName = backend + 'Builder'
builderClassName = backend.capitalize() + 'Builder'
-
+ #print ("BUILD BACKENDS - module: " + builderModuleName + " , class: " + builderClassName)
builderModule = __import__(builderModuleName)
builderClass = getattr(builderModule, builderClassName)
backendBuilder = builderClass(projectTargetDir(), frontends, versions, settings)
backendBuilder.run()
#====================================================================
def build (settings, repository):
frontends = []
if repository.areTherePendingChanges():
- print "\nWARNING: repository has pending changes\n"
+ if 'install' in settings['versions']:
+ raise Exception("repository has pending changes, can't 'install'")
+ else:
+ print "\nWARNING: repository has pending changes\n"
for frontend in settings['frontends']:
- frontends.append(frontendBuilder.FrontendBuilder(frontend, loadSettings('frontend', frontend), repository.version()))
+ normalizedFrontendName = frontend.replace(".", "_")
+ builderModuleName = normalizedFrontendName + 'Builder'
+ builderClassName = normalizedFrontendName.title() + 'Builder'
+
+ #print ("BUILD FRONTEND - module: " + builderModuleName + " , class: " + builderClassName)
+ builderModule = __import__(builderModuleName)
+ builderClass = getattr(builderModule, builderClassName)
+ builder = builderClass(frontend, loadSettings('frontend', frontend), repository.version())
+ #builder = frontendBuilder.FrontendBuilder(frontend, loadSettings('frontend', frontend), repository.version())
+ frontends.append(builder)
for backend in settings['backends']:
assembleBackend(backend, frontends, settings['versions'])
#--------------------------------------------------------------------
@@ -111,32 +123,34 @@ def usage (message):
print
# print "build clean"
# print "build clean install"
print "build install --ALL"
print "build install debug --ALL"
+ print "build install debug development --ALL"
# print "build clean install debug --ALL"
print "build install debug --backends php python --frontends beta gamma"
print "build install debug development --backends php python --frontends beta gamma gamma.mobile"
exit(1)
#--------------------------------------------------------------------
def allFrontends ():
- return ['beta', 'gamma', 'mobile']
+ return ['beta', 'gamma', 'gamma.mobile']
def allBackends ():
return ['php', 'python']
#--------------------------------------------------------------------
def main ():
settings = {}
parameters = list(itertools.islice(sys.argv, 1, None))
sys.path.append(os.path.join(scriptDir(), 'backends'))
+ sys.path.append(os.path.join(scriptDir(), 'frontends'))
currentRepository = repository.repositoryWithPath(projectBaseDir())
clean()
versions = list(itertools.takewhile(lambda x: not x.startswith('--'), parameters))
settings['versions'] = versions; #['debug', 'install', 'development']
parameters = deque(itertools.dropwhile(lambda x: not x.startswith('--'), parameters))
@@ -171,7 +185,7 @@ def main ():
build(settings, currentRepository)
else:
usage("Suggestions on how to call the 'build' script:")
if __name__ == "__main__":
- main()
+ main()
diff --git a/scripts/dev-proxy b/scripts/dev-proxy
new file mode 100755
index 0000000..e5980e3
--- a/dev/null
+++ b/scripts/dev-proxy
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+readonly CURR_DIR=$(cd "$(dirname "$0")"; pwd -P)
+
+#${CURR_DIR}/proxy/main.py $@
+python ${CURR_DIR}/proxy/main.py $@
+#twistd -y ${CURR_DIR}/proxy/main.py --pidfile=${CURR_DIR}/../target/proxy/proxy.pid --logfile=${CURR_DIR}/../target/proxy/logs/proxy.log \ No newline at end of file
diff --git a/scripts/proxy/main.py b/scripts/proxy/main.py
new file mode 100755
index 0000000..107ba16
--- a/dev/null
+++ b/scripts/proxy/main.py
@@ -0,0 +1,95 @@
+from twisted.internet import reactor
+from twisted.web import proxy, server, http, resource, static
+from posixpath import basename, dirname
+
+import copy
+import sys
+import os
+import pprint
+
+#--------------------------------------------------------------------
+
+def scriptDir ():
+ return os.path.dirname(sys.argv[0])
+
+def projectBaseDir ():
+ return os.path.abspath(scriptDir() + '/../..')
+
+def projectTargetDir():
+ return projectBaseDir() + '/target/'
+
+#--------------------------------------------------------------------
+
+class ClipperzTestSite(server.Site):
+
+ def __init__(self, resource, logPath=None, timeout=60 * 60 * 12):
+ server.Site.__init__(self, resource, logPath, timeout)
+
+
+ def getResourceFor(self, request):
+ if request.uri.startswith('/json') or request.uri.startswith('/dump'):
+ request.site = self
+ request.sitepath = copy.copy(request.prepath)
+ result = resource.getChildForRequest(self.resource, request)
+
+ else:
+ pathParts = request.uri.split('/')
+ version = pathParts[1]
+
+ if pathParts[2].startswith('index.'):
+ contentType = 'text/html'
+ absoluteFilePath = os.path.join(projectTargetDir(), 'dev', version, pathParts[2])
+ result = static.File(absoluteFilePath, contentType)
+
+ else:
+# http://homer.local:8888/beta/css/clipperz/images/loginInfoBackground.png
+# pathParts: ['', 'beta', 'css', 'clipperz', 'images', 'loginInfoBackground.png']
+ try:
+ imagePathIndex = pathParts.index('images')
+ resourceType = 'images'
+ for _ in range(2, imagePathIndex):
+ del pathParts[2]
+ except:
+ resourceType = pathParts[2]
+
+ basePath = projectBaseDir() + '/frontend'
+ if resourceType == 'images':
+ fileExtension = os.path.splitext(request.uri)[1]
+ if fileExtension == '.png':
+ contentType = 'image/png'
+ elif fileExtension == '.jpg':
+ contentType = 'image/jpeg'
+ elif fileExtension == '.gif':
+ contentType = 'image/gif'
+ else:
+ print "ERROR - unknown image extension: " + fileExtension
+
+ absoluteFilePath = basePath + '/'.join(pathParts)
+ else:
+ resourceType = pathParts[2]
+
+ if resourceType == 'css':
+ contentType = 'text/css'
+ elif resourceType == 'js':
+ contentType = 'text/javascript'
+ else:
+ contentType = 'text/html'
+
+ absoluteFilePath = basePath + request.uri
+
+ result = static.File(absoluteFilePath, contentType)
+
+
+ return result
+
+
+
+def main ():
+ site = ClipperzTestSite(proxy.ReverseProxyResource('localhost', 8084, '/java-backend'))
+ reactor.listenTCP(8888, site)
+ reactor.run()
+
+
+if __name__ == "__main__":
+ main()
+