summaryrefslogtreecommitdiff
path: root/scripts
authorGiulio Cesare Solaroli <giulio.cesare@clipperz.com>2013-08-30 15:56:53 (UTC)
committer Giulio Cesare Solaroli <giulio.cesare@clipperz.com>2013-08-30 21:23:42 (UTC)
commit20bea94ab6b91c85b171dcf86baba0a64169d508 (patch) (unidiff)
tree6e38e91498dcdb861620eba1e237d1026fe79cc5 /scripts
parentbde3c7b98523112ade9c5bbf7390c4ecb494cd2e (diff)
downloadclipperz-20bea94ab6b91c85b171dcf86baba0a64169d508.zip
clipperz-20bea94ab6b91c85b171dcf86baba0a64169d508.tar.gz
clipperz-20bea94ab6b91c85b171dcf86baba0a64169d508.tar.bz2
First release of /delta version
Diffstat (limited to 'scripts') (more/less context) (ignore whitespace changes)
-rwxr-xr-xscripts/builder/backendBuilder.py7
-rw-r--r--[-rwxr-xr-x]scripts/builder/backends/phpBuilder.py0
-rw-r--r--scripts/builder/frontendBuilder.py73
-rw-r--r--scripts/builder/frontends/betaBuilder.py3
-rw-r--r--scripts/builder/frontends/deltaBuilder.py16
-rw-r--r--scripts/builder/frontends/gammaBuilder.py3
-rw-r--r--scripts/builder/frontends/gamma_mobileBuilder.py3
-rwxr-xr-xscripts/proxy/main.py19
8 files changed, 60 insertions, 64 deletions
diff --git a/scripts/builder/backendBuilder.py b/scripts/builder/backendBuilder.py
index b4ee990..ad6595c 100755
--- a/scripts/builder/backendBuilder.py
+++ b/scripts/builder/backendBuilder.py
@@ -39,67 +39,70 @@ class BackendBuilder(object):
39 raise NotImplementedError() 39 raise NotImplementedError()
40 40
41 # -------------------------------------------------------------------------- 41 # --------------------------------------------------------------------------
42 42
43 def sourceFolder (self): 43 def sourceFolder (self):
44 return os.path.join(main.projectBaseDir() , 'backend', self.relativePath(), 'src') 44 return os.path.join(main.projectBaseDir() , 'backend', self.relativePath(), 'src')
45 45
46 46
47 def tempFolder (self): 47 def tempFolder (self):
48 return os.path.join(self.projectTargetDir, '.tmp', self.relativePath()) 48 return os.path.join(self.projectTargetDir, '.tmp', self.relativePath())
49 49
50 50
51 def frontEndTempFolder (self): 51 def frontEndTempFolder (self):
52 return self.tempFolder() 52 return self.tempFolder()
53 53
54 54
55 def developmentTargetFolder (self): 55 def developmentTargetFolder (self):
56 return os.path.join(self.projectTargetDir, 'development') 56 return os.path.join(self.projectTargetDir, 'development')
57 57
58 58
59 def targetFolder (self): 59 def targetFolder (self):
60 return os.path.join(self.projectTargetDir, self.relativePath()) 60 return os.path.join(self.projectTargetDir, self.relativePath())
61 61
62 62
63 # -------------------------------------------------------------------------- 63 # --------------------------------------------------------------------------
64 64
65 def writeToFolder (self, folder, filename, content): 65 def writeToFolder (self, folder, filename, content):
66 file = open(os.path.join(folder, filename), 'w') 66 file = open(os.path.join(folder, filename), 'w')
67 file.write(content.encode('utf-8')) 67 file.write(content.encode('utf-8'))
68 file.close() 68 file.close()
69 69
70 70
71 def configureIndexContent (self, indexContent, requestPathPrefix = ".."): 71 #def configureIndexContent (self, indexContent, requestPathPrefix = ".."):
72 def configureIndexContent (self, indexContent):
72 result = indexContent 73 result = indexContent
73 result = result.replace( '@request.path@', requestPathPrefix + '/' + self.settings['request.path'] ) 74 # result = result.replace( '@request.path@', requestPathPrefix + '/' + self.settings['request.path'] )
75 result = result.replace( '@request.path@', self.settings['request.path'] )
76 result = result.replace( '@dump.path@', self.settings['dump.path'] )
74 result = result.replace( '@should.pay.toll@', self.settings['should.pay.toll'] ) 77 result = result.replace( '@should.pay.toll@', self.settings['should.pay.toll'] )
75 78
76 return result 79 return result
77 80
78 81
79 def formatMAC (self, value): 82 def formatMAC (self, value):
80 x = iter(value) 83 x = iter(value)
81 return ' '.join([reduce(add, tup) for tup in izip(x, x, x, x)]) 84 return ' '.join([reduce(add, tup) for tup in izip(x, x, x, x)])
82 85
83 86
84 def logChecksums (self, content, message): 87 def logChecksums (self, content, message):
85 md5Digest = self.formatMAC(hashlib.md5(content.encode('utf-8')).hexdigest()) 88 md5Digest = self.formatMAC(hashlib.md5(content.encode('utf-8')).hexdigest())
86 shaDigest = self.formatMAC(hashlib.sha1(content.encode('utf-8')).hexdigest()) 89 shaDigest = self.formatMAC(hashlib.sha1(content.encode('utf-8')).hexdigest())
87 sha256Digest= self.formatMAC(hashlib.sha256(content.encode('utf-8')).hexdigest()) 90 sha256Digest= self.formatMAC(hashlib.sha256(content.encode('utf-8')).hexdigest())
88 print "-----" 91 print "-----"
89 print message + ": " + md5Digest + " (md5)" 92 print message + ": " + md5Digest + " (md5)"
90 print message + ": " + shaDigest + " (sha1)" 93 print message + ": " + shaDigest + " (sha1)"
91 print message + ": " + sha256Digest + " (sha256)" 94 print message + ": " + sha256Digest + " (sha256)"
92 print "=====" 95 print "====="
93 96
94 97
95 def shouldCompileCode (self): 98 def shouldCompileCode (self):
96 return ('debug' in self.versions) or ('install' in self.versions) 99 return ('debug' in self.versions) or ('install' in self.versions)
97 100
98 101
99 def run (self): 102 def run (self):
100 print self.name() + " - RUN" 103 print self.name() + " - RUN"
101 104
102 if self.shouldCompileCode(): 105 if self.shouldCompileCode():
103 self.compileCode() 106 self.compileCode()
104 107
105 for frontend in self.frontends: 108 for frontend in self.frontends:
diff --git a/scripts/builder/backends/phpBuilder.py b/scripts/builder/backends/phpBuilder.py
index c928aa0..c928aa0 100755..100644
--- a/scripts/builder/backends/phpBuilder.py
+++ b/scripts/builder/backends/phpBuilder.py
diff --git a/scripts/builder/frontendBuilder.py b/scripts/builder/frontendBuilder.py
index e52c31e..b72179f 100644
--- a/scripts/builder/frontendBuilder.py
+++ b/scripts/builder/frontendBuilder.py
@@ -6,125 +6,129 @@ import 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#=============================================================================== 14#===============================================================================
15 15
16class FrontendBuilder(object): 16class FrontendBuilder(object):
17 17
18 def __init__ (self, frontend, settings, repositoryVersion): 18 def __init__ (self, frontend, settings, repositoryVersion):
19 if '.' in frontend: 19 if '.' in frontend:
20 moduleComponents = frontend.split('.') 20 moduleComponents = frontend.split('.')
21 self.module = moduleComponents[0] 21 self.module = moduleComponents[0]
22 self.submodule = moduleComponents[1] 22 self.submodule = moduleComponents[1]
23 else: 23 else:
24 self.module = frontend 24 self.module = frontend
25 self.submodule = frontend 25 self.submodule = frontend
26 26
27 self.settings = settings 27 self.settings = settings
28 self.projectDir = main.projectBaseDir() 28 self.projectDir = main.projectBaseDir()
29 # self.repository = repository.repositoryWithPath(self.projectDir) 29 # self.repository = repository.repositoryWithPath(self.projectDir)
30 self.repositoryVersion = repositoryVersion 30 self.repositoryVersion = repositoryVersion
31 self.processedFiles = {} 31 self.processedFiles = {}
32 32
33 #--------------------------------------------------------------------------- 33 #---------------------------------------------------------------------------
34 34
35 def name (self): 35 def name (self):
36 raise NotImplementedError() 36 raise NotImplementedError()
37 37
38 def projectResourceTypes (self):
39 raise NotImplementedError()
38 40
39 def copyStaticResources (self, targetFolder): 41 def copyStaticResources (self, targetFolder):
40 raise NotImplementedError() 42 raise NotImplementedError()
41 43
42 #--------------------------------------------------------------------------- 44 #---------------------------------------------------------------------------
43 45
44 def log (self, message): 46 def log (self, message):
45 module = self.module 47 module = self.module
46 if (self.module != self.submodule): 48 if (self.module != self.submodule):
47 module = module + "." + self.submodule 49 module = module + "." + self.submodule
48 print "frontend [" + module + "]: " + message 50 print "frontend [" + module + "]: " + message
49 51
50 52
51 def absolutePathForSources (self): 53 def absolutePathForSources (self):
52 return os.path.join(self.projectDir, 'frontend', self.module) 54 return os.path.join(self.projectDir, 'frontend', self.module)
53 55
54 56
55 def absolutePathForSourceFile (self, basePath, file): 57 def absolutePathForSourceFile (self, basePath, file):
56 return os.path.join(self.absolutePathForSources(), basePath, file) 58 return os.path.join(self.absolutePathForSources(), basePath, file)
57 59
58 60
59 def absolutePathForTargetFile (self, folder, basePath, file): 61 def absolutePathForTargetFile (self, folder, basePath, file):
60 return os.path.join(folder, self.module, basePath, file) 62 return os.path.join(folder, self.module, basePath, file)
61 63
62 64
63 def filterFiles (self, files): 65 def filterFiles (self, files):
64 result = [] 66 result = []
65 67
66 for file in files: 68 for file in files:
67 if file.startswith('--'): 69 if file.startswith('--'):
68 pass 70 pass
69 else: 71 else:
70 result.append(file) 72 result.append(file)
71 73
72 return result 74 return result
73 75
74 76
75 def copyResources (self, sourceFolder, destinationFolder, fileType): 77 def copyResources (self, sourceFolder, destinationFolder, fileType):
76 if fileType in self.settings: 78 if fileType in self.settings:
77 for file in self.filterFiles(self.settings[fileType]): 79 for file in self.filterFiles(self.settings[fileType]):
78 src = self.absolutePathForSourceFile(fileType, file) 80 src = self.absolutePathForSourceFile(fileType, file)
79 dst = self.absolutePathForTargetFile(destinationFolder, fileType, file) 81 dst = self.absolutePathForTargetFile(destinationFolder, fileType, file)
80 main.createFolder(os.path.dirname(dst)) 82 main.createFolder(os.path.dirname(dst))
81 shutil.copy2(src, dst) 83 shutil.copy2(src, dst)
82 else: 84 else:
83 srcFolder = os.path.join(self.absolutePathForSources(), fileType) 85 srcFolder = os.path.join(self.absolutePathForSources(), fileType)
84 dstFolder = os.path.join(destinationFolder, self.module, fileType) 86 dstFolder = os.path.join(destinationFolder, self.module, fileType)
85 if not(os.path.exists(dstFolder)): 87 if not(os.path.exists(dstFolder)):
86 shutil.copytree(srcFolder, dstFolder) 88 shutil.copytree(srcFolder, dstFolder)
87 89
88 # try: 90 # try:
89 # shutil.copytree(srcFolder, dstFolder) 91 # shutil.copytree(srcFolder, dstFolder)
90 # except: 92 # except:
91 # pass 93 # pass
92 94
93 95
94 96
95 def copyResourcesToFolder (self, targetFolder): 97 def copyResourcesToFolder (self, targetFolder):
96 self.copyResources(self.projectDir, targetFolder, 'css') 98 # self.copyResources(self.projectDir, targetFolder, 'css')
97 self.copyResources(self.projectDir, targetFolder, 'js') 99 # self.copyResources(self.projectDir, targetFolder, 'js')
98 self.copyResources(self.projectDir, targetFolder, 'images') 100 # self.copyResources(self.projectDir, targetFolder, 'images')
101 for resoureceType in self.projectResourceTypes():
102 self.copyResources(self.projectDir, targetFolder, resoureceType)
99 self.copyStaticResources(targetFolder) 103 self.copyStaticResources(targetFolder)
100 104
101 105
102 def loadFilesContent (self, basePath, files): 106 def loadFilesContent (self, basePath, files):
103 result = "" 107 result = ""
104 108
105 for file in self.filterFiles(files): 109 for file in self.filterFiles(files):
106 try: 110 try:
107 fileHandler = codecs.open(self.absolutePathForSourceFile(basePath, file), 'r', 'utf-8') 111 fileHandler = codecs.open(self.absolutePathForSourceFile(basePath, file), 'r', 'utf-8')
108 except: 112 except:
109 print "FILE: " + file 113 print "FILE: " + file
110 114
111 result += fileHandler.read() + '\n' 115 result += fileHandler.read() + '\n'
112 fileHandler.close() 116 fileHandler.close()
113 117
114 return result 118 return result
115 119
116 120
117 def template (self): 121 def template (self):
118 processedFile = 'html_template' 122 processedFile = 'html_template'
119 if not self.processedFiles.has_key(processedFile): 123 if not self.processedFiles.has_key(processedFile):
120 #self.processedFiles[processedFile] = self.loadFilesContent('html', ['index_template.html']) 124 #self.processedFiles[processedFile] = self.loadFilesContent('html', ['index_template.html'])
121 self.processedFiles[processedFile] = self.loadFilesContent('html', [self.settings['html.template']]) 125 self.processedFiles[processedFile] = self.loadFilesContent('html', [self.settings['html.template']])
122 126
123 return self.processedFiles[processedFile] 127 return self.processedFiles[processedFile]
124 128
125 129
126 def cssminCompressor (self, css): 130 def cssminCompressor (self, css):
127 # package found here: 131 # package found here:
128 # - http://stackoverflow.com/questions/222581/python-script-for-minifying-css/2396777#2396777 132 # - http://stackoverflow.com/questions/222581/python-script-for-minifying-css/2396777#2396777
129 # actual downloaded version: http://pypi.python.org/pypi/cssmin/0.1.4 133 # actual downloaded version: http://pypi.python.org/pypi/cssmin/0.1.4
130 return cssmin.cssmin(css) 134 return cssmin.cssmin(css)
@@ -214,113 +218,66 @@ class FrontendBuilder(object):
214 ('isLoginForm', 'ilf'), 218 ('isLoginForm', 'ilf'),
215 ('findLoginForm', 'flf'), 219 ('findLoginForm', 'flf'),
216 ('findLoginForm', 'flf'), 220 ('findLoginForm', 'flf'),
217 ('formParameters', 'fp' ), 221 ('formParameters', 'fp' ),
218 ('pageParameters', 'pp' ), 222 ('pageParameters', 'pp' ),
219 ('serializeJSON', 'sj' ), 223 ('serializeJSON', 'sj' ),
220 ('reprString', 'rs' ), 224 ('reprString', 'rs' ),
221 ('logFormParameters', 'lfp'), 225 ('logFormParameters', 'lfp'),
222 ('loadClipperzBookmarklet','lcb'), 226 ('loadClipperzBookmarklet','lcb'),
223 ('loginForm', 'lf' ), 227 ('loginForm', 'lf' ),
224 ('parameters', 'p' ), 228 ('parameters', 'p' ),
225 ('inputElementValues', 'iev'), 229 ('inputElementValues', 'iev'),
226 ] 230 ]
227 result = self.compressJS(bookmakeletCode, version + " bookmarklet") 231 result = self.compressJS(bookmakeletCode, version + " bookmarklet")
228 232
229 result = re.sub('\n', ' ', result) #Fit all in a single line 233 result = re.sub('\n', ' ', result) #Fit all in a single line
230 # result = re.sub('\s+', ' ', result) #Collapse "redundant" spaces. WARNING: this could have some evil side effects on constant strings used inside to code!! 234 # result = re.sub('\s+', ' ', result) #Collapse "redundant" spaces. WARNING: this could have some evil side effects on constant strings used inside to code!!
231 # result = re.sub('\s?([,\+=\(\)\{\};])\s?', '\\1', result) 235 # result = re.sub('\s?([,\+=\(\)\{\};])\s?', '\\1', result)
232 236
233 for replacer in replacers: 237 for replacer in replacers:
234 result = re.sub(replacer[0], replacer[1], result) 238 result = re.sub(replacer[0], replacer[1], result)
235 239
236 # <!-- escaping required to handle the bookmarklet code within the javascript code --> 240 # <!-- escaping required to handle the bookmarklet code within the javascript code -->
237 result = re.sub('\://', '%3a%2f%2f',result) 241 result = re.sub('\://', '%3a%2f%2f',result)
238 result = re.sub('/', '%2f', result) 242 result = re.sub('/', '%2f', result)
239 # result = re.sub('"', '%22', result) 243 # result = re.sub('"', '%22', result)
240 result = re.sub('"', '\\"', result) 244 result = re.sub('"', '\\"', result)
241 result = re.sub('\"', '%22', result) 245 result = re.sub('\"', '%22', result)
242 result = re.sub('\'', '%22', result) 246 result = re.sub('\'', '%22', result)
243 result = re.sub('\\\\', '%5c', result) 247 result = re.sub('\\\\', '%5c', result)
244 result = result.strip() 248 result = result.strip()
245 result = 'javascript:' + result 249 result = 'javascript:' + result
246
247 # replacers = [
248 # ('aForm', '_1' ),
249 # ('inputFields', '_2' ),
250 # ('passwordFieldsFound','_3' ),
251 # ('aDocument', '_6' ),
252 # ('aLevel', '_7' ),
253 # # ('result', '_8' ),
254 # ('documentForms', '_9' ),
255 # ('iFrames', '_c' ),
256 # ('anInputElement', '_d' ),
257 # ('options', '_f' ),
258 # ('option', '_12'),
259 # ('aLoginForm', '_13'),
260 # # ('action', '_17'),
261 # ('radioValues', '_18'),
262 # ('radioValueName', '_19'),
263 # ('inputElement', '_1a'),
264 # ('elementValues', '_1b'),
265 # ('radioValue', '_1c'),
266 # ('values', '_1d'),
267 # ('objtype', '_21'),
268 # ('useKey', '_27'),
269 # ('bookmarkletDiv', '_28'),
270 # ('someParameters', '_29'),
271 # ('anException', '_2a'),
272 # ('newDiv', '_2b'),
273 # ('base_url', '_2c'),
274 # ('help_url', '_2d'),
275 # ('logo_image_url', '_2e'),
276 # ('background_image_url','_2f'),
277 # ('close_image_url', '_30'),
278 # #('bookmarklet_textarea','_31'),
279 # ('innerHTML', '_32'),
280 # ]
281 # for replacer in replacers:
282 # result = re.sub('([^\.])' + replacer[0], '\\1' + replacer[1], result)
283
284 # replacers = [
285 # ('headNode', '_1' ),
286 # ('clipperzScriptNode','_2' ),
287 # ]
288 # for replacer in replacers:
289 # result = re.sub('([^\.])' + replacer[0], '\\1' + replacer[1], result)
290
291 # result = re.sub(';', ';\n', result)
292 250
293 return result 251 return result
294
295 252
296 253
297 def bookmarklet (self): 254 def bookmarklet (self):
298 cacheKey = 'bookmarklet' 255 cacheKey = 'bookmarklet'
299 if not self.processedFiles.has_key(cacheKey): 256 if not self.processedFiles.has_key(cacheKey):
300 result = 'bookmarklet="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet.js']), "regular") + '";bookmarklet_ie="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet_IE.js']), "IE") + '";' 257 result = 'bookmarklet="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet.js']), "regular") + '";bookmarklet_ie="' + self.packBookmarklet(self.loadFilesContent('js', ['Bookmarklet_IE.js']), "IE") + '";'
301 self.processedFiles[cacheKey] = result 258 self.processedFiles[cacheKey] = result
302 else: 259 else:
303 result = self.processedFiles[cacheKey] 260 result = self.processedFiles[cacheKey]
304 261
305 return result 262 return result
306 263
307 264
308 def replaceTemplatePlaceholders (self, pageTitle, copyright, css, code, jsLoadMode, version, versionType): 265 def replaceTemplatePlaceholders (self, pageTitle, copyright, css, code, jsLoadMode, version, versionType):
309 result = self.template() 266 result = self.template()
310 267
311 result = result.replace('@page.title@', pageTitle) 268 result = result.replace('@page.title@', pageTitle)
312 result = result.replace('@copyright@', copyright) 269 result = result.replace('@copyright@', copyright)
313 result = result.replace('@css@', css) 270 result = result.replace('@css@', css)
314 #result = result.replace('@bookmarklet@', bookmarklet) 271 #result = result.replace('@bookmarklet@', bookmarklet)
315 result = result.replace('@application.version@', version) 272 result = result.replace('@application.version@', version)
316 result = result.replace('@application.version.type@',versionType) 273 result = result.replace('@application.version.type@',versionType)
317 result = result.replace('@js_' + jsLoadMode + '@', code) 274 result = result.replace('@js_' + jsLoadMode + '@', code)
318 275
319 result = re.sub('@js_[^@]+@', '', result) 276 result = re.sub('@js_[^@]+@', '', result)
320 277
321 return result 278 return result
322 279
323 280
324 def assembleCopyrightHeader (self): 281 def assembleCopyrightHeader (self):
325 processedFile = 'copyright' 282 processedFile = 'copyright'
326 if not self.processedFiles.has_key(processedFile): 283 if not self.processedFiles.has_key(processedFile):
@@ -359,62 +316,66 @@ class FrontendBuilder(object):
359 def assembleVersion (self, pageTitle, copyright, css, js, jsLoadMode, version, versionType): 316 def assembleVersion (self, pageTitle, copyright, css, js, jsLoadMode, version, versionType):
360 cacheKey = version + "-" + versionType 317 cacheKey = version + "-" + versionType
361 if not self.processedFiles.has_key(cacheKey): 318 if not self.processedFiles.has_key(cacheKey):
362 result = self.replaceTemplatePlaceholders(pageTitle, copyright, css, js, jsLoadMode, version, versionType) 319 result = self.replaceTemplatePlaceholders(pageTitle, copyright, css, js, jsLoadMode, version, versionType)
363 self.processedFiles[cacheKey] = result 320 self.processedFiles[cacheKey] = result
364 else: 321 else:
365 result = self.processedFiles[cacheKey] 322 result = self.processedFiles[cacheKey]
366 323
367 #self.log("# cacheKey:\n" + result) 324 #self.log("# cacheKey:\n" + result)
368 return result 325 return result
369 326
370 327
371 def assemble (self, assemblyMode='INSTALL', versionType='LIVE'): 328 def assemble (self, assemblyMode='INSTALL', versionType='LIVE'):
372 329
373 if versionType == 'LIVE': 330 if versionType == 'LIVE':
374 pageTitle = "Clipperz - " + self.module 331 pageTitle = "Clipperz - " + self.module
375 else: 332 else:
376 pageTitle = "Clipperz - " + self.module + " [" + versionType + " - " + assemblyMode +"]" 333 pageTitle = "Clipperz - " + self.module + " [" + versionType + " - " + assemblyMode +"]"
377 334
378 if assemblyMode == 'INSTALL': 335 if assemblyMode == 'INSTALL':
379 copyright = self.assembleCopyrightHeader() 336 copyright = self.assembleCopyrightHeader()
380 css =self.cssTagForContent(self.compressCSS(self.loadFilesContent('css', self.settings['css']))) 337 css =self.cssTagForContent(self.compressCSS(self.loadFilesContent('css', self.settings['css'])))
381 js =self.scriptTagForContent( 338 js =self.scriptTagForContent(
382 self.bookmarklet() + 339 self.bookmarklet() +
383 '\n' + 340 '\n' +
384 self.compressJS(self.loadFilesContent('js', self.settings['js']), "application") 341 self.compressJS(self.loadFilesContent('js', self.settings['js']), "application")
385 ) 342 )
386 jsLoadMode = 'EMBEDDED' 343 jsLoadMode = 'EMBEDDED'
387 344
388 elif assemblyMode == 'DEBUG': 345 elif assemblyMode == 'DEBUG':
389 copyright = self.assembleCopyrightHeader() 346 copyright = self.assembleCopyrightHeader()
390 css =self.cssTagsForFiles('./css', self.filterFiles(self.settings['css'])) 347 css =self.cssTagsForFiles('./css', self.filterFiles(self.settings['css']))
391 js =self.scriptTagForContent(self.bookmarklet()) + \ 348 js =self.scriptTagForContent(
392 '\n' + \ 349 self.bookmarklet()) + \
393 self.scriptTagsForFiles('./js', self.filterFiles(self.settings['js'])) 350 '\n' + \
351 self.scriptTagsForFiles('./js', self.filterFiles(self.settings['js'])
352 )
394 jsLoadMode = 'LINKED' 353 jsLoadMode = 'LINKED'
395 354
396 elif assemblyMode == 'DEVELOPMENT': 355 elif assemblyMode == 'DEVELOPMENT':
397 copyright = "" 356 copyright = ""
398 css =self.cssTagsForFiles('file://' + str(os.path.join(self.absolutePathForSources(), 'css')), self.filterFiles(self.settings['css'])) 357 css =self.cssTagsForFiles('file://' + str(os.path.join(self.absolutePathForSources(), 'css')), self.filterFiles(self.settings['css']))
399 js =self.scriptTagForContent(self.bookmarklet()) + \ 358 js =self.scriptTagForContent(
400 '\n' + \ 359 self.bookmarklet()) + \
401 self.scriptTagsForFiles('file://' + str(os.path.join(self.absolutePathForSources(), 'js')), self.filterFiles(self.settings['js'])) 360 '\n' + \
361 self.scriptTagsForFiles('file://' + str(os.path.join(self.absolutePathForSources(), 'js')), self.filterFiles(self.settings['js'])
362 )
402 jsLoadMode = 'LINKED' 363 jsLoadMode = 'LINKED'
403 versionType = 'development' 364 versionType = 'development'
404 365
405 else: 366 else:
406 raise NotImplementedError() 367 raise NotImplementedError()
407 368
408 return self.assembleVersion( 369 return self.assembleVersion(
409 pageTitle = pageTitle, 370 pageTitle = pageTitle,
410 copyright = copyright, 371 copyright = copyright,
411 css = css, 372 css = css,
412 js = js, 373 js = js,
413 jsLoadMode = jsLoadMode, 374 jsLoadMode = jsLoadMode,
414 version = self.repositoryVersion, 375 version = self.repositoryVersion,
415 versionType = versionType 376 versionType = versionType
416 ) 377 )
417 378
418 379
419 380
420 381
diff --git a/scripts/builder/frontends/betaBuilder.py b/scripts/builder/frontends/betaBuilder.py
index c5a3e76..9b32404 100644
--- a/scripts/builder/frontends/betaBuilder.py
+++ b/scripts/builder/frontends/betaBuilder.py
@@ -1,14 +1,17 @@
1from frontendBuilder import FrontendBuilder 1from frontendBuilder import FrontendBuilder
2import shutil 2import shutil
3 3
4class BetaBuilder(FrontendBuilder): 4class BetaBuilder(FrontendBuilder):
5 5
6 def name(self): 6 def name(self):
7 return "/beta builder" 7 return "/beta builder"
8 8
9 def projectResourceTypes (self):
10 return ['js', 'css', 'images']
11
9 def copyStaticResources (self, targetFolder): 12 def copyStaticResources (self, targetFolder):
10 for file in self.filterFiles(self.settings['staticResources']): 13 for file in self.filterFiles(self.settings['staticResources']):
11 src = self.absolutePathForSourceFile('staticResources', file) 14 src = self.absolutePathForSourceFile('staticResources', file)
12 dst = self.absolutePathForTargetFile(targetFolder, '', file) 15 dst = self.absolutePathForTargetFile(targetFolder, '', file)
13 shutil.copy2(src, dst) 16 shutil.copy2(src, dst)
14 17
diff --git a/scripts/builder/frontends/deltaBuilder.py b/scripts/builder/frontends/deltaBuilder.py
new file mode 100644
index 0000000..a341a83
--- a/dev/null
+++ b/scripts/builder/frontends/deltaBuilder.py
@@ -0,0 +1,16 @@
1from frontendBuilder import FrontendBuilder
2import shutil
3
4class DeltaBuilder(FrontendBuilder):
5
6 def name(self):
7 return "/delta builder"
8
9 def projectResourceTypes (self):
10 return ['js', 'css']
11
12 def copyStaticResources (self, targetFolder):
13 pass
14
15 def bookmarklet (self):
16 return "" \ No newline at end of file
diff --git a/scripts/builder/frontends/gammaBuilder.py b/scripts/builder/frontends/gammaBuilder.py
index a6ecb7b..c56fb1b 100644
--- a/scripts/builder/frontends/gammaBuilder.py
+++ b/scripts/builder/frontends/gammaBuilder.py
@@ -1,27 +1,30 @@
1from frontendBuilder import FrontendBuilder 1from frontendBuilder import FrontendBuilder
2import shutil 2import shutil
3 3
4class GammaBuilder(FrontendBuilder): 4class GammaBuilder(FrontendBuilder):
5 5
6 def name(self): 6 def name(self):
7 return "/gamma builder" 7 return "/gamma builder"
8 8
9 def projectResourceTypes (self):
10 return ['js', 'css', 'images']
11
9 def copyStaticResources (self, targetFolder): 12 def copyStaticResources (self, targetFolder):
10 resourcesToCopy = [ 13 resourcesToCopy = [
11 # {'folder': 'html', 'source': 'exit_template.html','target': 'exit.html'}, 14 # {'folder': 'html', 'source': 'exit_template.html','target': 'exit.html'},
12 {'folder': 'html', 'source': 'exit_template.html','target': 'logout.html'}, 15 {'folder': 'html', 'source': 'exit_template.html','target': 'logout.html'},
13 {'folder': 'css', 'source': 'static.css', 'target': 'static.css'} 16 {'folder': 'css', 'source': 'static.css', 'target': 'static.css'}
14 ] 17 ]
15 18
16 for resource in resourcesToCopy: 19 for resource in resourcesToCopy:
17 src = self.absolutePathForSourceFile(resource['folder'], resource['source']) 20 src = self.absolutePathForSourceFile(resource['folder'], resource['source'])
18 dst = self.absolutePathForTargetFile(targetFolder, '', resource['target']) 21 dst = self.absolutePathForTargetFile(targetFolder, '', resource['target'])
19 shutil.copy2(src, dst) 22 shutil.copy2(src, dst)
20 23
21 # src = self.absolutePathForSourceFile('html', 'exit_template.html') 24 # src = self.absolutePathForSourceFile('html', 'exit_template.html')
22 # dst = self.absolutePathForTargetFile(targetFolder, '', 'exit.html') 25 # dst = self.absolutePathForTargetFile(targetFolder, '', 'exit.html')
23 # shutil.copy2(src, dst) 26 # shutil.copy2(src, dst)
24 27
25 # src = self.absolutePathForSourceFile('css', 'static.css') 28 # src = self.absolutePathForSourceFile('css', 'static.css')
26 # dst = self.absolutePathForTargetFile(targetFolder, '', 'static.css') 29 # dst = self.absolutePathForTargetFile(targetFolder, '', 'static.css')
27 # shutil.copy2(src, dst) 30 # shutil.copy2(src, dst)
diff --git a/scripts/builder/frontends/gamma_mobileBuilder.py b/scripts/builder/frontends/gamma_mobileBuilder.py
index f2e80c9..677a2b0 100644
--- a/scripts/builder/frontends/gamma_mobileBuilder.py
+++ b/scripts/builder/frontends/gamma_mobileBuilder.py
@@ -1,9 +1,12 @@
1from frontendBuilder import FrontendBuilder 1from frontendBuilder import FrontendBuilder
2 2
3class Gamma_MobileBuilder(FrontendBuilder): 3class Gamma_MobileBuilder(FrontendBuilder):
4 4
5 def name(self): 5 def name(self):
6 return "/gamma.mobile builder" 6 return "/gamma.mobile builder"
7 7
8 def projectResourceTypes (self):
9 return ['js', 'css', 'images']
10
8 def copyStaticResources (self, targetFolder): 11 def copyStaticResources (self, targetFolder):
9 pass 12 pass
diff --git a/scripts/proxy/main.py b/scripts/proxy/main.py
index 107ba16..8ce4989 100755
--- a/scripts/proxy/main.py
+++ b/scripts/proxy/main.py
@@ -1,95 +1,102 @@
1from twisted.internet import reactor 1from twisted.internet import reactor
2from twisted.web import proxy, server, http, resource, static 2from twisted.web import proxy, server, http, resource, static
3from posixpath import basename, dirname 3from posixpath import basename, dirname
4 4
5import copy 5import copy
6import sys 6import sys
7import os 7import os
8import pprint 8import pprint
9 9
10#-------------------------------------------------------------------- 10#--------------------------------------------------------------------
11 11
12def scriptDir (): 12def scriptDir ():
13 return os.path.dirname(sys.argv[0]) 13 return os.path.dirname(sys.argv[0])
14 14
15def projectBaseDir (): 15def projectBaseDir ():
16 return os.path.abspath(scriptDir() + '/../..') 16 return os.path.abspath(scriptDir() + '/../..')
17 17
18def projectTargetDir(): 18def projectTargetDir():
19 return projectBaseDir() + '/target/' 19 return projectBaseDir() + '/target/'
20 20
21#-------------------------------------------------------------------- 21#--------------------------------------------------------------------
22 22
23class ClipperzTestSite(server.Site): 23class ClipperzTestSite(server.Site):
24 24
25 def __init__(self, resource, logPath=None, timeout=60 * 60 * 12): 25 def __init__(self, resource, logPath=None, timeout=60 * 60 * 12):
26 server.Site.__init__(self, resource, logPath, timeout) 26 server.Site.__init__(self, resource, logPath, timeout)
27 27
28 28
29 def getResourceFor(self, request): 29 def getResourceFor(self, request):
30 if request.uri.startswith('/json') or request.uri.startswith('/dump'): 30 uri = request.uri
31 uri = uri.split("?", 1)[0]
32 uri = uri.split("#", 1)[0]
33 if uri.startswith('/json') or uri.startswith('/dump'):
31 request.site = self 34 request.site = self
32 request.sitepath = copy.copy(request.prepath) 35 request.sitepath = copy.copy(request.prepath)
33 result = resource.getChildForRequest(self.resource, request) 36 result = resource.getChildForRequest(self.resource, request)
34 37
35 else: 38 else:
36 pathParts = request.uri.split('/') 39 pathParts = uri.split('/')
37 version = pathParts[1] 40 version = pathParts[1]
38 41
39 if pathParts[2].startswith('index.'): 42 if pathParts[2].startswith('index.'):
40 contentType = 'text/html' 43 contentType = 'text/html'
41 absoluteFilePath = os.path.join(projectTargetDir(), 'dev', version, pathParts[2]) 44 absoluteFilePath = os.path.join(projectTargetDir(), 'dev', version, pathParts[2])
42 result = static.File(absoluteFilePath, contentType) 45 result = static.File(absoluteFilePath, contentType)
43 46 elif pathParts[2].endswith('.webapp'):
47 contentType = 'application/x-web-app-manifest+json'
48 # absoluteFilePath = os.path.join(projectTargetDir(), 'dev', version, pathParts[2])
49 absoluteFilePath = os.path.join(projectBaseDir(), 'frontend', version, 'properties', pathParts[2])
50 result = static.File(absoluteFilePath, contentType)
44 else: 51 else:
45 #http://homer.local:8888/beta/css/clipperz/images/loginInfoBackground.png 52 #http://homer.local:8888/beta/css/clipperz/images/loginInfoBackground.png
46 #pathParts: ['', 'beta', 'css', 'clipperz', 'images', 'loginInfoBackground.png'] 53 #pathParts: ['', 'beta', 'css', 'clipperz', 'images', 'loginInfoBackground.png']
47 try: 54 try:
48 imagePathIndex = pathParts.index('images') 55 imagePathIndex = pathParts.index('images')
49 resourceType = 'images' 56 resourceType = 'images'
50 for _ in range(2, imagePathIndex): 57 for _ in range(2, imagePathIndex):
51 del pathParts[2] 58 del pathParts[2]
52 except: 59 except:
53 resourceType = pathParts[2] 60 resourceType = pathParts[2]
54 61
55 basePath = projectBaseDir() + '/frontend' 62 basePath = projectBaseDir() + '/frontend'
56 if resourceType == 'images': 63 if resourceType == 'images':
57 fileExtension = os.path.splitext(request.uri)[1] 64 fileExtension = os.path.splitext(uri)[1]
58 if fileExtension == '.png': 65 if fileExtension == '.png':
59 contentType = 'image/png' 66 contentType = 'image/png'
60 elif fileExtension == '.jpg': 67 elif fileExtension == '.jpg':
61 contentType = 'image/jpeg' 68 contentType = 'image/jpeg'
62 elif fileExtension == '.gif': 69 elif fileExtension == '.gif':
63 contentType = 'image/gif' 70 contentType = 'image/gif'
64 else: 71 else:
65 print "ERROR - unknown image extension: " + fileExtension 72 print "ERROR - unknown image extension: " + fileExtension
66 73
67 absoluteFilePath = basePath + '/'.join(pathParts) 74 absoluteFilePath = basePath + '/'.join(pathParts)
68 else: 75 else:
69 resourceType = pathParts[2] 76 resourceType = pathParts[2]
70 77
71 if resourceType == 'css': 78 if resourceType == 'css':
72 contentType = 'text/css' 79 contentType = 'text/css'
73 elif resourceType == 'js': 80 elif resourceType == 'js':
74 contentType = 'text/javascript' 81 contentType = 'text/javascript'
75 else: 82 else:
76 contentType = 'text/html' 83 contentType = 'text/html'
77 84
78 absoluteFilePath = basePath + request.uri 85 absoluteFilePath = basePath + uri
79 86
80 result = static.File(absoluteFilePath, contentType) 87 result = static.File(absoluteFilePath, contentType)
81 88
82 89
83 return result 90 return result
84 91
85 92
86 93
87def main (): 94def main ():
88 site = ClipperzTestSite(proxy.ReverseProxyResource('localhost', 8084, '/java-backend')) 95 site = ClipperzTestSite(proxy.ReverseProxyResource('localhost', 8080, '/java-backend'))
89 reactor.listenTCP(8888, site) 96 reactor.listenTCP(8888, site)
90 reactor.run() 97 reactor.run()
91 98
92 99
93if __name__ == "__main__": 100if __name__ == "__main__":
94 main() 101 main()
95 102