diff options
| -rw-r--r-- | cbc/__init__.py | 3 | ||||
| -rw-r--r-- | cbc/exceptions.py | 3 | ||||
| -rw-r--r-- | cbc/meta.py | 2 | ||||
| -rw-r--r-- | cbc/server.py | 31 | ||||
| -rw-r--r-- | cbcbuild.py | 41 | 
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 | 
