Source code for spython.image.cmd
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
+
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
@@ -166,7 +165,7 @@ Source code for spython.image.cmd
# along with this program. If not, see <https://www.gnu.org/licenses/>.
-[docs]def generate_image_commands():
+[docs]def generate_image_commands():
''' The Image client holds the Singularity image command group, mainly
deprecated commands (image.import) and additional command helpers
that are commonly use but not provided by Singularity
diff --git a/docs/api/modules/spython/image/cmd/export.html b/docs/api/modules/spython/image/cmd/export.html
index a76d24c5..4826353d 100644
--- a/docs/api/modules/spython/image/cmd/export.html
+++ b/docs/api/modules/spython/image/cmd/export.html
@@ -151,8 +151,6 @@
Source code for spython.image.cmd.export
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/image/cmd/importcmd.html b/docs/api/modules/spython/image/cmd/importcmd.html
index 10f36b22..a471e055 100644
--- a/docs/api/modules/spython/image/cmd/importcmd.html
+++ b/docs/api/modules/spython/image/cmd/importcmd.html
@@ -151,8 +151,6 @@
Source code for spython.image.cmd.importcmd
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/image/cmd/utils.html b/docs/api/modules/spython/image/cmd/utils.html
index d4343615..eeb40b6c 100644
--- a/docs/api/modules/spython/image/cmd/utils.html
+++ b/docs/api/modules/spython/image/cmd/utils.html
@@ -151,8 +151,6 @@
Source code for spython.image.cmd.utils
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/instance.html b/docs/api/modules/spython/instance.html
index cdafc6e4..4edef08f 100644
--- a/docs/api/modules/spython/instance.html
+++ b/docs/api/modules/spython/instance.html
@@ -146,8 +146,7 @@
Source code for spython.instance
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
+
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
@@ -167,7 +166,7 @@ Source code for spython.instance
from spython.image import ImageBase
import os
-[docs]class Instance(ImageBase):
+[docs]class Instance(ImageBase):
def __init__(self, image, start=True, **kwargs):
'''An instance is an image running as an instance with services.
@@ -194,7 +193,7 @@ Source code for spython.instance
# Unique resource identifier
-[docs] def parse_image_name(self, image):
+[docs] def parse_image_name(self, image):
'''
simply split the uri from the image. Singularity handles
parsing of registry, namespace, image.
@@ -208,7 +207,7 @@ Source code for spython.instance
self.uri = 'instance://'
-[docs] def get_uri(self):
+[docs] def get_uri(self):
'''return the image uri (instance://) along with it's name
'''
return self.__str__()
diff --git a/docs/api/modules/spython/instance/cmd.html b/docs/api/modules/spython/instance/cmd.html
index df55e398..777b9941 100644
--- a/docs/api/modules/spython/instance/cmd.html
+++ b/docs/api/modules/spython/instance/cmd.html
@@ -148,8 +148,7 @@
Source code for spython.instance.cmd
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
+
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/instance/cmd/iutils.html b/docs/api/modules/spython/instance/cmd/iutils.html
index 78fff8b5..55e596b3 100644
--- a/docs/api/modules/spython/instance/cmd/iutils.html
+++ b/docs/api/modules/spython/instance/cmd/iutils.html
@@ -150,8 +150,7 @@
Source code for spython.instance.cmd.iutils
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
+
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/instance/cmd/start.html b/docs/api/modules/spython/instance/cmd/start.html
index 8f8dec32..d97bd0b3 100644
--- a/docs/api/modules/spython/instance/cmd/start.html
+++ b/docs/api/modules/spython/instance/cmd/start.html
@@ -150,8 +150,7 @@
Source code for spython.instance.cmd.start
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
+
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/instance/cmd/stop.html b/docs/api/modules/spython/instance/cmd/stop.html
index 59e1ce02..0e745a4d 100644
--- a/docs/api/modules/spython/instance/cmd/stop.html
+++ b/docs/api/modules/spython/instance/cmd/stop.html
@@ -150,8 +150,7 @@
Source code for spython.instance.cmd.stop
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
+
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/logger/message.html b/docs/api/modules/spython/logger/message.html
index 847e32ca..1d8cb16d 100644
--- a/docs/api/modules/spython/logger/message.html
+++ b/docs/api/modules/spython/logger/message.html
@@ -147,8 +147,6 @@
Source code for spython.logger.message
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2016-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/logger/spinner.html b/docs/api/modules/spython/logger/spinner.html
index a96feb26..e1f50f12 100644
--- a/docs/api/modules/spython/logger/spinner.html
+++ b/docs/api/modules/spython/logger/spinner.html
@@ -147,8 +147,6 @@
Source code for spython.logger.spinner
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/main.html b/docs/api/modules/spython/main.html
index ec86bb36..4cc178fc 100644
--- a/docs/api/modules/spython/main.html
+++ b/docs/api/modules/spython/main.html
@@ -147,8 +147,6 @@
Source code for spython.main
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/main/apps.html b/docs/api/modules/spython/main/apps.html
index 08f6bce4..48fbf665 100644
--- a/docs/api/modules/spython/main/apps.html
+++ b/docs/api/modules/spython/main/apps.html
@@ -149,8 +149,6 @@
Source code for spython.main.apps
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/main/base.html b/docs/api/modules/spython/main/base.html
index 4ac7976c..6c92c3b6 100644
--- a/docs/api/modules/spython/main/base.html
+++ b/docs/api/modules/spython/main/base.html
@@ -149,8 +149,6 @@
Source code for spython.main.base
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/main/base/command.html b/docs/api/modules/spython/main/base/command.html
index 248b5424..0bfca2c7 100644
--- a/docs/api/modules/spython/main/base/command.html
+++ b/docs/api/modules/spython/main/base/command.html
@@ -151,8 +151,6 @@
Source code for spython.main.base.command
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/main/base/flags.html b/docs/api/modules/spython/main/base/flags.html
index a776c3ba..1f81d92b 100644
--- a/docs/api/modules/spython/main/base/flags.html
+++ b/docs/api/modules/spython/main/base/flags.html
@@ -151,8 +151,6 @@
Source code for spython.main.base.flags
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/main/base/generate.html b/docs/api/modules/spython/main/base/generate.html
index 00cc397d..9ad98f2a 100644
--- a/docs/api/modules/spython/main/base/generate.html
+++ b/docs/api/modules/spython/main/base/generate.html
@@ -152,9 +152,6 @@
Source code for spython.main.base.generate
#!/usr/bin/env python
-
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
@@ -173,7 +170,7 @@ Source code for spython.main.base.generate
from random import choice
-[docs]class RobotNamer:
+[docs]class RobotNamer:
_descriptors = [
'chunky', 'buttery', 'delicious', 'scruptious', 'dinosaur', 'boopy',
@@ -208,7 +205,7 @@ Source code for spython.main.base.generate
]
-[docs] def generate(self, delim='-', length=4, chars='0123456789'):
+[docs] def generate(self, delim='-', length=4, chars='0123456789'):
'''
Generate a robot name. Inspiration from Haikunator, but much more
poorly implemented ;)
@@ -239,7 +236,7 @@ Source code for spython.main.base.generate
return choice(select_from)
-[docs]def main():
+
diff --git a/docs/api/modules/spython/main/base/logger.html b/docs/api/modules/spython/main/base/logger.html
index 9c60b114..df3c032c 100644
--- a/docs/api/modules/spython/main/base/logger.html
+++ b/docs/api/modules/spython/main/base/logger.html
@@ -150,8 +150,7 @@
Source code for spython.main.base.logger
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
+
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/main/base/sutils.html b/docs/api/modules/spython/main/base/sutils.html
index f8ee1855..f06d1e81 100644
--- a/docs/api/modules/spython/main/base/sutils.html
+++ b/docs/api/modules/spython/main/base/sutils.html
@@ -154,9 +154,6 @@ Source code for spython.main.base.sutils
# Singularity Image utils for interacting with the Image/Instance
# classes from the client
-
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/main/build.html b/docs/api/modules/spython/main/build.html
index b6ba4585..f6ccc569 100644
--- a/docs/api/modules/spython/main/build.html
+++ b/docs/api/modules/spython/main/build.html
@@ -149,8 +149,6 @@
Source code for spython.main.build
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/main/execute.html b/docs/api/modules/spython/main/execute.html
index b3e7569b..66128001 100644
--- a/docs/api/modules/spython/main/execute.html
+++ b/docs/api/modules/spython/main/execute.html
@@ -149,8 +149,6 @@
Source code for spython.main.execute
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/main/help.html b/docs/api/modules/spython/main/help.html
index c2faec21..d2f73ddc 100644
--- a/docs/api/modules/spython/main/help.html
+++ b/docs/api/modules/spython/main/help.html
@@ -149,8 +149,6 @@
Source code for spython.main.help
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/main/inspect.html b/docs/api/modules/spython/main/inspect.html
index 0b2f62e5..f7075070 100644
--- a/docs/api/modules/spython/main/inspect.html
+++ b/docs/api/modules/spython/main/inspect.html
@@ -149,8 +149,6 @@
Source code for spython.main.inspect
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/main/instances.html b/docs/api/modules/spython/main/instances.html
index 21b71881..a9181e97 100644
--- a/docs/api/modules/spython/main/instances.html
+++ b/docs/api/modules/spython/main/instances.html
@@ -149,8 +149,6 @@
Source code for spython.main.instances
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
@@ -170,7 +168,7 @@ Source code for spython.main.instances
from spython.logger import bot
from spython.utils import run_command, check_install
-[docs]def instances(self, name=None, return_json=False, quiet=False):
+[docs]def instances(self, name=None, return_json=False, quiet=False):
'''list instances. For Singularity, this is provided as a command sub
group.
@@ -246,7 +244,7 @@ Source code for spython.main.instances
return instances
-[docs]def stopall(self, sudo=False, quiet=True):
+[docs]def stopall(self, sudo=False, quiet=True):
'''stop ALL instances. This command is only added to the command group
as it doesn't make sense to call from a single instance
diff --git a/docs/api/modules/spython/main/parse/converters.html b/docs/api/modules/spython/main/parse/converters.html
index d7ede5e8..d806c619 100644
--- a/docs/api/modules/spython/main/parse/converters.html
+++ b/docs/api/modules/spython/main/parse/converters.html
@@ -148,8 +148,7 @@
Source code for spython.main.parse.converters
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
+
# Copyright (C) 2016-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/main/parse/docker.html b/docs/api/modules/spython/main/parse/docker.html
index 02a19467..c5599637 100644
--- a/docs/api/modules/spython/main/parse/docker.html
+++ b/docs/api/modules/spython/main/parse/docker.html
@@ -148,8 +148,7 @@
Source code for spython.main.parse.docker
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
+
# Copyright (C) 2016-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
@@ -293,19 +292,23 @@ Source code for spython.main.parse.docker
def _copy(self, lines):
- '''parse_add will copy multiple files from one location to another. This likely will need
- tweaking, as the files might need to be mounted from some location before adding to
- the image. The add command is done for an entire directory.
-
+ '''parse_add will copy multiple files from one location to another.
+ This likely will need tweaking, as the files might need to be
+ mounted from some location before adding to the image.
+ The add command is done for an entire directory. It is also
+ possible to have more than one file copied to a destination:
+ https://docs.docker.com/engine/reference/builder/#copy
+ e.g.: <src> <src> <dest>/
'''
lines = self._setup('COPY', lines)
for line in lines:
- frompath, topath = line.split(" ")
- self._add_files(frompath, topath)
+ values = line.split(" ")
+ frompath = values.pop(0)
+ for topath in values:
+ self._add_files(frompath, topath)
-
def _add(self, lines):
'''Add can also handle https, and compressed files.
@@ -317,24 +320,27 @@ Source code for spython.main.parse.docker
lines = self._setup('ADD', lines)
for line in lines:
- frompath, topath = line.split(" ")
+ values = line.split(" ")
+ frompath = values.pop(0)
# Custom parsing for frompath
# If it's a web address, add to install routine to get
if frompath.startswith('http'):
- self._parse_http(frompath, topath)
+ for topath in values:
+ self._parse_http(frompath, topath)
# Add the file, and decompress in install
elif re.search("[.](gz|gzip|bz2|xz)$", frompath.strip()):
- self._parse_archive(frompath, topath)
+ for topath in values:
+ self._parse_archive(frompath, topath)
# Just add the files
else:
- self._add_files(frompath, topath)
+ for topath in values:
+ self._add_files(frompath, topath)
-
# File Handling
def _add_files(self, source, dest):
diff --git a/docs/api/modules/spython/main/parse/environment.html b/docs/api/modules/spython/main/parse/environment.html
index d7344f77..4c67923c 100644
--- a/docs/api/modules/spython/main/parse/environment.html
+++ b/docs/api/modules/spython/main/parse/environment.html
@@ -148,8 +148,7 @@
Source code for spython.main.parse.environment
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
+
# Copyright (C) 2016-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
@@ -194,10 +193,16 @@ Source code for spython.main.parse.environment
current = pieces.pop(0)
- # Case 1: ['A=', '"1 2"'] --> A=1 2
-
if current.endswith('='):
- next = pieces.pop(0)
+
+ # Case 1: ['A='] --> A=
+
+ next = ""
+
+ # Case 2: ['A=', '"1 2"'] --> A=1 2
+
+ if len(pieces) > 0:
+ next = pieces.pop(0)
exports.append("%s%s" %(current, next))
# Case 2: ['A=B'] --> A=B
diff --git a/docs/api/modules/spython/main/parse/recipe.html b/docs/api/modules/spython/main/parse/recipe.html
index 3123897c..ceaea74f 100644
--- a/docs/api/modules/spython/main/parse/recipe.html
+++ b/docs/api/modules/spython/main/parse/recipe.html
@@ -148,8 +148,7 @@
Source code for spython.main.parse.recipe
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
+
# Copyright (C) 2016-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
@@ -196,10 +195,21 @@ Source code for spython.main.parse.recipe
'''
def __init__(self, recipe=None):
+ self.load(recipe)
+
+[docs] def load(self, recipe):
+ '''load a recipe file into the client, first performing checks, and
+ then parsing the file.
+
+ Parameters
+ ==========
+ recipe: the original recipe file, parsed by the subclass either
+ DockerRecipe or SingularityRecipe
+
+ '''
self.recipe = recipe # the recipe file
self._run_checks() # does the recipe file exist?
- self.parse()
-
+ self.parse()
def __str__(self):
''' show the user the recipe object, along with the type. E.g.,
diff --git a/docs/api/modules/spython/main/parse/singularity.html b/docs/api/modules/spython/main/parse/singularity.html
index 49adbae8..7c67f286 100644
--- a/docs/api/modules/spython/main/parse/singularity.html
+++ b/docs/api/modules/spython/main/parse/singularity.html
@@ -148,8 +148,7 @@
Source code for spython.main.parse.singularity
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
+
# Copyright (C) 2016-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/main/pull.html b/docs/api/modules/spython/main/pull.html
index 7aedbd64..d605001f 100644
--- a/docs/api/modules/spython/main/pull.html
+++ b/docs/api/modules/spython/main/pull.html
@@ -149,8 +149,6 @@
Source code for spython.main.pull
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/main/run.html b/docs/api/modules/spython/main/run.html
index 756f5c67..7218554e 100644
--- a/docs/api/modules/spython/main/run.html
+++ b/docs/api/modules/spython/main/run.html
@@ -149,8 +149,6 @@
Source code for spython.main.run
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# Copyright (C) 2017-2018 Vanessa Sochat.
# This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/tests/test_client.html b/docs/api/modules/spython/tests/test_client.html
index 193cc51e..75d5366f 100644
--- a/docs/api/modules/spython/tests/test_client.html
+++ b/docs/api/modules/spython/tests/test_client.html
@@ -149,8 +149,6 @@ Source code for spython.tests.test_client
#!/usr/bin/python
# Copyright (C) 2017-2018 Vanessa Sochat.
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by
diff --git a/docs/api/modules/spython/tests/test_instances.html b/docs/api/modules/spython/tests/test_instances.html
index bdcf6c13..21caf8f8 100644
--- a/docs/api/modules/spython/tests/test_instances.html
+++ b/docs/api/modules/spython/tests/test_instances.html
@@ -149,8 +149,6 @@ Source code for spython.tests.test_instances
#!/usr/bin/python
# Copyright (C) 2017-2018 Vanessa Sochat.
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by
diff --git a/docs/api/modules/spython/tests/test_utils.html b/docs/api/modules/spython/tests/test_utils.html
index 966283a7..3095787b 100644
--- a/docs/api/modules/spython/tests/test_utils.html
+++ b/docs/api/modules/spython/tests/test_utils.html
@@ -149,8 +149,6 @@ Source code for spython.tests.test_utils
#!/usr/bin/python
# Copyright (C) 2017-2018 Vanessa Sochat.
-# Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-# University.
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by
diff --git a/docs/api/modules/spython/utils/fileio.html b/docs/api/modules/spython/utils/fileio.html
index 4fad800e..f6608a0b 100644
--- a/docs/api/modules/spython/utils/fileio.html
+++ b/docs/api/modules/spython/utils/fileio.html
@@ -148,8 +148,6 @@
Source code for spython.utils.fileio
'''
-Copyright (C) 2017 The Board of Trustees of the Leland Stanford Junior
-University.
Copyright (C) 2016-2017 Vanessa Sochat.
This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/modules/spython/utils/terminal.html b/docs/api/modules/spython/utils/terminal.html
index 2d848ee9..00d5a7eb 100644
--- a/docs/api/modules/spython/utils/terminal.html
+++ b/docs/api/modules/spython/utils/terminal.html
@@ -148,8 +148,6 @@
Source code for spython.utils.terminal
'''
-Copyright (C) 2017 The Board of Trustees of the Leland Stanford Junior
-University.
Copyright (C) 2016-2017 Vanessa Sochat.
This program is free software: you can redistribute it and/or modify it
diff --git a/docs/api/objects.inv b/docs/api/objects.inv
index 60303478..9eb41d04 100644
Binary files a/docs/api/objects.inv and b/docs/api/objects.inv differ
diff --git a/docs/api/searchindex.js b/docs/api/searchindex.js
index 18c861aa..e8461244 100644
--- a/docs/api/searchindex.js
+++ b/docs/api/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["changelog","index","source/modules","source/spython","source/spython.client","source/spython.image","source/spython.image.cmd","source/spython.instance","source/spython.instance.cmd","source/spython.logger","source/spython.main","source/spython.main.base","source/spython.main.parse","source/spython.tests","source/spython.utils"],envversion:53,filenames:["changelog.md","index.rst","source/modules.rst","source/spython.rst","source/spython.client.rst","source/spython.image.rst","source/spython.image.cmd.rst","source/spython.instance.rst","source/spython.instance.cmd.rst","source/spython.logger.rst","source/spython.main.rst","source/spython.main.base.rst","source/spython.main.parse.rst","source/spython.tests.rst","source/spython.utils.rst"],objects:{"":{spython:[3,0,0,"-"]},"spython.client":{get_parser:[4,1,1,""],get_subparsers:[4,1,1,""],main:[4,1,1,""],recipe:[4,0,0,"-"],set_verbosity:[4,1,1,""],shell:[4,0,0,"-"],test:[4,0,0,"-"],version:[4,1,1,""]},"spython.client.recipe":{main:[4,1,1,""]},"spython.client.shell":{bpython:[4,1,1,""],ipython:[4,1,1,""],main:[4,1,1,""],python:[4,1,1,""]},"spython.client.test":{main:[4,1,1,""]},"spython.image":{Image:[5,2,1,""],ImageBase:[5,2,1,""],cmd:[6,0,0,"-"]},"spython.image.Image":{get_hash:[5,3,1,""]},"spython.image.ImageBase":{get_uri:[5,3,1,""],parse_image_name:[5,3,1,""],remove_uri:[5,3,1,""]},"spython.image.cmd":{"export":[6,0,0,"-"],generate_image_commands:[6,1,1,""],importcmd:[6,0,0,"-"],utils:[6,0,0,"-"]},"spython.image.cmd.export":{"export":[6,1,1,""]},"spython.image.cmd.importcmd":{importcmd:[6,1,1,""]},"spython.image.cmd.utils":{compress:[6,1,1,""],decompress:[6,1,1,""]},"spython.instance":{Instance:[7,2,1,""],cmd:[8,0,0,"-"]},"spython.instance.Instance":{get_uri:[7,3,1,""],parse_image_name:[7,3,1,""]},"spython.instance.cmd":{generate_instance_commands:[8,1,1,""],iutils:[8,0,0,"-"],start:[8,0,0,"-"],stop:[8,0,0,"-"]},"spython.instance.cmd.iutils":{get:[8,1,1,""],parse_table:[8,1,1,""]},"spython.instance.cmd.start":{start:[8,1,1,""]},"spython.instance.cmd.stop":{stop:[8,1,1,""]},"spython.logger":{message:[9,0,0,"-"],progress:[9,0,0,"-"],spinner:[9,0,0,"-"]},"spython.logger.message":{SingularityMessage:[9,2,1,""],convert2boolean:[9,1,1,""],get_logging_level:[9,1,1,""],get_user_color_preference:[9,1,1,""]},"spython.logger.message.SingularityMessage":{abort:[9,3,1,""],addColor:[9,3,1,""],critical:[9,3,1,""],custom:[9,3,1,""],debug:[9,3,1,""],emit:[9,3,1,""],emitError:[9,3,1,""],emitOutput:[9,3,1,""],error:[9,3,1,""],exit:[9,3,1,""],get_logs:[9,3,1,""],info:[9,3,1,""],isEnabledFor:[9,3,1,""],is_quiet:[9,3,1,""],log:[9,3,1,""],newline:[9,3,1,""],show_progress:[9,3,1,""],spinner:[9,4,1,""],table:[9,3,1,""],useColor:[9,3,1,""],verbose1:[9,3,1,""],verbose2:[9,3,1,""],verbose3:[9,3,1,""],verbose:[9,3,1,""],warning:[9,3,1,""],write:[9,3,1,""]},"spython.logger.progress":{ProgressBar:[9,2,1,""],bar:[9,1,1,""]},"spython.logger.progress.ProgressBar":{done:[9,3,1,""],format_time:[9,3,1,""],show:[9,3,1,""]},"spython.logger.spinner":{Spinner:[9,2,1,""]},"spython.logger.spinner.Spinner":{balloons_cursor:[9,5,1,""],changing_arrows:[9,5,1,""],delay:[9,4,1,""],run:[9,3,1,""],select_generator:[9,3,1,""],spinning:[9,4,1,""],spinning_cursor:[9,5,1,""],start:[9,3,1,""],stop:[9,3,1,""]},"spython.main":{apps:[10,0,0,"-"],base:[11,0,0,"-"],build:[10,0,0,"-"],execute:[10,0,0,"-"],get_client:[10,1,1,""],help:[10,0,0,"-"],inspect:[10,0,0,"-"],instances:[10,0,0,"-"],parse:[12,0,0,"-"],pull:[10,0,0,"-"],run:[10,0,0,"-"]},"spython.main.apps":{apps:[10,1,1,""]},"spython.main.base":{Client:[11,2,1,""],command:[11,0,0,"-"],flags:[11,0,0,"-"],generate:[11,0,0,"-"],logger:[11,0,0,"-"],sutils:[11,0,0,"-"]},"spython.main.base.Client":{RobotNamer:[11,4,1,""],apps:[11,3,1,""],build:[11,3,1,""],debug:[11,4,1,""],execute:[11,3,1,""],help:[11,3,1,""],image:[11,4,1,""],inspect:[11,3,1,""],instance:[11,4,1,""],instance_stopall:[11,3,1,""],instances:[11,3,1,""],load:[11,3,1,""],pull:[11,3,1,""],quiet:[11,4,1,""],run:[11,3,1,""],setenv:[11,3,1,""],version:[11,3,1,""]},"spython.main.base.command":{generate_bind_list:[11,1,1,""],init_command:[11,1,1,""],run_command:[11,1,1,""]},"spython.main.base.flags":{parse_verbosity:[11,1,1,""]},"spython.main.base.generate":{RobotNamer:[11,2,1,""],main:[11,1,1,""]},"spython.main.base.generate.RobotNamer":{generate:[11,3,1,""]},"spython.main.base.logger":{init_level:[11,1,1,""],println:[11,1,1,""]},"spython.main.base.sutils":{get_filename:[11,1,1,""],get_uri:[11,1,1,""],load:[11,1,1,""],setenv:[11,1,1,""]},"spython.main.build":{build:[10,1,1,""]},"spython.main.execute":{execute:[10,1,1,""]},"spython.main.help":{help:[10,1,1,""]},"spython.main.inspect":{inspect:[10,1,1,""]},"spython.main.instances":{instances:[10,1,1,""],stopall:[10,1,1,""]},"spython.main.parse":{converters:[12,0,0,"-"],docker:[12,0,0,"-"],environment:[12,0,0,"-"],recipe:[12,0,0,"-"],singularity:[12,0,0,"-"]},"spython.main.parse.converters":{create_env_section:[12,1,1,""],create_keyval_section:[12,1,1,""],create_runscript:[12,1,1,""],create_section:[12,1,1,""],docker2singularity:[12,1,1,""],finish_section:[12,1,1,""],singularity2docker:[12,1,1,""],write_lines:[12,1,1,""]},"spython.main.parse.docker":{DockerRecipe:[12,2,1,""]},"spython.main.parse.environment":{parse_env:[12,1,1,""]},"spython.main.parse.recipe":{Recipe:[12,2,1,""]},"spython.main.parse.recipe.Recipe":{convert:[12,3,1,""],docker2singularity:[12,3,1,""],parse:[12,3,1,""],save:[12,3,1,""],singularity2docker:[12,3,1,""]},"spython.main.parse.singularity":{SingularityRecipe:[12,2,1,""]},"spython.main.parse.singularity.SingularityRecipe":{load_recipe:[12,3,1,""]},"spython.main.pull":{pull:[10,1,1,""]},"spython.main.run":{run:[10,1,1,""]},"spython.tests":{test_client:[13,0,0,"-"],test_instances:[13,0,0,"-"],test_utils:[13,0,0,"-"]},"spython.tests.test_client":{TestClient:[13,2,1,""]},"spython.tests.test_client.TestClient":{setUp:[13,3,1,""],tearDown:[13,3,1,""],test_commands:[13,3,1,""]},"spython.tests.test_instances":{TestInstances:[13,2,1,""]},"spython.tests.test_instances.TestInstances":{setUp:[13,3,1,""],tearDown:[13,3,1,""],test_instances:[13,3,1,""]},"spython.tests.test_utils":{TestUtils:[13,2,1,""]},"spython.tests.test_utils.TestUtils":{setUp:[13,3,1,""],tearDown:[13,3,1,""],test_check_install:[13,3,1,""],test_get_installdir:[13,3,1,""],test_remove_uri:[13,3,1,""],test_write_read_files:[13,3,1,""]},"spython.utils":{fileio:[14,0,0,"-"],terminal:[14,0,0,"-"]},"spython.utils.fileio":{mkdir_p:[14,1,1,""],read_file:[14,1,1,""],read_json:[14,1,1,""],write_file:[14,1,1,""],write_json:[14,1,1,""]},"spython.utils.terminal":{check_install:[14,1,1,""],format_container_name:[14,1,1,""],get_installdir:[14,1,1,""],remove_uri:[14,1,1,""],run_command:[14,1,1,""],stream_command:[14,1,1,""]},spython:{client:[4,0,0,"-"],image:[5,0,0,"-"],instance:[7,0,0,"-"],logger:[9,0,0,"-"],main:[10,0,0,"-"],tests:[13,0,0,"-"],utils:[14,0,0,"-"],version:[3,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"],"4":["py","attribute","Python attribute"],"5":["py","staticmethod","Python static method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method","4":"py:attribute","5":"py:staticmethod"},terms:{"95m":9,"boolean":[9,10,11],"byte":11,"case":[10,13],"char":11,"class":[5,7,9,11,12,13],"default":[0,8,9,10,11,12,14],"export":[0,3,5,12],"function":[0,4,6,9,10,11,12,13,14],"import":[0,6,10],"int":9,"new":14,"public":[3,12,14],"return":[5,7,8,9,10,11,12,13,14],"static":9,"true":[6,7,8,9,10,11,12,14],FOR:[3,12,14],For:[10,11,12],The:[0,1,3,6,8,10,11,12,14],These:6,Will:9,With:8,__init__:6,_pars:12,abil:0,abort:9,about:[10,11],access:[10,11],action:11,actual:[5,11],add:[12,14],addcolor:9,added:[6,9,10,11],adding:0,addit:[0,6,11],adjust:0,affero:[1,3,12,14],alia:11,all:[0,5,9,10,11,14],allow:[10,11],along:[3,7,12,14],also:[5,11],ani:[3,10,11,12,14],anoth:12,api:0,app:[2,3,11],appear:[5,11],append:[12,14],applic:14,appropri:12,arbitari:[10,11],arg:[4,9,10,11],argpars:11,argument:[0,10,11,12],around:4,asci:9,associ:[10,11],assum:[8,9,13],attempt:14,attribut:[0,12],automat:[10,11],avail:14,back:[12,14],backward:0,balloons_cursor:9,bar:[9,14],base:[3,4,5,7,9,10,12,13],bash:12,basic:0,befor:5,behaviour:0,being:9,best:12,between:12,bin:12,binari:[],bind:[0,8,10,11],bindlist:11,board:[3,12,14],both:[4,11],bpython:4,branch:0,bug:0,build:[0,2,3,11,12],build_fold:[10,11],builder:[10,11,12],built:[10,11],call:[8,9,10,11,12],can:[0,3,4,11,12,14],captur:[8,10,11,14],carriage_return:9,chang:0,changelog:1,changing_arrow:9,charact:[9,14],check:[9,11,13,14],check_instal:14,choos:12,cli:0,client:[0,1,2,3,6,8,10,11,12],close:[0,14],cmd:[3,5,7,11,12,14],code:[0,1,10,11],coincid:0,col_width:9,color:9,column:[8,9],com:[10,11,12],command:[0,3,6,8,10,12,13,14],commit:0,commonli:6,complet:[5,7,9,10,11],compress:6,config:12,configur:9,consol:[0,4,14],contain:[0,1,8,10,11,12,14],content:[1,2],context:[10,11],conveni:12,convers:[0,12],convert2boolean:9,convert:[0,3,4,10,11],convert_to:12,copi:[0,3,12,14],copyright:[3,12,14],correct:0,couldn:[10,11],count:9,creat:[3,5,8,9,10,11,12,14],create_entrypoint:12,create_env_sect:12,create_keyval_sect:12,create_runscript:12,create_sect:12,criteria:5,critic:[0,9],current:9,custom:[6,9,10,11,12],data:[10,11,12,14],debug:[6,8,9,10,11],decompress:6,defil:[10,11],defin:[4,6,10,11,12,14],delai:9,delim:11,delimit:11,deprec:[0,6],desir:12,destin:0,detail:[3,12,14],determin:[4,9,12,14],develop:1,dict:14,dictionari:[4,9,11],differ:[0,10,11],dimens:8,directori:[10,11,13,14],disabl:[10,11],discoveri:12,distribut:[3,12,14],doc:12,docker2singular:12,docker:[0,3,5,7,10,11,14],dockerfil:[0,12],dockerrecip:[4,12],document:0,doe:[11,12],doesn:[10,11,12],don:[8,10,11,14],done:[8,9,10,11],driver:[10,11],each:[0,8,14],easili:12,either:[3,4,11,12,14],emit:9,emiterror:9,emitoutput:9,empti:11,empty_char:9,enabl:9,encod:9,end:[12,14],engin:12,enhanc:0,entri:9,entrypoint:12,env:[0,12],environ:[3,4,6,8,9,10,11],environment:9,envlist:12,equal:12,error:[0,9,10,11],estim:12,etc:8,even:[3,12,14],eventu:0,everi:9,exampl:[11,12,14],except:14,exec:[0,11],execut:[0,2,3,11],exist:[5,11],exit:[9,11],expect:[8,10,11],expected_s:9,expos:[6,10,11],express:14,ext3:[10,11],ext:[10,11],extens:[10,11],fail:0,fals:[0,8,9,10,11,12,14],file:[0,4,5,6,10,11,12,14],fileio:[2,3],filenam:[11,14],filesystem:[10,11],filled_char:9,find:14,finish:12,finish_sect:12,first:[5,9,11,12],fit:[3,12,14],fix:0,flag:[0,3,10],flexibl:0,folder:[10,11],follow:11,forc:[10,11,12],form:12,format:[0,12,14],format_container_nam:14,format_tim:9,found:[5,10,11,12],foundat:[3,12,14],free:[3,12,14],from:[0,5,6,7,8,10,11,12,14],fromhead:[0,12],full:[6,10,11],full_path:[10,11],fun:[10,11],futur:12,ged:[10,11],gener:[0,3,9,10,12,14],generate_bind_list:11,generate_image_command:[6,11],generate_instance_command:8,get:[4,5,8,10,11,12,13,14],get_client:10,get_filenam:11,get_hash:5,get_installdir:14,get_log:9,get_logging_level:9,get_pars:4,get_subpars:4,get_uri:[5,7,11],get_user_color_prefer:9,github:[0,10,11],give:[4,5,8,10,11],given:[0,6,11],global:11,gnu:[3,12,14],gpl:1,group:[6,8,10,11],guidanc:0,haikun:11,handl:[0,5,7],hang:[0,8],has:[9,11,12],hash:[0,5],have:[3,12,14],header:[0,8,12],help:[2,3,4,11],helper:6,here:0,hide:9,highli:[10,11],histori:9,hold:[6,8],hope:[3,12,14],host:[10,11],how:0,http:[3,10,11,12,14],hub:[10,11],idea:12,ideal:8,ignor:12,imag:[0,1,2,3,4,7,8,10,11,14],image_path:[6,10,11],imagebas:[5,7],imagecli:11,implement:[0,11],impli:[3,12,14],import_typ:6,importcmd:[3,5],imprt:6,includ:[0,9,10,11,12],incompat:0,index:1,indic:8,info:9,inform:[9,10,11],init:10,init_command:11,init_level:11,initi:[10,11],input:6,input_sourc:6,inspect:[2,3,11],inspir:11,instal:[10,11,12,13,14],instanc:[0,1,2,3,11],instance_stopal:11,instead:[10,11],instruct:12,integ:8,integr:[10,11],intend:[5,12],interest:14,interpret:9,ipython:4,is_quiet:9,isenabledfor:9,isol:[10,11],issu:[0,10,11],item:0,iter:[9,10,11],iutil:[3,7],join:[9,12],join_newlin:9,json:[8,10,11,14],json_obj:14,jsonifi:8,junior:[3,12,14],just:[5,10,11],kei:[9,12],know:0,kwarg:7,label:[9,10,11,12],later:[1,3,12,14],leland:[3,12,14],length:[9,11],level:[0,4,5,6,8,9,11],libexecdir:[10,11],licens:[1,3,12,14],like:[0,8,12],line:[11,12,14],linux:[10,11],list:[8,9,10,11,12,14],load:[5,7,10,11,12],load_recip:12,local:11,locat:[10,11],log:[0,9,11],logger:[1,2,3,10],logic:12,look:[8,10,11],main:[1,2,3,4,6,8,9],mainli:6,make:[10,11,12],manual:[0,12],map:[10,11],master:1,match:8,md5:5,mean:[12,14],merchant:[3,12,14],merg:0,messag:[2,3,4,11],messagelevel:[6,8,9],metadata:12,methodnam:13,migrat:0,min_level:9,miss:0,mkdir:14,mkdir_p:14,mode:[10,14],modifi:[3,12,14],modul:[1,2],more:[3,10,11,12,14],most:[10,12],mount:[10,11],much:11,multipl:0,must:[6,8,9],name:[0,5,7,8,9,10,11,12,14],name_by_commit:[10,11],name_by_hash:[10,11],namespac:[5,7],need:[8,11,12,14],neither:12,newlin:[9,14],nicer:14,no_newline_regexp:14,none:[5,6,8,9,10,11,12,14],note:12,number:[8,9],nvidia:[0,10,11],object:[5,9,10,11,12,14],off:11,one:[0,10,11,12],onli:[0,5,9,10,11],open:14,opposit:12,option:[3,4,5,8,9,10,11,12,14],org:[3,12,14],origin:[0,12],other:14,otherwis:11,out:9,outfil:4,output:[4,8,10,11,12,14],output_fil:12,over:11,overrid:[10,11,12],overriden:11,packag:[0,1,2],pair:12,param:[9,14],paramet:[5,6,7,8,10,11,12,14],parent:[11,14],pars:[3,5,7,8,10,11,14],parse_env:12,parse_image_nam:[5,7],parse_t:8,parse_verbos:11,parser:[0,4],particular:[3,12,13,14],pass:[6,8,11],path:[0,5,6,8,10,11,14],perform:[10,11,12],pid:[8,10,11],pipe:14,poorli:11,prefer:[10,11],prefix:[9,12],pretti:14,pretty_print:14,print:[0,4,9,10,11,12,14],print_pretti:14,println:11,prioriti:5,process:11,progess:14,program:[3,12,14],progress:[2,3,14],progressbar:9,prompt:9,properli:[6,14],provid:[6,10,11,12,13],publish:[3,12,14],pull:[0,2,3,11],pull_fold:[10,11],purpos:[3,12,14],pwd:[10,11],pypi:0,python:[0,4],pythonbuff:12,quiet:[0,6,8,9,10,11,14],raw:[10,11,12],read:[10,11,12,14],read_fil:[13,14],read_json:14,readi:1,readlin:14,reason:[5,10,11],receiv:[3,12,14],recip:[0,2,3,10,11],recommend:[10,11],redistribut:[3,12,14],refer:12,regexp:[],registri:[5,7],regular:14,rel:[0,10,11],releas:0,remov:[0,5,8,12,14],remove_image_uri:5,remove_row:8,remove_uri:[5,14],renam:0,repositori:0,repres:0,request:0,requir:[10,11,12],respect:0,result:[11,12,14],return_cod:9,return_json:[8,10,11],ride:11,right:0,robot:[10,11],robot_nam:[10,11],robotnam:11,root:[10,11],row:[8,9],run:[0,2,3,8,9,11,14],run_command:[11,14],runscript:[10,11,12],runtest:13,runtim:[10,11],same:14,sandbox:[10,11],save:[4,5,12],sci:[10,11],scientif:[10,11],scif:[10,11],second:[5,9],section:[0,12],see:[3,10,11,12,14],select:[9,12],select_gener:9,self:[6,8,10,11,12],send:[10,11,14],sens:[10,11],sequenc:12,serv:[4,10,11],set:[4,9,10,11,12,14],set_verbos:4,setenv:11,setup:13,share:[10,11],shell:[0,2,3],should:[0,3,9,10,11,12,13,14],show:[9,10,11],show_progress:9,shub:14,simag:11,simg:[10,11],simpli:[5,7],singl:[8,10,11,12],singular:[0,3,5,6,7,8,10,11,13,14],singularity2dock:12,singularitymessag:9,singularityrecip:[4,12],singularitywar:[10,11],skip:14,sochat:[3,12,14],softwar:[3,10,11,12,13,14],some:12,sourc:[0,4,5,6,7,8,9,10,11,12,13,14],space:5,special:14,special_charact:14,specif:[10,11,12],specifi:[6,9,10,11,12],sphinx:0,spin:9,spinner:[2,3],spinning_cursor:9,split:[5,7],spython:[0,1],standard:[9,10,11],stanford:[3,12,14],start:[3,7,9,14],statement:0,stderr:9,stdin:6,stdout:[9,11,14],stop:[3,7,9,10,11],stopal:10,stream:[0,9,10,11,14],stream_command:14,string:[5,8,10,11],strip:0,structur:14,sub:[10,11],subclass:12,subcommand:6,submodul:[1,2,5,7],subpackag:[1,2],subpars:[4,12],subprocess:14,success:11,sudo:[6,8,10,11,14],suffix:9,suppli:14,support:[0,9],suppress:10,sutil:[3,10],symbol:9,system:[10,11],tabl:[8,9],table_str:8,take:[10,11,12,14],tar:6,teardown:13,tempfil:0,temporari:[6,12],term:[3,12,14],termin:[0,2,3,9],test:[0,2,3,10,11,12],test_check_instal:13,test_command:13,test_get_installdir:13,test_remove_uri:13,test_write_read_fil:13,testcas:13,testclient:13,testinst:13,testutil:13,text:[9,10,11,12],them:0,thi:[0,1,3,4,5,8,10,11,12,14],those:14,tmp:8,tmptar:6,tokenchar:11,tokenlength:11,top:8,total:9,track:0,truste:[3,12,14],tupl:8,turn:10,two:12,type:12,typo:0,ubuntu:[5,7,11],uid:[10,11],under:[1,3,6,9,12,14],unittest:13,univers:[3,12,14],uri:[0,5,7,8,10,11,14],url:0,usag:[8,14],use:[0,1,6,10,11,12,14],usecolor:9,used:[6,9,10,11,12,13],useful:[3,5,12,14],user:[4,8,9,10,11,12,14],uses:[11,14],using:[10,11],usual:9,utf:11,util:[1,2,3,5],valu:[10,11,12],vanessa:[3,12,14],variabl:[0,6,8,9,11,12],vault:0,verbos:[6,8,9],verbose1:9,verbose2:9,verbose3:9,version:[0,1,2,4,5,11,12,14],via:[6,8],volum:11,want:8,warn:9,warranti:[3,12,14],whatev:6,when:8,where:[8,10,11,13],whether:12,which:[9,10,11],width:9,within:[10,11],withour:[10,11],without:[3,12,14],won:14,work:[0,1],wrap:9,wrapper:[4,11],writabl:[10,11],write:[9,10,11,12,14],write_fil:[13,14],write_json:14,write_lin:12,www:[3,12,14],x1b:9,yes:11,yet:[1,11],yield:14,you:[3,10,11,12,14],your:[3,9,10,11,12,14]},titles:["CHANGELOG","Welcome to Singularity Python API\u2019s documentation!","spython","spython package","spython.client package","spython.image package","spython.image.cmd package","spython.instance package","spython.instance.cmd package","spython.logger package","spython.main package","spython.main.base package","spython.main.parse package","spython.tests package","spython.utils package"],titleterms:{"export":6,api:1,app:10,base:11,binari:[],build:10,changelog:0,client:4,cmd:[6,8],command:11,content:[3,4,5,6,7,8,9,10,11,12,13,14],convert:12,creat:6,docker:12,document:1,environ:12,execut:10,fileio:14,flag:11,gener:11,help:10,imag:[5,6],importcmd:6,indic:1,inspect:10,instanc:[7,8,10],iutil:8,logger:[9,11],main:[10,11,12],master:0,messag:9,modul:[3,4,5,6,7,8,9,10,11,12,13,14],packag:[3,4,5,6,7,8,9,10,11,12,13,14],pars:12,progress:9,pull:10,python:1,recip:[4,12],regexp:[],run:10,shell:4,singular:[1,12],spinner:9,spython:[2,3,4,5,6,7,8,9,10,11,12,13,14],start:8,stop:8,submodul:[3,4,6,8,9,10,11,12,13,14],subpackag:[3,5,7,10],sutil:11,tabl:1,termin:14,test:[4,13],test_client:13,test_inst:13,test_util:13,util:[6,14],version:3,welcom:1}})
\ No newline at end of file
+Search.setIndex({docnames:["changelog","index","source/modules","source/spython","source/spython.client","source/spython.image","source/spython.image.cmd","source/spython.instance","source/spython.instance.cmd","source/spython.logger","source/spython.main","source/spython.main.base","source/spython.main.parse","source/spython.tests","source/spython.utils"],envversion:53,filenames:["changelog.md","index.rst","source/modules.rst","source/spython.rst","source/spython.client.rst","source/spython.image.rst","source/spython.image.cmd.rst","source/spython.instance.rst","source/spython.instance.cmd.rst","source/spython.logger.rst","source/spython.main.rst","source/spython.main.base.rst","source/spython.main.parse.rst","source/spython.tests.rst","source/spython.utils.rst"],objects:{"":{spython:[3,0,0,"-"]},"spython.client":{get_parser:[4,1,1,""],get_subparsers:[4,1,1,""],main:[4,1,1,""],recipe:[4,0,0,"-"],set_verbosity:[4,1,1,""],shell:[4,0,0,"-"],test:[4,0,0,"-"],version:[4,1,1,""]},"spython.client.recipe":{main:[4,1,1,""]},"spython.client.shell":{bpython:[4,1,1,""],ipython:[4,1,1,""],main:[4,1,1,""],python:[4,1,1,""]},"spython.client.test":{main:[4,1,1,""]},"spython.image":{Image:[5,2,1,""],ImageBase:[5,2,1,""],cmd:[6,0,0,"-"]},"spython.image.Image":{get_hash:[5,3,1,""]},"spython.image.ImageBase":{get_uri:[5,3,1,""],parse_image_name:[5,3,1,""],remove_uri:[5,3,1,""]},"spython.image.cmd":{"export":[6,0,0,"-"],generate_image_commands:[6,1,1,""],importcmd:[6,0,0,"-"],utils:[6,0,0,"-"]},"spython.image.cmd.export":{"export":[6,1,1,""]},"spython.image.cmd.importcmd":{importcmd:[6,1,1,""]},"spython.image.cmd.utils":{compress:[6,1,1,""],decompress:[6,1,1,""]},"spython.instance":{Instance:[7,2,1,""],cmd:[8,0,0,"-"]},"spython.instance.Instance":{get_uri:[7,3,1,""],parse_image_name:[7,3,1,""]},"spython.instance.cmd":{generate_instance_commands:[8,1,1,""],iutils:[8,0,0,"-"],start:[8,0,0,"-"],stop:[8,0,0,"-"]},"spython.instance.cmd.iutils":{get:[8,1,1,""],parse_table:[8,1,1,""]},"spython.instance.cmd.start":{start:[8,1,1,""]},"spython.instance.cmd.stop":{stop:[8,1,1,""]},"spython.logger":{message:[9,0,0,"-"],progress:[9,0,0,"-"],spinner:[9,0,0,"-"]},"spython.logger.message":{SingularityMessage:[9,2,1,""],convert2boolean:[9,1,1,""],get_logging_level:[9,1,1,""],get_user_color_preference:[9,1,1,""]},"spython.logger.message.SingularityMessage":{abort:[9,3,1,""],addColor:[9,3,1,""],critical:[9,3,1,""],custom:[9,3,1,""],debug:[9,3,1,""],emit:[9,3,1,""],emitError:[9,3,1,""],emitOutput:[9,3,1,""],error:[9,3,1,""],exit:[9,3,1,""],get_logs:[9,3,1,""],info:[9,3,1,""],isEnabledFor:[9,3,1,""],is_quiet:[9,3,1,""],log:[9,3,1,""],newline:[9,3,1,""],show_progress:[9,3,1,""],spinner:[9,4,1,""],table:[9,3,1,""],useColor:[9,3,1,""],verbose1:[9,3,1,""],verbose2:[9,3,1,""],verbose3:[9,3,1,""],verbose:[9,3,1,""],warning:[9,3,1,""],write:[9,3,1,""]},"spython.logger.progress":{ProgressBar:[9,2,1,""],bar:[9,1,1,""]},"spython.logger.progress.ProgressBar":{done:[9,3,1,""],format_time:[9,3,1,""],show:[9,3,1,""]},"spython.logger.spinner":{Spinner:[9,2,1,""]},"spython.logger.spinner.Spinner":{balloons_cursor:[9,5,1,""],changing_arrows:[9,5,1,""],delay:[9,4,1,""],run:[9,3,1,""],select_generator:[9,3,1,""],spinning:[9,4,1,""],spinning_cursor:[9,5,1,""],start:[9,3,1,""],stop:[9,3,1,""]},"spython.main":{apps:[10,0,0,"-"],base:[11,0,0,"-"],build:[10,0,0,"-"],execute:[10,0,0,"-"],get_client:[10,1,1,""],help:[10,0,0,"-"],inspect:[10,0,0,"-"],instances:[10,0,0,"-"],parse:[12,0,0,"-"],pull:[10,0,0,"-"],run:[10,0,0,"-"]},"spython.main.apps":{apps:[10,1,1,""]},"spython.main.base":{Client:[11,2,1,""],command:[11,0,0,"-"],flags:[11,0,0,"-"],generate:[11,0,0,"-"],logger:[11,0,0,"-"],sutils:[11,0,0,"-"]},"spython.main.base.Client":{RobotNamer:[11,4,1,""],apps:[11,3,1,""],build:[11,3,1,""],debug:[11,4,1,""],execute:[11,3,1,""],help:[11,3,1,""],image:[11,4,1,""],inspect:[11,3,1,""],instance:[11,4,1,""],instance_stopall:[11,3,1,""],instances:[11,3,1,""],load:[11,3,1,""],pull:[11,3,1,""],quiet:[11,4,1,""],run:[11,3,1,""],setenv:[11,3,1,""],version:[11,3,1,""]},"spython.main.base.command":{generate_bind_list:[11,1,1,""],init_command:[11,1,1,""],run_command:[11,1,1,""]},"spython.main.base.flags":{parse_verbosity:[11,1,1,""]},"spython.main.base.generate":{RobotNamer:[11,2,1,""],main:[11,1,1,""]},"spython.main.base.generate.RobotNamer":{generate:[11,3,1,""]},"spython.main.base.logger":{init_level:[11,1,1,""],println:[11,1,1,""]},"spython.main.base.sutils":{get_filename:[11,1,1,""],get_uri:[11,1,1,""],load:[11,1,1,""],setenv:[11,1,1,""]},"spython.main.build":{build:[10,1,1,""]},"spython.main.execute":{execute:[10,1,1,""]},"spython.main.help":{help:[10,1,1,""]},"spython.main.inspect":{inspect:[10,1,1,""]},"spython.main.instances":{instances:[10,1,1,""],stopall:[10,1,1,""]},"spython.main.parse":{converters:[12,0,0,"-"],docker:[12,0,0,"-"],environment:[12,0,0,"-"],recipe:[12,0,0,"-"],singularity:[12,0,0,"-"]},"spython.main.parse.converters":{create_env_section:[12,1,1,""],create_keyval_section:[12,1,1,""],create_runscript:[12,1,1,""],create_section:[12,1,1,""],docker2singularity:[12,1,1,""],finish_section:[12,1,1,""],singularity2docker:[12,1,1,""],write_lines:[12,1,1,""]},"spython.main.parse.docker":{DockerRecipe:[12,2,1,""]},"spython.main.parse.environment":{parse_env:[12,1,1,""]},"spython.main.parse.recipe":{Recipe:[12,2,1,""]},"spython.main.parse.recipe.Recipe":{convert:[12,3,1,""],docker2singularity:[12,3,1,""],load:[12,3,1,""],parse:[12,3,1,""],save:[12,3,1,""],singularity2docker:[12,3,1,""]},"spython.main.parse.singularity":{SingularityRecipe:[12,2,1,""]},"spython.main.parse.singularity.SingularityRecipe":{load_recipe:[12,3,1,""]},"spython.main.pull":{pull:[10,1,1,""]},"spython.main.run":{run:[10,1,1,""]},"spython.tests":{test_client:[13,0,0,"-"],test_instances:[13,0,0,"-"],test_utils:[13,0,0,"-"]},"spython.tests.test_client":{TestClient:[13,2,1,""]},"spython.tests.test_client.TestClient":{setUp:[13,3,1,""],tearDown:[13,3,1,""],test_commands:[13,3,1,""]},"spython.tests.test_instances":{TestInstances:[13,2,1,""]},"spython.tests.test_instances.TestInstances":{setUp:[13,3,1,""],tearDown:[13,3,1,""],test_instances:[13,3,1,""]},"spython.tests.test_utils":{TestUtils:[13,2,1,""]},"spython.tests.test_utils.TestUtils":{setUp:[13,3,1,""],tearDown:[13,3,1,""],test_check_install:[13,3,1,""],test_get_installdir:[13,3,1,""],test_remove_uri:[13,3,1,""],test_write_read_files:[13,3,1,""]},"spython.utils":{fileio:[14,0,0,"-"],terminal:[14,0,0,"-"]},"spython.utils.fileio":{mkdir_p:[14,1,1,""],read_file:[14,1,1,""],read_json:[14,1,1,""],write_file:[14,1,1,""],write_json:[14,1,1,""]},"spython.utils.terminal":{check_install:[14,1,1,""],format_container_name:[14,1,1,""],get_installdir:[14,1,1,""],remove_uri:[14,1,1,""],run_command:[14,1,1,""],stream_command:[14,1,1,""]},spython:{client:[4,0,0,"-"],image:[5,0,0,"-"],instance:[7,0,0,"-"],logger:[9,0,0,"-"],main:[10,0,0,"-"],tests:[13,0,0,"-"],utils:[14,0,0,"-"],version:[3,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"],"4":["py","attribute","Python attribute"],"5":["py","staticmethod","Python static method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method","4":"py:attribute","5":"py:staticmethod"},terms:{"95m":9,"boolean":[9,10,11],"byte":11,"case":[10,13],"char":11,"class":[5,7,9,11,12,13],"default":[0,8,9,10,11,12,14],"export":[0,3,5,12],"function":[0,4,6,9,10,11,12,13,14],"import":[0,6,10],"int":9,"new":14,"public":[3,12,14],"return":[5,7,8,9,10,11,12,13,14],"static":9,"true":[6,7,8,9,10,11,12,14],Adding:0,FOR:[3,12,14],For:[10,11,12],The:[0,1,6,8,10,11,12,14],These:6,Will:9,With:8,__init__:6,_pars:12,abil:0,abort:9,about:[10,11],access:[10,11],action:[0,11],actual:[5,11],add:[12,14],addcolor:9,added:[6,9,10,11],adding:0,addit:[0,6,11],adjust:0,affero:[1,3,12,14],alia:11,all:[0,5,9,10,11,14],allow:[10,11],along:[3,7,12,14],also:[5,11],ani:[3,10,11,12,14],anoth:12,api:0,app:[2,3,11],appear:[5,11],append:[12,14],applic:14,appropri:12,arbitari:[10,11],arg:[4,9,10,11],argpars:11,argument:[0,10,11,12],around:4,asci:9,associ:[10,11],assum:[8,9,13],attempt:14,attribut:[0,12],automat:[10,11],avail:14,back:[12,14],backward:0,balloons_cursor:9,bar:[9,14],base:[3,4,5,7,9,10,12,13],bash:12,basic:0,befor:5,behaviour:0,being:9,best:12,between:12,bin:12,binari:[],bind:[0,8,10,11],bindlist:11,board:[],both:[4,11],bpython:4,branch:0,bug:0,build:[0,2,3,11,12],build_fold:[10,11],builder:[10,11,12],built:[10,11],call:[8,9,10,11,12],can:[0,3,4,11,12,14],captur:[8,10,11,14],carriage_return:9,chang:0,changelog:1,changing_arrow:9,charact:[9,14],check:[9,11,12,13,14],check_instal:14,choos:12,cli:0,client:[0,1,2,3,6,8,10,11,12],close:[0,14],cmd:[3,5,7,11,12,14],code:[0,1,10,11],coincid:0,col_width:9,color:9,column:[8,9],com:[10,11,12],command:[0,3,6,8,10,12,13,14],commit:0,commonli:6,complet:[5,7,9,10,11],compress:6,config:12,configur:9,consol:[0,4,14],contain:[0,1,8,10,11,12,14],content:[1,2],context:[10,11],conveni:12,convers:[0,12],convert2boolean:9,convert:[0,3,4,10,11],convert_to:12,copi:[0,3,12,14],copyright:[3,12,14],correct:0,couldn:[10,11],count:9,creat:[3,5,8,9,10,11,12,14],create_entrypoint:12,create_env_sect:12,create_keyval_sect:12,create_runscript:12,create_sect:12,criteria:5,critic:[0,9],current:9,custom:[6,9,10,11,12],data:[10,11,12,14],debug:[6,8,9,10,11],decompress:6,defil:[10,11],defin:[4,6,10,11,12,14],delai:9,delim:11,delimit:11,deprec:[0,6],desir:12,destin:0,detail:[3,12,14],determin:[4,9,12,14],develop:1,dict:14,dictionari:[4,9,11],differ:[0,10,11],dimens:8,directori:[10,11,13,14],disabl:[10,11],discoveri:12,distribut:[3,12,14],doc:12,docker2singular:12,docker:[0,3,5,7,10,11,14],dockerfil:[0,12],dockerrecip:[0,4,12],document:0,doe:[11,12],doesn:[10,11,12],don:[8,10,11,14],done:[8,9,10,11],driver:[10,11],each:[0,8,14],easili:12,either:[3,4,11,12,14],emit:9,emiterror:9,emitoutput:9,empti:[0,11],empty_char:9,enabl:9,encod:9,end:[12,14],engin:12,enhanc:0,entri:9,entrypoint:12,env:[0,12],environ:[3,4,6,8,9,10,11],environment:9,envlist:12,equal:12,error:[0,9,10,11],estim:12,etc:8,even:[3,12,14],eventu:0,everi:9,exampl:[11,12,14],except:14,exec:[0,11],execut:[0,2,3,11],exist:[5,11],exit:[9,11],expect:[8,10,11],expected_s:9,expos:[6,10,11],express:14,ext3:[10,11],ext:[10,11],extens:[10,11],fail:0,fals:[0,8,9,10,11,12,14],file:[0,4,5,6,10,11,12,14],fileio:[2,3],filenam:[11,14],filesystem:[10,11],filled_char:9,find:14,finish:12,finish_sect:12,first:[5,9,11,12],fit:[3,12,14],fix:0,flag:[0,3,10],flexibl:0,folder:[10,11],follow:11,forc:[10,11,12],form:12,format:[0,12,14],format_container_nam:14,format_tim:9,found:[5,10,11,12],foundat:[3,12,14],free:[3,12,14],from:[0,5,6,7,8,10,11,12,14],fromhead:[0,12],full:[6,10,11],full_path:[10,11],fun:[10,11],futur:12,ged:[10,11],gener:[0,3,9,10,12,14],generate_bind_list:11,generate_image_command:[6,11],generate_instance_command:8,get:[4,5,8,10,11,12,13,14],get_client:10,get_filenam:11,get_hash:5,get_installdir:14,get_log:9,get_logging_level:9,get_pars:4,get_subpars:4,get_uri:[5,7,11],get_user_color_prefer:9,github:[0,10,11],give:[4,5,8,10,11],given:[0,6,11],global:11,gnu:[3,12,14],gpl:1,group:[6,8,10,11],guidanc:0,haikun:11,handl:[0,5,7],hang:[0,8],has:[9,11,12],hash:[0,5],have:[3,12,14],header:[0,8,12],help:[2,3,4,11],helper:6,here:0,hide:9,highli:[10,11],histori:9,hold:[6,8],hope:[3,12,14],host:[10,11],how:0,http:[3,10,11,12,14],hub:[10,11],idea:12,ideal:8,ignor:12,imag:[0,1,2,3,4,7,8,10,11,14],image_path:[6,10,11],imagebas:[5,7],imagecli:11,implement:[0,11],impli:[3,12,14],import_typ:6,importcmd:[3,5],imprt:6,includ:[0,9,10,11,12],incompat:0,index:1,indic:8,info:9,inform:[9,10,11],init:10,init_command:11,init_level:11,initi:[10,11],input:6,input_sourc:6,inspect:[2,3,11],inspir:11,instal:[10,11,12,13,14],instanc:[0,1,2,3,11],instance_stopal:11,instead:[10,11],instruct:12,integ:8,integr:[10,11],intend:[5,12],interest:14,interpret:9,ipython:4,is_quiet:9,isenabledfor:9,isol:[10,11],issu:[0,10,11],item:0,iter:[9,10,11],iutil:[3,7],join:[9,12],join_newlin:9,json:[8,10,11,14],json_obj:14,jsonifi:8,junior:[],just:[5,10,11],kei:[9,12],know:0,kwarg:7,label:[9,10,11,12],later:[1,3,12,14],leland:[],length:[9,11],level:[0,4,5,6,8,9,11],libexecdir:[10,11],licens:[1,3,12,14],like:[0,8,12],line:[11,12,14],linux:[10,11],list:[8,9,10,11,12,14],load:[0,5,7,10,11,12],load_recip:12,local:11,locat:[10,11],log:[0,9,11],logger:[1,2,3,10],logic:12,look:[8,10,11],main:[1,2,3,4,6,8,9],mainli:6,make:[10,11,12],manual:[0,12],map:[10,11],master:1,match:8,md5:5,mean:[12,14],merchant:[3,12,14],merg:0,messag:[2,3,4,11],messagelevel:[6,8,9],metadata:12,methodnam:13,migrat:0,min_level:9,miss:0,mkdir:14,mkdir_p:14,mode:[10,14],modifi:[3,12,14],modul:[1,2],more:[3,10,11,12,14],most:[10,12],mount:[10,11],much:11,multipl:0,must:[6,8,9],name:[0,5,7,8,9,10,11,12,14],name_by_commit:[10,11],name_by_hash:[10,11],namespac:[5,7],need:[8,11,12,14],neither:12,newlin:[9,14],nicer:14,no_newline_regexp:14,none:[5,6,8,9,10,11,12,14],note:12,number:[8,9],nvidia:[0,10,11],object:[5,9,10,11,12,14],off:11,one:[0,10,11,12],onli:[0,5,9,10,11],open:14,opposit:12,option:[3,4,5,8,9,10,11,12,14],org:[3,12,14],origin:[0,12],other:14,otherwis:11,out:9,outfil:4,output:[4,8,10,11,12,14],output_fil:12,over:11,overrid:[10,11,12],overriden:11,packag:[0,1,2],pair:12,param:[9,14],paramet:[5,6,7,8,10,11,12,14],parent:[11,14],pars:[3,5,7,8,10,11,14],parse_env:12,parse_image_nam:[5,7],parse_t:8,parse_verbos:11,parser:[0,4],particular:[3,12,13,14],pass:[6,8,11],path:[0,5,6,8,10,11,14],perform:[10,11,12],pid:[8,10,11],pipe:14,poorli:11,prefer:[10,11],prefix:[9,12],pretti:14,pretty_print:14,print:[0,4,9,10,11,12,14],print_pretti:14,println:11,prioriti:5,process:11,progess:14,program:[3,12,14],progress:[2,3,14],progressbar:9,prompt:9,properli:[6,14],provid:[6,10,11,12,13],publish:[3,12,14],pull:[0,2,3,11],pull_fold:[10,11],purpos:[3,12,14],pwd:[10,11],pypi:0,python:[0,4],pythonbuff:12,quiet:[0,6,8,9,10,11,14],raw:[10,11,12],read:[10,11,12,14],read_fil:[13,14],read_json:14,readi:1,readlin:14,reason:[5,10,11],receiv:[3,12,14],recip:[0,2,3,10,11],recommend:[10,11],redistribut:[3,12,14],refer:12,regexp:[],registri:[5,7],regular:14,rel:[0,10,11],releas:0,remov:[0,5,8,12,14],remove_image_uri:5,remove_row:8,remove_uri:[5,14],renam:0,repositori:0,repres:0,request:0,requir:[10,11,12],respect:0,result:[11,12,14],return_cod:9,return_json:[8,10,11],ride:11,right:0,robot:[10,11],robot_nam:[10,11],robotnam:11,root:[10,11],row:[8,9],run:[0,2,3,8,9,11,14],run_command:[11,14],runscript:[10,11,12],runtest:13,runtim:[10,11],same:14,sandbox:[10,11],save:[4,5,12],sci:[10,11],scientif:[10,11],scif:[10,11],second:[5,9],section:[0,12],see:[3,10,11,12,14],select:[9,12],select_gener:9,self:[6,8,10,11,12],send:[10,11,14],sens:[10,11],sequenc:12,serv:[4,10,11],set:[4,9,10,11,12,14],set_verbos:4,setenv:11,setup:13,share:[10,11],shell:[0,2,3],should:[0,3,9,10,11,12,13,14],show:[9,10,11],show_progress:9,shub:14,simag:11,simg:[10,11],simpli:[5,7],singl:[8,10,11,12],singular:[0,3,5,6,7,8,10,11,13,14],singularity2dock:12,singularitymessag:9,singularityrecip:[0,4,12],singularitywar:[10,11],skip:14,sochat:[3,12,14],softwar:[3,10,11,12,13,14],some:12,sourc:[0,4,5,6,7,8,9,10,11,12,13,14],space:5,special:14,special_charact:14,specif:[10,11,12],specifi:[6,9,10,11,12],sphinx:0,spin:9,spinner:[2,3],spinning_cursor:9,split:[5,7],spython:[0,1],standard:[9,10,11],stanford:[],start:[3,7,9,14],statement:0,stderr:9,stdin:6,stdout:[9,11,14],stop:[3,7,9,10,11],stopal:10,stream:[0,9,10,11,14],stream_command:14,string:[5,8,10,11],strip:0,structur:14,sub:[10,11],subclass:12,subcommand:6,submodul:[1,2,5,7],subpackag:[1,2],subpars:[4,12],subprocess:14,success:11,sudo:[6,8,10,11,14],suffix:9,suppli:14,support:[0,9],suppress:10,sutil:[3,10],symbol:9,system:[10,11],tabl:[8,9],table_str:8,take:[10,11,12,14],tar:6,teardown:13,tempfil:0,temporari:[6,12],term:[3,12,14],termin:[0,2,3,9],test:[0,2,3,10,11,12],test_check_instal:13,test_command:13,test_get_installdir:13,test_remove_uri:13,test_write_read_fil:13,testcas:13,testclient:13,testinst:13,testutil:13,text:[9,10,11,12],them:0,thi:[0,1,3,4,5,8,10,11,12,14],those:14,tmp:8,tmptar:6,tokenchar:11,tokenlength:11,top:8,total:9,track:0,truste:[],tupl:8,turn:10,two:12,type:12,typo:0,ubuntu:[5,7,11],uid:[10,11],under:[1,3,6,9,12,14],unittest:13,univers:[],unset:0,uri:[0,5,7,8,10,11,14],url:0,usag:[8,14],use:[0,1,6,10,11,12,14],usecolor:9,used:[6,9,10,11,12,13],useful:[3,5,12,14],user:[4,8,9,10,11,12,14],uses:[11,14],using:[10,11],usual:9,utf:11,util:[1,2,3,5],valu:[10,11,12],vanessa:[3,12,14],variabl:[0,6,8,9,11,12],vault:0,verbos:[6,8,9],verbose1:9,verbose2:9,verbose3:9,version:[0,1,2,4,5,11,12,14],via:[6,8],volum:11,want:8,warn:9,warranti:[3,12,14],whatev:6,when:8,where:[8,10,11,13],whether:12,which:[9,10,11],width:9,within:[10,11],withour:[10,11],without:[3,12,14],won:14,work:[0,1],wrap:9,wrapper:[4,11],writabl:[10,11],write:[9,10,11,12,14],write_fil:[13,14],write_json:14,write_lin:12,www:[3,12,14],x1b:9,yes:11,yet:[1,11],yield:14,you:[3,10,11,12,14],your:[3,9,10,11,12,14]},titles:["CHANGELOG","Welcome to Singularity Python API\u2019s documentation!","spython","spython package","spython.client package","spython.image package","spython.image.cmd package","spython.instance package","spython.instance.cmd package","spython.logger package","spython.main package","spython.main.base package","spython.main.parse package","spython.tests package","spython.utils package"],titleterms:{"export":6,api:1,app:10,base:11,binari:[],build:10,changelog:0,client:4,cmd:[6,8],command:11,content:[3,4,5,6,7,8,9,10,11,12,13,14],convert:12,creat:6,docker:12,document:1,environ:12,execut:10,fileio:14,flag:11,gener:11,help:10,imag:[5,6],importcmd:6,indic:1,inspect:10,instanc:[7,8,10],iutil:8,logger:[9,11],main:[10,11,12],master:0,messag:9,modul:[3,4,5,6,7,8,9,10,11,12,13,14],packag:[3,4,5,6,7,8,9,10,11,12,13,14],pars:12,progress:9,pull:10,python:1,recip:[4,12],regexp:[],run:10,shell:4,singular:[1,12],spinner:9,spython:[2,3,4,5,6,7,8,9,10,11,12,13,14],start:8,stop:8,submodul:[3,4,6,8,9,10,11,12,13,14],subpackag:[3,5,7,10],sutil:11,tabl:1,termin:14,test:[4,13],test_client:13,test_inst:13,test_util:13,util:[6,14],version:3,welcom:1}})
\ No newline at end of file
diff --git a/docs/api/source/spython.html b/docs/api/source/spython.html
index c8caf879..a2fc5554 100644
--- a/docs/api/source/spython.html
+++ b/docs/api/source/spython.html
@@ -270,9 +270,7 @@ Submodules
Module contents¶
-Copyright (C) 2017 The Board of Trustees of the Leland Stanford Junior
-University.
-Copyright (C) 2016-2017 Vanessa Sochat.
+Copyright (C) 2016-2018 Vanessa Sochat.
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at your
diff --git a/docs/api/source/spython.main.parse.html b/docs/api/source/spython.main.parse.html
index 6a90c54a..503e1691 100644
--- a/docs/api/source/spython.main.parse.html
+++ b/docs/api/source/spython.main.parse.html
@@ -398,6 +398,21 @@
Submodules
+
+load(recipe)[source]¶
+load a recipe file into the client, first performing checks, and
+then parsing the file.
+
+
+
+
+Parameters: recipe (the original recipe file, parsed by the subclass either) – DockerRecipe or SingularityRecipe
+
+
+
+
+
-
parse()[source]¶
@@ -480,9 +495,7 @@ Submodules
Module contents¶
-Copyright (C) 2018 The Board of Trustees of the Leland Stanford Junior
-University.
-Copyright (C) 2016-2018 Vanessa Sochat.
+Copyright (C) 2016-2018 Vanessa Sochat.
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at your
diff --git a/docs/api/source/spython.utils.html b/docs/api/source/spython.utils.html
index d37ef069..e554d186 100644
--- a/docs/api/source/spython.utils.html
+++ b/docs/api/source/spython.utils.html
@@ -178,9 +178,7 @@
Submodules
spython.utils.fileio module¶
-Copyright (C) 2017 The Board of Trustees of the Leland Stanford Junior
-University.
-Copyright (C) 2016-2017 Vanessa Sochat.
+Copyright (C) 2016-2017 Vanessa Sochat.
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at your
@@ -231,9 +229,7 @@
Submodules
spython.utils.terminal module¶
-Copyright (C) 2017 The Board of Trustees of the Leland Stanford Junior
-University.
-Copyright (C) 2016-2017 Vanessa Sochat.
+Copyright (C) 2016-2017 Vanessa Sochat.
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at your
diff --git a/spython/main/parse/docker.py b/spython/main/parse/docker.py
index 836bc242..041413bd 100644
--- a/spython/main/parse/docker.py
+++ b/spython/main/parse/docker.py
@@ -170,24 +170,27 @@ def _add(self, lines):
lines = self._setup('ADD', lines)
for line in lines:
- frompath, topath = line.split(" ")
+ values = line.split(" ")
+ frompath = values.pop(0)
# Custom parsing for frompath
# If it's a web address, add to install routine to get
if frompath.startswith('http'):
- self._parse_http(frompath, topath)
+ for topath in values:
+ self._parse_http(frompath, topath)
# Add the file, and decompress in install
elif re.search("[.](gz|gzip|bz2|xz)$", frompath.strip()):
- self._parse_archive(frompath, topath)
+ for topath in values:
+ self._parse_archive(frompath, topath)
# Just add the files
else:
- self._add_files(frompath, topath)
+ for topath in values:
+ self._add_files(frompath, topath)
-
# File Handling
def _add_files(self, source, dest):
diff --git a/spython/main/parse/environment.py b/spython/main/parse/environment.py
index 91cc40bd..6ca5db96 100644
--- a/spython/main/parse/environment.py
+++ b/spython/main/parse/environment.py
@@ -43,10 +43,16 @@ def parse_env(envlist):
current = pieces.pop(0)
- # Case 1: ['A=', '"1 2"'] --> A=1 2
-
if current.endswith('='):
- next = pieces.pop(0)
+
+ # Case 1: ['A='] --> A=
+
+ next = ""
+
+ # Case 2: ['A=', '"1 2"'] --> A=1 2
+
+ if len(pieces) > 0:
+ next = pieces.pop(0)
exports.append("%s%s" %(current, next))
# Case 2: ['A=B'] --> A=B
diff --git a/spython/version.py b/spython/version.py
index f6d93543..3a205b5b 100644
--- a/spython/version.py
+++ b/spython/version.py
@@ -16,7 +16,7 @@
-__version__ = "0.0.45"
+__version__ = "0.0.46"
AUTHOR = 'Vanessa Sochat'
AUTHOR_EMAIL = 'vsochat@stanford.edu'
NAME = 'spython'