Skip to content

Commit

Permalink
break Builder in scripts/build.py into two classes; update tests acco…
Browse files Browse the repository at this point in the history
…rdingly
  • Loading branch information
zoghbi-a committed Jan 2, 2025
1 parent ae5f911 commit bd37997
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 24 deletions.
40 changes: 27 additions & 13 deletions scripts/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,30 +13,21 @@
#'heasoft'
)

class Builder:
"""Class for managing the docker build commands
class TaskRunner:
"""Class for managing logging and system calls"""

It mainly manages the system calls and logging and keeping track
of globals like dryrun etc.
"""
def __init__(self, repository, logger, registry='ghcr.io', dryrun=False):
"""Create a new Builder
def __init__(self, logger, dryrun=False):
"""Create a new TaskRunner
Parameters:
-----------
repository: str
Repository name. e.g. nasa-fornax/fornax-images
logger: logging.Logger
Logging object
registry: str
Name of the docker registry. Default: ghcr.io
dryrun: bool
If True, print the commands without running them
"""
self.repository = repository
self.logger = logger
self.registry = registry
self.dryrun = dryrun

def out(self, msg, severity=logging.INFO):
Expand Down Expand Up @@ -81,6 +72,29 @@ def run(self, command, timeout, **runargs):
)
return result


class Builder(TaskRunner):
"""Class for managing the docker build commands"""

def __init__(self, repository, logger, registry='ghcr.io', dryrun=False):
"""Create a new Builder
Parameters:
-----------
repository: str
Repository name. e.g. nasa-fornax/fornax-images
logger: logging.Logger
Logging object
registry: str
Name of the docker registry. Default: ghcr.io
dryrun: bool
If True, print the commands without running them
"""
super().__init__(logger, dryrun)
self.repository = repository
self.registry = registry

def check_tag(self, tag):
"""Check the tag"""
if not isinstance(tag, str) or ':' in tag:
Expand Down
29 changes: 18 additions & 11 deletions tests/test_build_code.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,14 @@


sys.path.insert(0, f'{os.path.dirname(__file__)}/../scripts/')
from build import Builder
from build import TaskRunner, Builder


class TestBuilder(unittest.TestCase):
class TestTaskRunner(unittest.TestCase):

def setUp(self):
logger = logging.getLogger()
self.repo = 'some-repo'
self.registry = 'my-registry'
self.tag = 'some-tag'
self.image = 'some-image'

self.builder_run = Builder(self.repo, logger, registry=self.registry, dryrun=False)
self.builder_dry = Builder(self.repo, logger, registry=self.registry, dryrun=True)
self.builder_run = TaskRunner(logger, dryrun=False)
self.builder_dry = TaskRunner(logger, dryrun=True)
self.logger = logger

def test_run(self):
Expand All @@ -40,13 +34,26 @@ def test_out(self):
self.assertEqual(msg, output.split(':')[-1].strip())
self.logger.handlers.clear()


def test_dryrun(self):
out = self.builder_dry.run('ls', timeout=100, capture_output=True)
self.assertEqual(out, None)

out = self.builder_run.run('ls', timeout=100, capture_output=True)
self.assertNotEqual(out, None)


class TestBuilder(unittest.TestCase):

def setUp(self):
logger = logging.getLogger()
self.repo = 'some-repo'
self.registry = 'my-registry'
self.tag = 'some-tag'
self.image = 'some-image'

self.builder_run = Builder(self.repo, logger, registry=self.registry, dryrun=False)
self.builder_dry = Builder(self.repo, logger, registry=self.registry, dryrun=True)
self.logger = logger

def test_get_full_tag(self):
full_tag = self.builder_dry.get_full_tag(self.image, self.tag)
Expand Down

0 comments on commit bd37997

Please sign in to comment.