aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cbc/__init__.py3
-rw-r--r--cbc/exceptions.py3
-rw-r--r--cbc/meta.py2
-rw-r--r--cbc/server.py31
-rw-r--r--cbcbuild.py41
5 files changed, 49 insertions, 31 deletions
diff --git a/cbc/__init__.py b/cbc/__init__.py
index 4dbca99..150b0f4 100644
--- a/cbc/__init__.py
+++ b/cbc/__init__.py
@@ -1,3 +1,4 @@
from . import environment
from . import meta
-from . import server \ No newline at end of file
+from . import server
+from . import utils \ No newline at end of file
diff --git a/cbc/exceptions.py b/cbc/exceptions.py
index 7acf55f..dc6128f 100644
--- a/cbc/exceptions.py
+++ b/cbc/exceptions.py
@@ -2,4 +2,7 @@ class IncompleteEnv(Exception):
pass
class MetaDataError(Exception):
+ pass
+
+class CondaBuildError(Exception):
pass \ No newline at end of file
diff --git a/cbc/meta.py b/cbc/meta.py
index f7065c8..ed1baaa 100644
--- a/cbc/meta.py
+++ b/cbc/meta.py
@@ -5,7 +5,7 @@ And yeah, conda supports Jinja2, but ugh... No.
import os
import conda_build.metadata
import yaml
-from configparser import SafeConfigParser, ExtendedInterpolation, ConfigParser
+from configparser import SafeConfigParser, ExtendedInterpolation
from collections import OrderedDict
from .environment import Environment
from .exceptions import MetaDataError
diff --git a/cbc/server.py b/cbc/server.py
index 37355ed..1598302 100644
--- a/cbc/server.py
+++ b/cbc/server.py
@@ -1,3 +1,4 @@
+import argparse
import os
import http.server
import socketserver
@@ -24,17 +25,31 @@ class FileServer(object):
if run:
self.run()
- def run(self):
+ def run(self, forever=False):
os.chdir(self.root)
socketserver.TCPServer.allow_reuse_address = True
self.httpd = Server(('localhost', self.port), self.handler, True)
- #self.httpd.allow_reuse_address = True
- #self.httpd.server_bind()
- #self.httpd.server_activate()
print('{0} active on port {1} ({2})'.format(self.__class__.__name__, self.port, self.root))
-
- th = Thread(target=self.httpd.handle_request, args=(), daemon=True)
- th.start()
+ if not forever:
+ self.httpd.handle_request()
+ else:
+ self.httpd.serve_forever()
+ self.close()
def close(self):
- self.httpd.server_close() \ No newline at end of file
+ self.httpd.server_close()
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-r', '--root', default=os.path.abspath(os.curdir), help='Path to files')
+ parser.add_argument('-p', '--port', type=int, default=8888, help='TCP port')
+ parser.add_argument('-s', '--single', action='store_false')
+ args = parser.parse_args()
+
+ fileserver = FileServer(args.port, args.root)
+ fileserver.run(forever=args.single)
+
+
+
+
+ \ No newline at end of file
diff --git a/cbcbuild.py b/cbcbuild.py
index fbdf017..35453e5 100644
--- a/cbcbuild.py
+++ b/cbcbuild.py
@@ -6,43 +6,42 @@ import conda_build.metadata
import conda_build.build
import argparse
import time
-from subprocess import check_output, CalledProcessError
+from cbc.exceptions import CondaBuildError
parser = argparse.ArgumentParser()
parser.add_argument('cbcfile', action='store', nargs='*', help='Build configuration file')
-
-input_test = ['tests/data/astropy-helpers.ini', 'tests/data/astropy.ini']
-#input_test = ['tests/data/d2to1.ini']
-args = parser.parse_args(input_test)
+args = parser.parse_args()
os.environ['CBC_HOME'] = 'tests/data/build'
env = cbc.environment.Environment()
+# Convert cbcfile paths to absolute paths
+args.cbcfile = [ os.path.abspath(x) for x in args.cbcfile ]
+# Verify we have a file that exists
+for cbcfile in args.cbcfile:
+ if not os.path.exists(cbcfile):
+ print('{} does not exist.'.format(cbcfile))
+ exit(1)
+ elif not os.path.isfile(cbcfile):
+ print('{} is not a file.'.format(cbcfile))
+ exit(1)
+
+# Perform build(s)
for cbcfile in args.cbcfile:
- # Ensure the working directory remains stable per build.
+ # Ensure the working directory remains the same throughout.
os.chdir(env.pwd)
metadata = cbc.meta.MetaData(cbcfile, env)
- metadata.env.mkpkgdir(metadata.local['package']['name'])
+ metadata.env.mkpkgdir(metadata.local['package']['name'])
metadata.render_scripts()
conda_metadata = conda_build.metadata.MetaData(env.pkgdir)
- if 'cbc_cgi' in metadata.local_metadata:
- if metadata.local_metadata['cbc_cgi']['local_server']:
- fileserver = cbc.server.FileServer(metadata.local_metadata['cbc_cgi']['local_port'],
- metadata.local_metadata['cbc_cgi']['local_sources'],
- run=True)
+ if cbc.utils.conda_search(conda_metadata.name()) == conda_metadata.dist():
+ print('{0} metadata matches an installed package; increment the build number to rebuild.'.format(conda_metadata.dist()))
+ continue
conda_build.build.build(conda_metadata, get_src=True, verbose=True)
-
- # Until I can figure out a good way to build with the conda API
- # we'll use the CLI:
- command = 'conda install --use-local --yes {0}'.format(conda_metadata.name()).split()
- try:
- for line in (check_output(command).decode('utf-8').splitlines()):
- print(line)
- except CalledProcessError as cpe:
- print('{0} exit={1}'.format(cpe.cmd, cpe.returncode))
+ cbc.utils.conda_install(conda_metadata.name())
\ No newline at end of file