summaryrefslogtreecommitdiff
path: root/scripts
Unidiff
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
@@ -1,24 +1,23 @@
1#!/usr/bin/env python 1#!/usr/bin/env python
2# -*- coding: UTF-8 -*- 2# -*- coding: UTF-8 -*-
3 3
4import sys, os, json 4import sys, os, json
5import shutil 5import shutil
6import hashlib 6import hashlib
7 7
8import main 8import main
9 9
10#=================================================================== 10#===================================================================
11 11
12
13class BackendBuilder(object): 12class BackendBuilder(object):
14 13
15 def __init__ (self, projectTargetDir, frontends, versions, settings): 14 def __init__ (self, projectTargetDir, frontends, versions, settings):
16 self.projectTargetDir = projectTargetDir 15 self.projectTargetDir = projectTargetDir
17 self.frontends = frontends 16 self.frontends = frontends
18 self.versions = versions 17 self.versions = versions
19 self.settings = settings 18 self.settings = settings
20 19
21 # -------------------------------------------------------------------------- 20 # --------------------------------------------------------------------------
22 21
23 def name (self): 22 def name (self):
24 raise NotImplementedError() 23 raise NotImplementedError()
@@ -41,28 +40,30 @@ class BackendBuilder(object):
41 return os.path.join(main.projectBaseDir() , 'backend', self.relativePath(), 'src') 40 return os.path.join(main.projectBaseDir() , 'backend', self.relativePath(), 'src')
42 41
43 42
44 def tempFolder (self): 43 def tempFolder (self):
45 return os.path.join(self.projectTargetDir, '.tmp', self.relativePath()) 44 return os.path.join(self.projectTargetDir, '.tmp', self.relativePath())
46 45
47 46
48 def frontEndTempFolder (self): 47 def frontEndTempFolder (self):
49 return self.tempFolder() 48 return self.tempFolder()
50 49
51 50
52 def developmentTargetFolder (self): 51 def developmentTargetFolder (self):
53 return os.path.join(self.projectTargetDir, 'development', self.relativePath()) 52 return os.path.join(self.projectTargetDir, 'development')
53
54 54
55 def targetFolder (self): 55 def targetFolder (self):
56 return os.path.join(self.projectTargetDir, self.relativePath()) 56 return os.path.join(self.projectTargetDir, self.relativePath())
57
57 58
58 # -------------------------------------------------------------------------- 59 # --------------------------------------------------------------------------
59 60
60 def writeToFolder (self, folder, filename, content): 61 def writeToFolder (self, folder, filename, content):
61 file = open(os.path.join(folder, filename), 'w') 62 file = open(os.path.join(folder, filename), 'w')
62 file.write(content.encode('utf-8')) 63 file.write(content.encode('utf-8'))
63 file.close() 64 file.close()
64 65
65 66
66 def configureIndexContent (self, indexContent, requestPathPrefix = ".."): 67 def configureIndexContent (self, indexContent, requestPathPrefix = ".."):
67 result = indexContent 68 result = indexContent
68 result = result.replace( '@request.path@', requestPathPrefix + '/' + self.settings['request.path'] ) 69 result = result.replace( '@request.path@', requestPathPrefix + '/' + self.settings['request.path'] )
@@ -94,38 +95,40 @@ class BackendBuilder(object):
94 if (frontend.module == frontend.submodule): 95 if (frontend.module == frontend.submodule):
95 submoduleExtension = '' 96 submoduleExtension = ''
96 else: 97 else:
97 submoduleExtension = '.' + frontend.submodule 98 submoduleExtension = '.' + frontend.submodule
98 99
99 main.createFolder(os.path.join(self.frontEndTempFolder(), frontend.module)) 100 main.createFolder(os.path.join(self.frontEndTempFolder(), frontend.module))
100 101
101 if 'debug' in self.versions: 102 if 'debug' in self.versions:
102 frontend.copyResourcesToFolder(self.frontEndTempFolder()) 103 frontend.copyResourcesToFolder(self.frontEndTempFolder())
103 104
104 index = self.configureIndexContent(frontend.assemble(assemblyMode='DEBUG', versionType='DEBUG')) 105 index = self.configureIndexContent(frontend.assemble(assemblyMode='DEBUG', versionType='DEBUG'))
105 self.writeToFolder(self.frontEndTempFolder(), os.path.join(frontend.module, 'index_debug' + submoduleExtension + '.html'), index) 106 self.writeToFolder(self.frontEndTempFolder(), os.path.join(frontend.module, 'index_debug' + submoduleExtension + '.html'), index)
106 107
107 if 'install' in self.versions: 108 if 'install' in self.versions:
108 index = self.configureIndexContent(frontend.assemble()) 109 index = self.configureIndexContent(frontend.assemble())
109 self.writeToFolder(self.frontEndTempFolder(), os.path.join(frontend.module, 'index' + submoduleExtension + '.html'), index) 110 self.writeToFolder(self.frontEndTempFolder(), os.path.join(frontend.module, 'index' + submoduleExtension + '.html'), index)
110 111
111 self.logChecksums(index, "[" + self.name() + " - " + frontend.module + "] index" + submoduleExtension + ".html checksum") 112 self.logChecksums(index, "[" + self.name() + " - " + frontend.module + "] index" + submoduleExtension + ".html checksum")
112 113
113 self.createPackage() 114 self.createPackage()
114 115
115 if 'development' in self.versions: 116 # if 'development' in self.versions:
116 for frontend in self.frontends: 117 # for frontend in self.frontends:
117 if (frontend.module == frontend.submodule): 118 # if (frontend.module == frontend.submodule):
118 submoduleExtension = '' 119 # submoduleExtension = ''
119 else: 120 # else:
120 submoduleExtension = '.' + frontend.submodule 121 # submoduleExtension = '.' + frontend.submodule
121 122#
122 print "FRONTEND module: " + frontend.module 123 # print "FRONTEND module: " + frontend.module
123 print "FRONTEND submodule: " + frontend.submodule 124 # print "FRONTEND submodule: " + frontend.submodule
124 125#
125 main.createFolder(os.path.join(self.developmentTargetFolder(), frontend.module)) 126 ## main.createFolder(os.path.join(self.developmentTargetFolder(), frontend.module))
126 127 # main.createFolder(self.developmentTargetFolder())
127 index = self.configureIndexContent(frontend.assemble(assemblyMode='DEVELOPMENT', versionType='DEBUG'), self.settings['development.settings']['url']) 128#
128 self.writeToFolder(self.developmentTargetFolder(), os.path.join(frontend.module, 'index' + submoduleExtension + '.html'), index) 129 # index = self.configureIndexContent(frontend.assemble(assemblyMode='DEVELOPMENT', versionType='DEBUG'), self.settings['development.settings']['url'])
130 ## self.writeToFolder(self.developmentTargetFolder(), os.path.join(frontend.module, 'index_development' + submoduleExtension + '.html'), index)
131 # self.writeToFolder(self.developmentTargetFolder(), os.path.join(frontend.module + submoduleExtension + '.html'), index)
129 132
130 133
131#=================================================================== 134#===================================================================
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 @@
1#!/usr/bin/env python
2# -*- coding: UTF-8 -*-
3
4import os
5import shutil
6import subprocess
7import main
8
9from backendBuilder import BackendBuilder
10
11class DevBuilder(BackendBuilder):
12
13 def name(self):
14 return "Dev builder"
15
16
17 def relativePath(self):
18 return 'dev'
19
20
21 #def frontEndTempFolder (self):
22 # return os.path.join(self.tempFolder(), 'src', 'main', 'webapp')
23
24
25 #def targetFolder (self):
26 # return self.projectTargetDir
27
28
29 def compileCode (self):
30 pass
31
32
33 def createPackage (self):
34 src = self.tempFolder()
35 dst = self.targetFolder()
36
37 shutil.copytree(src, dst)
38
39
40 def run (self):
41 print self.name() + " - RUN (dev)"
42
43 for frontend in self.frontends:
44 if (frontend.module == frontend.submodule):
45 submoduleExtension = ''
46 else:
47 submoduleExtension = '.' + frontend.submodule
48
49 main.createFolder(os.path.join(self.frontEndTempFolder(), frontend.module))
50
51 index = self.configureIndexContent(frontend.assemble(assemblyMode='DEBUG', versionType='DEBUG'))
52 self.writeToFolder(self.frontEndTempFolder(), os.path.join(frontend.module, 'index' + submoduleExtension + '.html'), index)
53
54 self.createPackage()
55
56
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
@@ -2,44 +2,59 @@
2# -*- coding: UTF-8 -*- 2# -*- coding: UTF-8 -*-
3 3
4import sys, os, re 4import sys, os, re
5import cssmin 5import cssmin
6import jsmin 6import jsmin
7import codecs 7import codecs
8import shutil 8import shutil
9import StringIO 9import StringIO
10import urllib 10import urllib
11 11
12import main 12import main
13 13
14#===============================================================================
15
14class FrontendBuilder(object): 16class FrontendBuilder(object):
15 17
16 def __init__ (self, frontend, settings, repositoryVersion): 18 def __init__ (self, frontend, settings, repositoryVersion):
17 if '.' in frontend: 19 if '.' in frontend:
18 moduleComponents = frontend.split('.') 20 moduleComponents = frontend.split('.')
19 self.module = moduleComponents[0] 21 self.module = moduleComponents[0]
20 self.submodule = moduleComponents[1] 22 self.submodule = moduleComponents[1]
21 else: 23 else:
22 self.module = frontend 24 self.module = frontend
23 self.submodule = frontend 25 self.submodule = frontend
24 26
25 self.settings = settings 27 self.settings = settings
26 self.projectDir = main.projectBaseDir() 28 self.projectDir = main.projectBaseDir()
27 # self.repository = repository.repositoryWithPath(self.projectDir) 29 # self.repository = repository.repositoryWithPath(self.projectDir)
28 self.repositoryVersion = repositoryVersion 30 self.repositoryVersion = repositoryVersion
29 self.processedFiles = {} 31 self.processedFiles = {}
30 32
33 #---------------------------------------------------------------------------
34
35 def name (self):
36 raise NotImplementedError()
37
38
39 def copyStaticResources (self, targetFolder):
40 raise NotImplementedError()
41
42 #---------------------------------------------------------------------------
31 43
32 def log (self, message): 44 def log (self, message):
33 print "frontend [" + self.module + "]: " + message 45 module = self.module
46 if (self.module != self.submodule):
47 module = module + "." + self.submodule
48 print "frontend [" + module + "]: " + message
34 49
35 50
36 def absolutePathForSources (self): 51 def absolutePathForSources (self):
37 return os.path.join(self.projectDir, 'frontend', self.module) 52 return os.path.join(self.projectDir, 'frontend', self.module)
38 53
39 54
40 def absolutePathForSourceFile (self, basePath, file): 55 def absolutePathForSourceFile (self, basePath, file):
41 return os.path.join(self.absolutePathForSources(), basePath, file) 56 return os.path.join(self.absolutePathForSources(), basePath, file)
42 57
43 58
44 def absolutePathForTargetFile (self, folder, basePath, file): 59 def absolutePathForTargetFile (self, folder, basePath, file):
45 return os.path.join(folder, self.module, basePath, file) 60 return os.path.join(folder, self.module, basePath, file)
@@ -49,34 +64,48 @@ class FrontendBuilder(object):
49 result = [] 64 result = []
50 65
51 for file in files: 66 for file in files:
52 if file.startswith('--'): 67 if file.startswith('--'):
53 pass 68 pass
54 else: 69 else:
55 result.append(file) 70 result.append(file)
56 71
57 return result 72 return result
58 73
59 74
60 def copyResources (self, sourceFolder, destinationFolder, fileType): 75 def copyResources (self, sourceFolder, destinationFolder, fileType):
61 for file in self.filterFiles(self.settings[fileType]): 76 if fileType in self.settings:
62 src = self.absolutePathForSourceFile(fileType, file) 77 for file in self.filterFiles(self.settings[fileType]):
63 dst = self.absolutePathForTargetFile(destinationFolder, fileType, file) 78 src = self.absolutePathForSourceFile(fileType, file)
64 main.createFolder(os.path.dirname(dst)) 79 dst = self.absolutePathForTargetFile(destinationFolder, fileType, file)
65 shutil.copy2(src, dst) 80 main.createFolder(os.path.dirname(dst))
81 shutil.copy2(src, dst)
82 else:
83 srcFolder = os.path.join(self.absolutePathForSources(), fileType)
84 dstFolder = os.path.join(destinationFolder, self.module, fileType)
85 if not(os.path.exists(dstFolder)):
86 shutil.copytree(srcFolder, dstFolder)
87
88 # try:
89 # shutil.copytree(srcFolder, dstFolder)
90 # except:
91 # pass
92
66 93
67 94
68 def copyResourcesToFolder (self, targetFolder): 95 def copyResourcesToFolder (self, targetFolder):
69 self.copyResources(self.projectDir, targetFolder, 'css') 96 self.copyResources(self.projectDir, targetFolder, 'css')
70 self.copyResources(self.projectDir, targetFolder, 'js') 97 self.copyResources(self.projectDir, targetFolder, 'js')
98 self.copyResources(self.projectDir, targetFolder, 'images')
99 self.copyStaticResources(targetFolder)
71 100
72 101
73 def loadFilesContent (self, basePath, files): 102 def loadFilesContent (self, basePath, files):
74 result = "" 103 result = ""
75 104
76 for file in self.filterFiles(files): 105 for file in self.filterFiles(files):
77 try: 106 try:
78 fileHandler = codecs.open(self.absolutePathForSourceFile(basePath, file), 'r', 'utf-8') 107 fileHandler = codecs.open(self.absolutePathForSourceFile(basePath, file), 'r', 'utf-8')
79 except: 108 except:
80 print "FILE: " + file 109 print "FILE: " + file
81 110
82 result += fileHandler.read() + '\n' 111 result += fileHandler.read() + '\n'
@@ -270,31 +299,31 @@ class FrontendBuilder(object):
270 if not self.processedFiles.has_key(cacheKey): 299 if not self.processedFiles.has_key(cacheKey):
271 result = 'bookmarklet="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet.js']), "regular") + '";bookmarklet_ie="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet_IE.js']), "IE") + '";' 300 result = 'bookmarklet="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet.js']), "regular") + '";bookmarklet_ie="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet_IE.js']), "IE") + '";'
272 self.processedFiles[cacheKey] = result 301 self.processedFiles[cacheKey] = result
273 else: 302 else:
274 result = self.processedFiles[cacheKey] 303 result = self.processedFiles[cacheKey]
275 304
276 return result 305 return result
277 306
278 307
279 def replaceTemplatePlaceholders (self, pageTitle, copyright, css, code, jsLoadMode, version, versionType): 308 def replaceTemplatePlaceholders (self, pageTitle, copyright, css, code, jsLoadMode, version, versionType):
280 result = self.template() 309 result = self.template()
281 310
282 result = result.replace('@page.title@', pageTitle, 1) 311 result = result.replace('@page.title@', pageTitle)
283 result = result.replace('@copyright@', copyright, 1) 312 result = result.replace('@copyright@', copyright)
284 result = result.replace('@css@', css, 1) 313 result = result.replace('@css@', css)
285 #result = result.replace('@bookmarklet@', bookmarklet,1) 314 #result = result.replace('@bookmarklet@', bookmarklet)
286 result = result.replace('@application.version@', version, 1) 315 result = result.replace('@application.version@', version)
287 result = result.replace('@application.version.type@', versionType,1) 316 result = result.replace('@application.version.type@',versionType)
288 result = result.replace('@js_' + jsLoadMode + '@', code, 1) 317 result = result.replace('@js_' + jsLoadMode + '@', code)
289 318
290 result = re.sub('@js_[^@]+@', '', result) 319 result = re.sub('@js_[^@]+@', '', result)
291 320
292 return result 321 return result
293 322
294 323
295 def assembleCopyrightHeader (self): 324 def assembleCopyrightHeader (self):
296 processedFile = 'copyright' 325 processedFile = 'copyright'
297 if not self.processedFiles.has_key(processedFile): 326 if not self.processedFiles.has_key(processedFile):
298 #self.log("assembling copyright header") 327 #self.log("assembling copyright header")
299 copyrightValues = self.settings['copyright.values'] 328 copyrightValues = self.settings['copyright.values']
300 license = self.loadFilesContent('../../properties', ['license.txt']) 329 license = self.loadFilesContent('../../properties', ['license.txt'])
@@ -362,24 +391,25 @@ class FrontendBuilder(object):
362 js =self.scriptTagForContent(self.bookmarklet()) + \ 391 js =self.scriptTagForContent(self.bookmarklet()) + \
363 '\n' + \ 392 '\n' + \
364 self.scriptTagsForFiles('./js', self.filterFiles(self.settings['js'])) 393 self.scriptTagsForFiles('./js', self.filterFiles(self.settings['js']))
365 jsLoadMode = 'LINKED' 394 jsLoadMode = 'LINKED'
366 395
367 elif assemblyMode == 'DEVELOPMENT': 396 elif assemblyMode == 'DEVELOPMENT':
368 copyright = "" 397 copyright = ""
369 css =self.cssTagsForFiles('file://' + str(os.path.join(self.absolutePathForSources(), 'css')), self.filterFiles(self.settings['css'])) 398 css =self.cssTagsForFiles('file://' + str(os.path.join(self.absolutePathForSources(), 'css')), self.filterFiles(self.settings['css']))
370 js =self.scriptTagForContent(self.bookmarklet()) + \ 399 js =self.scriptTagForContent(self.bookmarklet()) + \
371 '\n' + \ 400 '\n' + \
372 self.scriptTagsForFiles('file://' + str(os.path.join(self.absolutePathForSources(), 'js')), self.filterFiles(self.settings['js'])) 401 self.scriptTagsForFiles('file://' + str(os.path.join(self.absolutePathForSources(), 'js')), self.filterFiles(self.settings['js']))
373 jsLoadMode = 'LINKED' 402 jsLoadMode = 'LINKED'
403 versionType = 'development'
374 404
375 else: 405 else:
376 raise NotImplementedError() 406 raise NotImplementedError()
377 407
378 return self.assembleVersion( 408 return self.assembleVersion(
379 pageTitle = pageTitle, 409 pageTitle = pageTitle,
380 copyright = copyright, 410 copyright = copyright,
381 css = css, 411 css = css,
382 js = js, 412 js = js,
383 jsLoadMode = jsLoadMode, 413 jsLoadMode = jsLoadMode,
384 version = self.repositoryVersion, 414 version = self.repositoryVersion,
385 versionType = versionType 415 versionType = versionType
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 @@
1from frontendBuilder import FrontendBuilder
2import shutil
3
4class BetaBuilder(FrontendBuilder):
5
6 def name(self):
7 return "/beta builder"
8
9 def copyStaticResources (self, targetFolder):
10 for file in self.filterFiles(self.settings['staticResources']):
11 src = self.absolutePathForSourceFile('staticResources', file)
12 dst = self.absolutePathForTargetFile(targetFolder, '', file)
13 shutil.copy2(src, dst)
14
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 @@
1from frontendBuilder import FrontendBuilder
2import shutil
3
4class GammaBuilder(FrontendBuilder):
5
6 def name(self):
7 return "/gamma builder"
8
9 def copyStaticResources (self, targetFolder):
10 resourcesToCopy = [
11 {'folder': 'html', 'source': 'exit_template.html','target': 'exit.html'},
12 {'folder': 'css', 'source': 'static.css', 'target': 'static.css'}
13 ]
14
15 for resource in resourcesToCopy:
16 src = self.absolutePathForSourceFile(resource['folder'], resource['source'])
17 dst = self.absolutePathForTargetFile(targetFolder, '', resource['target'])
18 shutil.copy2(src, dst)
19
20 # src = self.absolutePathForSourceFile('html', 'exit_template.html')
21 # dst = self.absolutePathForTargetFile(targetFolder, '', 'exit.html')
22 # shutil.copy2(src, dst)
23
24 # src = self.absolutePathForSourceFile('css', 'static.css')
25 # dst = self.absolutePathForTargetFile(targetFolder, '', 'static.css')
26 # 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 @@
1from frontendBuilder import FrontendBuilder
2
3class Gamma_MobileBuilder(FrontendBuilder):
4
5 def name(self):
6 return "/gamma.mobile builder"
7
8 def copyStaticResources (self, targetFolder):
9 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
@@ -1,25 +1,25 @@
1#!/usr/bin/env python 1#!/usr/bin/env python
2# -*- coding: UTF-8 -*- 2# -*- coding: UTF-8 -*-
3 3
4import sys 4import sys
5import os 5import os
6import json 6import json
7import shutil 7import shutil
8import pprint 8import pprint
9import codecs 9import codecs
10import itertools 10import itertools
11from collections import deque 11from collections import deque
12 12
13import frontendBuilder 13#import frontendBuilder
14import repository 14import repository
15 15
16pp = pprint.PrettyPrinter(indent=4, depth=4) 16pp = pprint.PrettyPrinter(indent=4, depth=4)
17 17
18#-------------------------------------------------------------------- 18#--------------------------------------------------------------------
19 19
20def scriptDir (): 20def scriptDir ():
21 return os.path.dirname(sys.argv[0]) 21 return os.path.dirname(sys.argv[0])
22 22
23def projectBaseDir (): 23def projectBaseDir ():
24 return os.path.abspath(scriptDir() + '/../..') 24 return os.path.abspath(scriptDir() + '/../..')
25 25
@@ -66,83 +66,97 @@ def loadSettings (component, module):
66 # else: 66 # else:
67 # raise Exception('unrecognized version: ' + version) 67 # raise Exception('unrecognized version: ' + version)
68 # 68 #
69 # return result 69 # return result
70# 70#
71#==================================================================== 71#====================================================================
72 72
73def assembleBackend (backend, frontends, versions): 73def assembleBackend (backend, frontends, versions):
74 settings = loadSettings('backend', backend) 74 settings = loadSettings('backend', backend)
75 75
76 builderModuleName = backend + 'Builder' 76 builderModuleName = backend + 'Builder'
77 builderClassName = backend.capitalize() + 'Builder' 77 builderClassName = backend.capitalize() + 'Builder'
78 78 #print ("BUILD BACKENDS - module: " + builderModuleName + " , class: " + builderClassName)
79 builderModule = __import__(builderModuleName) 79 builderModule = __import__(builderModuleName)
80 builderClass = getattr(builderModule, builderClassName) 80 builderClass = getattr(builderModule, builderClassName)
81 81
82 backendBuilder = builderClass(projectTargetDir(), frontends, versions, settings) 82 backendBuilder = builderClass(projectTargetDir(), frontends, versions, settings)
83 backendBuilder.run() 83 backendBuilder.run()
84 84
85#==================================================================== 85#====================================================================
86 86
87def build (settings, repository): 87def build (settings, repository):
88 frontends = [] 88 frontends = []
89 89
90 if repository.areTherePendingChanges(): 90 if repository.areTherePendingChanges():
91 print "\nWARNING: repository has pending changes\n" 91 if 'install' in settings['versions']:
92 raise Exception("repository has pending changes, can't 'install'")
93 else:
94 print "\nWARNING: repository has pending changes\n"
92 95
93 for frontend in settings['frontends']: 96 for frontend in settings['frontends']:
94 frontends.append(frontendBuilder.FrontendBuilder(frontend, loadSettings('frontend', frontend), repository.version())) 97 normalizedFrontendName = frontend.replace(".", "_")
98 builderModuleName = normalizedFrontendName + 'Builder'
99 builderClassName = normalizedFrontendName.title() + 'Builder'
100
101 #print ("BUILD FRONTEND - module: " + builderModuleName + " , class: " + builderClassName)
102 builderModule = __import__(builderModuleName)
103 builderClass = getattr(builderModule, builderClassName)
104 builder = builderClass(frontend, loadSettings('frontend', frontend), repository.version())
105 #builder = frontendBuilder.FrontendBuilder(frontend, loadSettings('frontend', frontend), repository.version())
106 frontends.append(builder)
95 107
96 for backend in settings['backends']: 108 for backend in settings['backends']:
97 assembleBackend(backend, frontends, settings['versions']) 109 assembleBackend(backend, frontends, settings['versions'])
98 110
99#-------------------------------------------------------------------- 111#--------------------------------------------------------------------
100 112
101def clean (): 113def clean ():
102 # print "cleaning up …" 114 # print "cleaning up …"
103 if os.path.exists(projectTargetDir()): 115 if os.path.exists(projectTargetDir()):
104 shutil.rmtree(projectTargetDir()) 116 shutil.rmtree(projectTargetDir())
105 117
106#-------------------------------------------------------------------- 118#--------------------------------------------------------------------
107 119
108def usage (message): 120def usage (message):
109 if message != None: 121 if message != None:
110 print "ERROR: " + message 122 print "ERROR: " + message
111 123
112 print 124 print
113 # print "build clean" 125 # print "build clean"
114 # print "build clean install" 126 # print "build clean install"
115 print "build install --ALL" 127 print "build install --ALL"
116 print "build install debug --ALL" 128 print "build install debug --ALL"
129 print "build install debug development --ALL"
117 # print "build clean install debug --ALL" 130 # print "build clean install debug --ALL"
118 print "build install debug --backends php python --frontends beta gamma" 131 print "build install debug --backends php python --frontends beta gamma"
119 print "build install debug development --backends php python --frontends beta gamma gamma.mobile" 132 print "build install debug development --backends php python --frontends beta gamma gamma.mobile"
120 exit(1) 133 exit(1)
121 134
122#-------------------------------------------------------------------- 135#--------------------------------------------------------------------
123 136
124def allFrontends (): 137def allFrontends ():
125 return ['beta', 'gamma', 'mobile'] 138 return ['beta', 'gamma', 'gamma.mobile']
126 139
127def allBackends (): 140def allBackends ():
128 return ['php', 'python'] 141 return ['php', 'python']
129 142
130#-------------------------------------------------------------------- 143#--------------------------------------------------------------------
131 144
132def main (): 145def main ():
133 settings = {} 146 settings = {}
134 parameters = list(itertools.islice(sys.argv, 1, None)) 147 parameters = list(itertools.islice(sys.argv, 1, None))
135 148
136 sys.path.append(os.path.join(scriptDir(), 'backends')) 149 sys.path.append(os.path.join(scriptDir(), 'backends'))
150 sys.path.append(os.path.join(scriptDir(), 'frontends'))
137 currentRepository = repository.repositoryWithPath(projectBaseDir()) 151 currentRepository = repository.repositoryWithPath(projectBaseDir())
138 152
139 clean() 153 clean()
140 versions = list(itertools.takewhile(lambda x: not x.startswith('--'), parameters)) 154 versions = list(itertools.takewhile(lambda x: not x.startswith('--'), parameters))
141 settings['versions'] = versions; #['debug', 'install', 'development'] 155 settings['versions'] = versions; #['debug', 'install', 'development']
142 parameters = deque(itertools.dropwhile(lambda x: not x.startswith('--'), parameters)) 156 parameters = deque(itertools.dropwhile(lambda x: not x.startswith('--'), parameters))
143 157
144 if len(parameters) > 0: 158 if len(parameters) > 0:
145 parameter = parameters.popleft() 159 parameter = parameters.popleft()
146 if parameter == "--ALL": 160 if parameter == "--ALL":
147 settings['frontends'] = allFrontends() 161 settings['frontends'] = allFrontends()
148 settings['backends'] = allBackends() 162 settings['backends'] = allBackends()
@@ -165,13 +179,13 @@ def main ():
165 usage("missing 'versions'") 179 usage("missing 'versions'")
166 if (not settings.has_key('frontends')): 180 if (not settings.has_key('frontends')):
167 usage("missing 'frontends'") 181 usage("missing 'frontends'")
168 if (not settings.has_key('backends')): 182 if (not settings.has_key('backends')):
169 usage("missing 'backends'") 183 usage("missing 'backends'")
170 184
171 build(settings, currentRepository) 185 build(settings, currentRepository)
172 else: 186 else:
173 usage("Suggestions on how to call the 'build' script:") 187 usage("Suggestions on how to call the 'build' script:")
174 188
175 189
176if __name__ == "__main__": 190if __name__ == "__main__":
177 main() 191 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 @@
1#!/bin/bash
2
3readonly CURR_DIR=$(cd "$(dirname "$0")"; pwd -P)
4
5#${CURR_DIR}/proxy/main.py $@
6python ${CURR_DIR}/proxy/main.py $@
7#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 @@
1from twisted.internet import reactor
2from twisted.web import proxy, server, http, resource, static
3from posixpath import basename, dirname
4
5import copy
6import sys
7import os
8import pprint
9
10#--------------------------------------------------------------------
11
12def scriptDir ():
13 return os.path.dirname(sys.argv[0])
14
15def projectBaseDir ():
16 return os.path.abspath(scriptDir() + '/../..')
17
18def projectTargetDir():
19 return projectBaseDir() + '/target/'
20
21#--------------------------------------------------------------------
22
23class ClipperzTestSite(server.Site):
24
25 def __init__(self, resource, logPath=None, timeout=60 * 60 * 12):
26 server.Site.__init__(self, resource, logPath, timeout)
27
28
29 def getResourceFor(self, request):
30 if request.uri.startswith('/json') or request.uri.startswith('/dump'):
31 request.site = self
32 request.sitepath = copy.copy(request.prepath)
33 result = resource.getChildForRequest(self.resource, request)
34
35 else:
36 pathParts = request.uri.split('/')
37 version = pathParts[1]
38
39 if pathParts[2].startswith('index.'):
40 contentType = 'text/html'
41 absoluteFilePath = os.path.join(projectTargetDir(), 'dev', version, pathParts[2])
42 result = static.File(absoluteFilePath, contentType)
43
44 else:
45 #http://homer.local:8888/beta/css/clipperz/images/loginInfoBackground.png
46 #pathParts: ['', 'beta', 'css', 'clipperz', 'images', 'loginInfoBackground.png']
47 try:
48 imagePathIndex = pathParts.index('images')
49 resourceType = 'images'
50 for _ in range(2, imagePathIndex):
51 del pathParts[2]
52 except:
53 resourceType = pathParts[2]
54
55 basePath = projectBaseDir() + '/frontend'
56 if resourceType == 'images':
57 fileExtension = os.path.splitext(request.uri)[1]
58 if fileExtension == '.png':
59 contentType = 'image/png'
60 elif fileExtension == '.jpg':
61 contentType = 'image/jpeg'
62 elif fileExtension == '.gif':
63 contentType = 'image/gif'
64 else:
65 print "ERROR - unknown image extension: " + fileExtension
66
67 absoluteFilePath = basePath + '/'.join(pathParts)
68 else:
69 resourceType = pathParts[2]
70
71 if resourceType == 'css':
72 contentType = 'text/css'
73 elif resourceType == 'js':
74 contentType = 'text/javascript'
75 else:
76 contentType = 'text/html'
77
78 absoluteFilePath = basePath + request.uri
79
80 result = static.File(absoluteFilePath, contentType)
81
82
83 return result
84
85
86
87def main ():
88 site = ClipperzTestSite(proxy.ReverseProxyResource('localhost', 8084, '/java-backend'))
89 reactor.listenTCP(8888, site)
90 reactor.run()
91
92
93if __name__ == "__main__":
94 main()
95