-rw-r--r-- | scripts/builder/backendBuilder.py | 37 | ||||
-rw-r--r-- | scripts/builder/backends/devBuilder.py | 56 | ||||
-rw-r--r-- | scripts/builder/frontendBuilder.py | 58 | ||||
-rw-r--r-- | scripts/builder/frontends/betaBuilder.py | 14 | ||||
-rw-r--r-- | scripts/builder/frontends/gammaBuilder.py | 26 | ||||
-rw-r--r-- | scripts/builder/frontends/gamma_mobileBuilder.py | 9 | ||||
-rwxr-xr-x | scripts/builder/main.py | 26 |
7 files changed, 189 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 @@ -8,9 +8,8 @@ import hashlib import main #=================================================================== - class BackendBuilder(object): def __init__ (self, projectTargetDir, frontends, versions, settings): self.projectTargetDir = projectTargetDir @@ -49,12 +48,14 @@ class BackendBuilder(object): 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): @@ -102,30 +103,32 @@ class BackendBuilder(object): 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 @@ -10,8 +10,10 @@ import StringIO import urllib import main +#=============================================================================== + class FrontendBuilder(object): def __init__ (self, frontend, settings, repositoryVersion): if '.' in frontend: @@ -26,12 +28,25 @@ class FrontendBuilder(object): 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) @@ -57,18 +72,32 @@ class FrontendBuilder(object): 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 = "" @@ -278,15 +307,15 @@ class FrontendBuilder(object): 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 @@ -370,8 +399,9 @@ class FrontendBuilder(object): 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() 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 @@ -9,9 +9,9 @@ import pprint import codecs import itertools from collections import deque -import frontendBuilder +#import frontendBuilder import repository pp = pprint.PrettyPrinter(indent=4, depth=4) @@ -74,9 +74,9 @@ 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) @@ -87,12 +87,24 @@ def assembleBackend (backend, frontends, versions): 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']) @@ -113,17 +125,18 @@ def usage (message): # 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'] @@ -133,8 +146,9 @@ 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)) @@ -173,5 +187,5 @@ def main (): usage("Suggestions on how to call the 'build' script:") if __name__ == "__main__": - main() + main() |