gnu: Add python-robotframework.

* gnu/packages/python-xyz.scm (python-robotframework): New variable.
* gnu/packages/patches/python-robotframework-honor-source-date-epoch.patch:
Add patch.
* gnu/local.mk (dist_patch_DATA): Register it.
master
Maxim Cournoyer 2019-04-01 22:39:45 -04:00
parent c0c0bb3823
commit b979028527
No known key found for this signature in database
GPG Key ID: 1260E46482E63562
3 changed files with 108 additions and 0 deletions

View File

@ -1206,6 +1206,7 @@ dist_patch_DATA = \
%D%/packages/patches/python-pycrypto-CVE-2013-7459.patch \ %D%/packages/patches/python-pycrypto-CVE-2013-7459.patch \
%D%/packages/patches/python2-pygobject-2-gi-info-type-error-domain.patch \ %D%/packages/patches/python2-pygobject-2-gi-info-type-error-domain.patch \
%D%/packages/patches/python-pygpgme-fix-pinentry-tests.patch \ %D%/packages/patches/python-pygpgme-fix-pinentry-tests.patch \
%D%/packages/patches/python-robotframework-honor-source-date-epoch.patch \
%D%/packages/patches/python2-subprocess32-disable-input-test.patch \ %D%/packages/patches/python2-subprocess32-disable-input-test.patch \
%D%/packages/patches/python-unittest2-python3-compat.patch \ %D%/packages/patches/python-unittest2-python3-compat.patch \
%D%/packages/patches/python-unittest2-remove-argparse.patch \ %D%/packages/patches/python-unittest2-remove-argparse.patch \

View File

@ -0,0 +1,62 @@
From 3cc41c05fad5601c0dd1832f64a6e9efca017727 Mon Sep 17 00:00:00 2001
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Date: Mon, 1 Apr 2019 11:36:04 -0400
Subject: [PATCH] robottime: Honor the SOURCE_DATE_EPOCH environment variable.
Honoring the SOURCE_DATE_EPOCH environment variable allows building
the documentation using libdoc reproducibly, by setting the generated
timestamp to a fixed value.
For more background on reproducible builds and the SOURCE_DATE_EPOCH
environment variable, see:
https://reproducible-builds.org/specs/source-date-epoch/.
* src/robot/utils/robottime.py: import `os'.
(TimestampCache._get_epoch): Retrieve date from SOURCE_DATE_EPOCH if
it is defined, otherwise from time.time().
* utest/output/test_logger.py (TestLogger.test_write_to_one_logger):
Check for the existance of a timestamp attribute instead of checking
for its content as the later is easy to break when using the
SOURCE_DATE_EPOCH environment variable.
---
src/robot/utils/robottime.py | 3 +++
utest/output/test_logger.py | 2 +-
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/robot/utils/robottime.py b/src/robot/utils/robottime.py
index 06432a4a6..91526f826 100644
--- a/src/robot/utils/robottime.py
+++ b/src/robot/utils/robottime.py
@@ -14,6 +14,7 @@
# limitations under the License.
import datetime
+import os
import time
import re
@@ -395,6 +396,8 @@ class TimestampCache(object):
# Seam for mocking
def _get_epoch(self):
+ if os.getenv('SOURCE_DATE_EPOCH'):
+ return float(os.getenv('SOURCE_DATE_EPOCH'))
return time.time()
def _use_cache(self, secs, *separators):
diff --git a/utest/output/test_logger.py b/utest/output/test_logger.py
index 92fe6d77d..e980227aa 100644
--- a/utest/output/test_logger.py
+++ b/utest/output/test_logger.py
@@ -46,7 +46,7 @@ class TestLogger(unittest.TestCase):
logger = LoggerMock(('Hello, world!', 'INFO'))
self.logger.register_logger(logger)
self.logger.write('Hello, world!', 'INFO')
- assert_true(logger.msg.timestamp.startswith('20'))
+ assert_true(hasattr(logger.msg, 'timestamp'))
def test_write_to_one_logger_with_trace_level(self):
logger = LoggerMock(('expected message', 'TRACE'))
--
2.20.1

View File

@ -2752,6 +2752,51 @@ designed to be used by Robot Framework and tools and libraries in its
ecosystem, but can naturally be used also by other projects.") ecosystem, but can naturally be used also by other projects.")
(license license:asl2.0))) (license license:asl2.0)))
(define-public python-robotframework
(package
(name "python-robotframework")
(version "3.1.1")
;; There are no tests in the PyPI archive.
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/robotframework/robotframework.git")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"1aaiamc9l35m5sf7xl2qc5q9308v7sz3p1qgzcslsjxzddphyn4v"))
(patches (search-patches
"python-robotframework-honor-source-date-epoch.patch"))))
(build-system python-build-system)
(arguments
`(#:phases (modify-phases %standard-phases
(add-before 'build 'build-and-install-doc
(lambda* (#:key outputs #:allow-other-keys)
(let* ((doc-output (assoc-ref outputs "doc"))
(doc (string-append doc-output "/share/"
,name "-" ,version "/")))
(invoke "invoke" "library-docs" "all")
(mkdir-p doc)
(copy-recursively "doc/libraries"
(string-append doc "/libraries"))
#t)))
(replace 'check
(lambda _
(invoke "python" "utest/run.py"))))))
(native-inputs
`(("python-invoke" ,python-invoke)
("python-rellu" ,python-rellu)
("python:tk" ,python "tk"))) ;used when building the HTML doc
(outputs '("out" "doc"))
(home-page "https://robotframework.org")
(synopsis "Generic automation framework")
(description "Robot Framework is a generic automation framework for
acceptance testing, acceptance test driven development (ATDD), and robotic
process automation (RPA).")
(license license:asl2.0)))
(define-public python-scp (define-public python-scp
(package (package
(name "python-scp") (name "python-scp")