New upstream version 1.0.10

parent d1af110f
Metadata-Version: 1.1
Name: reprozip
Version: 1.0.9
Version: 1.0.10
Summary: Linux tool enabling reproducible experiments (packer)
Home-page: http://vida-nyu.github.io/reprozip/
Author: Remi Rampin
Author-email: remirampin@gmail.com
License: BSD
License: BSD-3-Clause
Description: ReproZip
========
`ReproZip <https://www.reprozip.org/>`__ is a tool aimed at simplifying the process of creating reproducible
experiments from command-line executions, a frequently-used common denominator
in computational science. It tracks operating system calls and creates a package
that contains all the binaries, files and dependencies required to run a given
command on the author's computational environment (packing step).
A reviewer can then extract the experiment in his environment to reproduce the results (unpacking step).
`ReproZip <https://www.reprozip.org/>`__ is a tool aimed at simplifying the process of creating reproducible experiments from command-line executions, a frequently-used common denominator in computational science. It tracks operating system calls and creates a package that contains all the binaries, files and dependencies required to run a given command on the author's computational environment (packing step). A reviewer can then extract the experiment in his environment to reproduce the results (unpacking step).
reprozip
--------
This is the component responsible for the packing step on Linux distributions.
Please refer to `reprounzip <https://pypi.python.org/pypi/reprounzip>`_,
`reprounzip-vagrant <https://pypi.python.org/pypi/reprounzip-vagrant>`_,
and `reprounzip-docker <https://pypi.python.org/pypi/reprounzip-docker>`_
for other components and plugins.
Please refer to `reprounzip <https://pypi.python.org/pypi/reprounzip>`_, `reprounzip-vagrant <https://pypi.python.org/pypi/reprounzip-vagrant>`_, and `reprounzip-docker <https://pypi.python.org/pypi/reprounzip-docker>`_ for other components and plugins.
Additional Information
----------------------
For more detailed information, please refer to our `website <https://www.reprozip.org/>`_, as well as to
our `documentation <https://reprozip.readthedocs.io/>`_.
For more detailed information, please refer to our `website <https://www.reprozip.org/>`_, as well as to our `documentation <https://reprozip.readthedocs.io/>`_.
ReproZip is currently being developed at `NYU <http://engineering.nyu.edu/>`_. The team includes:
......
ReproZip
========
`ReproZip <https://www.reprozip.org/>`__ is a tool aimed at simplifying the process of creating reproducible
experiments from command-line executions, a frequently-used common denominator
in computational science. It tracks operating system calls and creates a package
that contains all the binaries, files and dependencies required to run a given
command on the author's computational environment (packing step).
A reviewer can then extract the experiment in his environment to reproduce the results (unpacking step).
`ReproZip <https://www.reprozip.org/>`__ is a tool aimed at simplifying the process of creating reproducible experiments from command-line executions, a frequently-used common denominator in computational science. It tracks operating system calls and creates a package that contains all the binaries, files and dependencies required to run a given command on the author's computational environment (packing step). A reviewer can then extract the experiment in his environment to reproduce the results (unpacking step).
reprozip
--------
This is the component responsible for the packing step on Linux distributions.
Please refer to `reprounzip <https://pypi.python.org/pypi/reprounzip>`_,
`reprounzip-vagrant <https://pypi.python.org/pypi/reprounzip-vagrant>`_,
and `reprounzip-docker <https://pypi.python.org/pypi/reprounzip-docker>`_
for other components and plugins.
Please refer to `reprounzip <https://pypi.python.org/pypi/reprounzip>`_, `reprounzip-vagrant <https://pypi.python.org/pypi/reprounzip-vagrant>`_, and `reprounzip-docker <https://pypi.python.org/pypi/reprounzip-docker>`_ for other components and plugins.
Additional Information
----------------------
For more detailed information, please refer to our `website <https://www.reprozip.org/>`_, as well as to
our `documentation <https://reprozip.readthedocs.io/>`_.
For more detailed information, please refer to our `website <https://www.reprozip.org/>`_, as well as to our `documentation <https://reprozip.readthedocs.io/>`_.
ReproZip is currently being developed at `NYU <http://engineering.nyu.edu/>`_. The team includes:
......
Metadata-Version: 1.1
Name: reprozip
Version: 1.0.9
Version: 1.0.10
Summary: Linux tool enabling reproducible experiments (packer)
Home-page: http://vida-nyu.github.io/reprozip/
Author: Remi Rampin
Author-email: remirampin@gmail.com
License: BSD
License: BSD-3-Clause
Description: ReproZip
========
`ReproZip <https://www.reprozip.org/>`__ is a tool aimed at simplifying the process of creating reproducible
experiments from command-line executions, a frequently-used common denominator
in computational science. It tracks operating system calls and creates a package
that contains all the binaries, files and dependencies required to run a given
command on the author's computational environment (packing step).
A reviewer can then extract the experiment in his environment to reproduce the results (unpacking step).
`ReproZip <https://www.reprozip.org/>`__ is a tool aimed at simplifying the process of creating reproducible experiments from command-line executions, a frequently-used common denominator in computational science. It tracks operating system calls and creates a package that contains all the binaries, files and dependencies required to run a given command on the author's computational environment (packing step). A reviewer can then extract the experiment in his environment to reproduce the results (unpacking step).
reprozip
--------
This is the component responsible for the packing step on Linux distributions.
Please refer to `reprounzip <https://pypi.python.org/pypi/reprounzip>`_,
`reprounzip-vagrant <https://pypi.python.org/pypi/reprounzip-vagrant>`_,
and `reprounzip-docker <https://pypi.python.org/pypi/reprounzip-docker>`_
for other components and plugins.
Please refer to `reprounzip <https://pypi.python.org/pypi/reprounzip>`_, `reprounzip-vagrant <https://pypi.python.org/pypi/reprounzip-vagrant>`_, and `reprounzip-docker <https://pypi.python.org/pypi/reprounzip-docker>`_ for other components and plugins.
Additional Information
----------------------
For more detailed information, please refer to our `website <https://www.reprozip.org/>`_, as well as to
our `documentation <https://reprozip.readthedocs.io/>`_.
For more detailed information, please refer to our `website <https://www.reprozip.org/>`_, as well as to our `documentation <https://reprozip.readthedocs.io/>`_.
ReproZip is currently being developed at `NYU <http://engineering.nyu.edu/>`_. The team includes:
......
......@@ -2,4 +2,4 @@
# This file is part of ReproZip which is released under the Revised BSD License
# See file LICENSE for full license details.
__version__ = '1.0.9'
__version__ = '1.0.10'
......@@ -554,8 +554,8 @@ other_files:
# If you want to include additional files in the pack, you can list additional
# patterns of files that will be included
additional_patterns:
# Example:
#additional_patterns:
# - /etc/apache2/** # Everything under apache2/
# - /var/log/apache2/*.log # Log files directly under apache2/
# - /var/lib/lxc/*/rootfs/home/**/*.py # All Python files of all users in
......
......@@ -49,6 +49,7 @@ def shell_escape(s):
if not s or any(c not in safe_shell_chars for c in s):
return '"%s"' % (s.replace('\\', '\\\\')
.replace('"', '\\"')
.replace('`', '\\`')
.replace('$', '\\$'))
else:
return s
......@@ -66,7 +67,7 @@ def print_db(database):
conn.text_factory = lambda x: unicode_(x, 'utf-8', 'replace')
cur = conn.cursor()
processes = cur.execute(
rows = cur.execute(
'''
SELECT id, parent, timestamp, exitcode
FROM processes;
......@@ -76,7 +77,7 @@ def print_db(database):
print(header)
print("| id | parent | exit | timestamp |")
print(header)
for r_id, r_parent, r_timestamp, r_exit in processes:
for r_id, r_parent, r_timestamp, r_exit in rows:
f_id = "{0: 5d} ".format(r_id)
if r_parent is not None:
f_parent = "{0: 7d} ".format(r_parent)
......@@ -92,7 +93,7 @@ def print_db(database):
cur.close()
cur = conn.cursor()
processes = cur.execute(
rows = cur.execute(
'''
SELECT id, name, timestamp, process, argv
FROM executed_files;
......@@ -104,7 +105,7 @@ def print_db(database):
print("| id | timestamp | process | name and argv "
" |")
print(header)
for r_id, r_name, r_timestamp, r_process, r_argv in processes:
for r_id, r_name, r_timestamp, r_process, r_argv in rows:
f_id = "{0: 7d} ".format(r_id)
f_timestamp = "{0: 17d} ".format(r_timestamp)
f_proc = "{0: 8d} ".format(r_process)
......@@ -120,7 +121,7 @@ def print_db(database):
cur.close()
cur = conn.cursor()
processes = cur.execute(
rows = cur.execute(
'''
SELECT id, name, timestamp, mode, process
FROM opened_files;
......@@ -132,7 +133,7 @@ def print_db(database):
print("| id | timestamp | process | mode | name "
" |")
print(header)
for r_id, r_name, r_timestamp, r_mode, r_process in processes:
for r_id, r_name, r_timestamp, r_mode, r_process in rows:
f_id = "{0: 7d} ".format(r_id)
f_timestamp = "{0: 17d} ".format(r_timestamp)
f_proc = "{0: 8d} ".format(r_process)
......
......@@ -60,13 +60,17 @@ def canonicalize_config(packages, other_files, additional_patterns,
sort_packages):
"""Expands ``additional_patterns`` from the configuration file.
"""
add_files = expand_patterns(additional_patterns)
if sort_packages:
add_files, add_packages = identify_packages(add_files)
else:
add_packages = []
other_files, packages = combine_files(add_files, add_packages,
other_files, packages)
if additional_patterns:
add_files = expand_patterns(additional_patterns)
logging.info("Found %d files from expanding additional_patterns...",
len(add_files))
if add_files:
if sort_packages:
add_files, add_packages = identify_packages(add_files)
else:
add_packages = []
other_files, packages = combine_files(add_files, add_packages,
other_files, packages)
return packages, other_files
......
......@@ -254,9 +254,12 @@ def tty_prompt(prompt, chars):
try:
import termios
fd = os.open('/dev/tty', os.O_RDWR | os.O_NOCTTY)
stream = os.fdopen(fd, 'w+', 1)
old = termios.tcgetattr(fd)
# Can't use O_RDWR/"w+" for a single fd/stream because of PY3 bug 20074
ofd = os.open('/dev/tty', os.O_WRONLY | os.O_NOCTTY)
ostream = os.fdopen(ofd, 'w', 1)
ifd = os.open('/dev/tty', os.O_RDONLY | os.O_NOCTTY)
istream = os.fdopen(ifd, 'r', 1)
old = termios.tcgetattr(ifd)
except (ImportError, AttributeError, IOError, OSError):
ostream = sys.stdout
istream = sys.stdin
......@@ -276,17 +279,17 @@ def tty_prompt(prompt, chars):
new[3] &= ~termios.ICANON # 3 == 'lflags'
tcsetattr_flags = termios.TCSAFLUSH | getattr(termios, 'TCSASOFT', 0)
try:
termios.tcsetattr(fd, tcsetattr_flags, new)
stream.write(prompt)
stream.flush()
termios.tcsetattr(ifd, tcsetattr_flags, new)
ostream.write(prompt)
ostream.flush()
while True:
char = stream.read(1)
char = istream.read(1)
if char in chars:
stream.write("\n")
ostream.write("\n")
return char
finally:
termios.tcsetattr(fd, tcsetattr_flags, old)
stream.flush()
termios.tcsetattr(ifd, tcsetattr_flags, old)
ostream.flush()
def trace(binary, argv, directory, append, verbosity=1):
......
......@@ -106,7 +106,7 @@ def combine_traces(traces, target):
configuration file.
:type target: Path
"""
# We are probably overwriting on of the traces we're reading, so write to
# We are probably overwriting one of the traces we're reading, so write to
# a temporary file first then move it
fd, output = Path.tempfile('.sqlite3', 'reprozip_combined_')
if PY3:
......@@ -230,12 +230,20 @@ def combine_traces(traces, target):
DELETE FROM maps.map_processes;
''')
# An implicit transaction gets created. Python used to implicitly
# commit it, but no longer does as of 3.6, so we have to explicitly
# commit before detaching.
conn.commit()
# Detach
conn.execute(
'''
DETACH DATABASE trace;
''')
# See above.
conn.commit()
conn.execute(
'''
DETACH DATABASE maps;
......
......@@ -59,8 +59,8 @@ PY3 = sys.version_info[0] == 3
if PY3:
izip = zip
irange = range
iteritems = dict.items
itervalues = dict.values
iteritems = lambda d: d.items()
itervalues = lambda d: d.values()
listvalues = lambda d: list(d.values())
stdout_bytes, stderr_bytes = sys.stdout.buffer, sys.stderr.buffer
......@@ -68,10 +68,10 @@ if PY3:
stdout, stderr = sys.stdout, sys.stderr
else:
izip = itertools.izip
irange = xrange
iteritems = dict.iteritems
itervalues = dict.itervalues
listvalues = dict.values
irange = xrange # noqa: F821
iteritems = lambda d: d.iteritems()
itervalues = lambda d: d.itervalues()
listvalues = lambda d: d.values()
_writer = codecs.getwriter(locale.getpreferredencoding())
stdout_bytes, stderr_bytes = sys.stdout, sys.stderr
......@@ -83,8 +83,8 @@ if PY3:
int_types = int,
unicode_ = str
else:
int_types = int, long
unicode_ = unicode
int_types = int, long # noqa: F821
unicode_ = unicode # noqa: F821
def flatten(n, l):
......
[egg_info]
tag_build =
tag_date = 0
tag_svn_revision = 0
......@@ -9,6 +9,14 @@ import sys
os.chdir(os.path.abspath(os.path.dirname(__file__)))
# This won't build on non-Linux -- don't even try
if platform.system().lower() != 'linux':
sys.stderr.write("reprozip uses ptrace and thus only works on Linux\n"
"You can however install reprounzip and plugins on other "
"platforms\n")
sys.exit(1)
# List the source files
sources = ['pytracer.c', 'tracer.c', 'syscalls.c', 'database.c',
'ptrace_utils.c', 'utils.c', 'log.c']
......@@ -34,7 +42,7 @@ req = [
'usagestats>=0.3',
'requests']
setup(name='reprozip',
version='1.0.9',
version='1.0.10',
ext_modules=[pytracer],
packages=['reprozip', 'reprozip.tracer'],
entry_points={
......@@ -51,7 +59,7 @@ setup(name='reprozip',
maintainer_email='remirampin@gmail.com',
url='http://vida-nyu.github.io/reprozip/',
long_description=description,
license='BSD',
license='BSD-3-Clause',
keywords=['reprozip', 'reprounzip', 'reproducibility', 'provenance',
'vida', 'nyu'],
classifiers=[
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment