+
+(define-public python-vf-1
+ (package
+ (name "python-vf-1")
+ (version "0.0.11")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "VF-1" version))
+ (sha256
+ (base32
+ "0xlqsaxsiayk1sd07kpz8abbcnab582y29a1y4882fq6j4gma5xi"))))
+ (build-system python-build-system)
+ (home-page "https://github.com/solderpunk/VF-1")
+ (synopsis "Command line gopher client")
+ (description "@code{VF-1} is a command line gopher client with
+@acronym{TLS, Transport Layer Security} support.")
+ (license license:bsd-2)))
+
+(define-public python-websockets
+ (package
+ (name "python-websockets")
+ (version "8.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "websockets" version))
+ (sha256
+ (base32
+ "03s3ml6sbki24aajllf8aily0xzrn929zxi84p50zkkbikdd4raw"))))
+ (build-system python-build-system)
+ (arguments '(#:tests? #f)) ; Tests not included in release tarball.
+ (home-page "https://github.com/aaugustin/websockets")
+ (synopsis
+ "Python implementation of the WebSocket Protocol (RFC 6455 & 7692)")
+ (description
+ "@code{websockets} is a library for building WebSocket servers and clients
+in Python with a focus on correctness and simplicity.
+
+Built on top of @code{asyncio}, Python's standard asynchronous I/O framework,
+it provides an elegant coroutine-based API.")
+ (license license:bsd-3)))
+
+(define-public python-selenium
+ (package
+ (name "python-selenium")
+ (version "3.141.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "selenium" version))
+ (sha256
+ (base32
+ "039hf9knvl4s3hp21bzwsp1g5ri9gxsh504dp48lc6nr1av35byy"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-urllib3" ,python-urllib3)))
+ (home-page
+ "https://github.com/SeleniumHQ/selenium/")
+ (synopsis "Python bindings for Selenium")
+ (description "Selenium enables web browser automation.
+Selenium specifically provides infrastructure for the W3C WebDriver specification
+— a platform and language-neutral coding interface compatible with all
+major web browsers.")
+ (license license:asl2.0)))
+
+(define-public python-rapidjson
+ (package
+ (name "python-rapidjson")
+ (version "0.9.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "python-rapidjson" version))
+ (sha256
+ (base32
+ "18cl2dhx3gds5vg52jxmh9wjlbiy8dx06c3n482rfpdi9dzbv05d"))
+ (modules '((guix build utils)))
+ (snippet
+ '(begin (delete-file-recursively "rapidjson") #t))))
+ (build-system python-build-system)
+ (arguments
+ `(#:configure-flags
+ (list (string-append "--rj-include-dir="
+ (assoc-ref %build-inputs "rapidjson")
+ "/include/rapidjson"))
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'build
+ (lambda* (#:key inputs #:allow-other-keys)
+ (invoke "python" "setup.py" "build"
+ (string-append "--rj-include-dir="
+ (assoc-ref %build-inputs "rapidjson")
+ "/include/rapidjson"))))
+ (replace 'check
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (add-installed-pythonpath inputs outputs)
+ ;; Some tests are broken.
+ (delete-file "tests/test_base_types.py")
+ (delete-file "tests/test_validator.py")
+ (invoke "python" "-m" "pytest" "tests"))))))
+ (native-inputs
+ `(("rapidjson" ,rapidjson)
+ ("python-pytest" ,python-pytest)
+ ("python-pytz" ,python-pytz)))
+ (home-page "https://github.com/python-rapidjson/python-rapidjson")
+ (synopsis "Python wrapper around rapidjson")
+ (description "This package provides a python wrapper around rapidjson.")
+ (license license:expat)))
+
+(define-public python-venusian
+ (package
+ (name "python-venusian")
+ (version "3.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "venusian" version))
+ (sha256
+ (base32 "0f7f67dkgxxcjfhpdd5frb9pszkf04lyzzpn5069q0xi89r2p17n"))))
+ (build-system python-build-system)
+ (native-inputs
+ `(("python-pytest" ,python-pytest)
+ ("python-runner" ,python-pytest-runner)
+ ("python-pytest-cov" ,python-pytest-cov)))
+ (arguments '(#:test-target "pytest"))
+ (home-page "https://docs.pylonsproject.org/projects/venusian")
+ (synopsis "Library for defering decorator actions")
+ (description
+ "Venusian is a library which allows framework authors to defer decorator
+actions. Instead of taking actions when a function (or class) decorator is
+executed at import time, you can defer the action usually taken by the
+decorator until a separate scan phase.")
+ (license license:repoze)))
+
+(define-public python-zope-deprecation
+ (package
+ (name "python-zope-deprecation")
+ (version "4.4.0")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "zope.deprecation" version))
+ (sha256
+ (base32
+ "1pz2cv7gv9y1r3m0bdv7ks1alagmrn5msm5spwdzkb2by0w36i8d"))))
+ (build-system python-build-system)
+ (native-inputs `())
+ (propagated-inputs `())
+ (home-page "https://zopedeprecation.readthedocs.io/")
+ (synopsis "Function for marking deprecations")
+ (description "The @code{zope.deprecation} module provides a function for
+marking modules, classes, functions, methods and properties as deprecated,
+displaying warnings when usaged in application code.")
+ (license license:zpl2.1)))
+
+(define-public python-translationstring
+ (package
+ (name "python-translationstring")
+ (version "1.3")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "translationstring" version))
+ (sha256
+ (base32
+ "0bdpcnd9pv0131dl08h4zbcwmgc45lyvq3pa224xwan5b3x4rr2f"))))
+ (build-system python-build-system)
+ (home-page "http://docs.pylonsproject.org/projects/translationstring")
+ (synopsis "Internationalization tooling for the Pylons project")
+ (description "This package provides a library used by various Pylons
+project packages for internationalization (i18n) duties related to
+translation.")
+ (license license:repoze)))
+
+(define-public python-plaster
+ (package
+ (name "python-plaster")
+ (version "1.0")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "plaster" version))
+ (sha256
+ (base32
+ "1hy8k0nv2mxq94y5aysk6hjk9ryb4bsd13g83m60hcyzxz3wflc3"))))
+ (build-system python-build-system)
+ (native-inputs
+ `(("python-pytest" ,python-pytest)))
+ (home-page "https://docs.pylonsproject.org/projects/plaster/en/latest/")
+ (synopsis "Configuration loader for multiple config file formats")
+ (description
+ "Plaster is a loader interface around multiple config file formats. It
+exists to define a common API for applications to use when they wish to load
+configuration. The library itself does not aim to handle anything except a
+basic API that applications may use to find and load configuration settings.
+Any specific constraints should be implemented in a pluggable loader which can
+be registered via an entrypoint.")
+ (license license:repoze)))
+
+(define-public python-plaster-pastedeploy
+ (package
+ (name "python-plaster-pastedeploy")
+ (version "0.7")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "plaster_pastedeploy" version))
+ (sha256
+ (base32
+ "1zg7gcsvc1kzay1ry5p699rg2qavfsxqwl17mqxzr0gzw6j9679r"))))
+ (build-system python-build-system)
+ (native-inputs
+ `(("python-pytest" ,python-pytest)))
+ (propagated-inputs
+ `(("python-plaster" ,python-plaster)
+ ("python-pastedeploy" ,python-pastedeploy)))
+ (home-page "https://github.com/Pylons/plaster_pastedeploy")
+ (synopsis "Plugin for python-plaster adding PasteDeploy syntax")
+ (description
+ "This plugin for @code{python-plaster} adds support for PasteDeploy
+syntax, it provides a plaster @code{Loader} object that can parse ini files
+according to the standard set by PasteDeploy ")
+ (license license:expat)))
+
+(define-public python-hupper
+ (package
+ (name "python-hupper")
+ (version "1.10.2")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "hupper" version))
+ (sha256
+ (base32
+ "0am0p6g5cz6xmcaf04xq8q6dzdd9qz0phj6gcmpsckf2mcyza61q"))))
+ (build-system python-build-system)
+ (arguments '(#:test-target "pytest"))
+ (native-inputs
+ `(("python-pytest" ,python-pytest)
+ ("python-pytest-runner" ,python-pytest-runner)
+ ("python-watchdog" ,python-watchdog)
+ ("python-mock" ,python-mock)
+ ("python-pytest-cov" ,python-pytest-cov)))
+ (propagated-inputs
+ `(("python-pytz" ,python-pytz)))
+ (home-page "https://readthedocs.org/projects/hupper")
+ (synopsis "Integrated process monitor tracking changes to imported Python files")
+ (description
+ "Hupper is an integrated process monitor that will track changes to any
+imported Python files in sys.modules as well as custom paths. When files are
+changed the process is restarted.")
+ (license license:expat)))
+
+(define-public python-pyramid
+ (package
+ (name "python-pyramid")
+ (version "1.10.4")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "pyramid" version))
+ (sha256
+ (base32
+ "0rkxs1ajycg2zh1c94xlmls56mx5m161sn8112skj0amza6cn36q"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-hupper" ,python-hupper)
+ ("python-plaster-pastedeploy" ,python-plaster-pastedeploy)
+ ("python-translationstring" ,python-translationstring)
+ ("python-venusian" ,python-venusian)
+ ("python-webob" ,python-webob)
+ ("python-zope-deprecation" ,python-zope-deprecation)
+ ("python-zope-interface" ,python-zope-interface)
+ ("python-webtest" ,python-webtest)
+ ("python-zope-component" ,python-zope-component)
+ ("python-plaster" ,python-plaster)))
+ (home-page "https://trypyramid.com/")
+ (synopsis "Python web-framework suitable for small and large sites")
+ (description
+ "Pyramid makes it easy to write web applications. From minimal
+request/response web apps to larger, grown applications.")
+ (license license:repoze)))
+
+(define-public python-random-user-agent
+ (package
+ (name "python-random-user-agent")
+ (version "1.0.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "random_user_agent" version))
+ (sha256
+ (base32
+ "04nhzdh2ki7ybhjrmghxci6hcm6i03vvin2q2ynj87fbr1pa534g"))))
+ (build-system python-build-system)
+ (home-page "https://github.com/Luqman-Ud-Din/random_user_agent")
+ (synopsis "List of user agents")
+ (description
+ "This package provides a list of user agents, from a collection of more
+than 326,000 known user-agents. Users can pick a random one, or select one
+based on filters.")
+ (license license:expat)))
+
+(define-public python-flask-restx
+ (package
+ (name "python-flask-restx")
+ (version "0.2.0")
+ (source
+ ;; We fetch from the Git repo because there are no tests in the PyPI
+ ;; archive.
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/python-restx/flask-restx")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0xf2vkmdngp9cv9klznizai4byxjcf0iqh1pr4b83nann0jxqwy7"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-aniso8601" ,python-aniso8601)
+ ("python-flask" ,python-flask)
+ ("python-jsonschema" ,python-jsonschema)
+ ("python-pytz" ,python-pytz)))
+ (native-inputs
+ `(("python-blinker" ,python-blinker)
+ ("python-faker" ,python-faker)
+ ("python-pytest" ,python-pytest)
+ ("python-pytest-benchmark"
+ ,python-pytest-benchmark)
+ ("python-pytest-flask" ,python-pytest-flask)
+ ("python-pytest-mock" ,python-pytest-mock)))
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _
+ (invoke "pytest" "--benchmark-skip" "-k"
+ ;; Those tests need internet access
+ "not test_check and not test_valid_value_check"))))))
+ (home-page "https://github.com/python-restx/flask-restx")
+ (synopsis
+ "Framework for fast, easy and documented API development with Flask")
+ (description
+ "Flask-RESTX is an extension for Flask that adds support for quickly building
+REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
+ with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
+decorators and tools to describe your API and expose its documentation properly using
+Swagger.")
+ (license license:bsd-3)))
+
+(define-public python-manuel
+ (package
+ (name "python-manuel")
+ (version "1.10.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "manuel" version))
+ (sha256
+ (base32
+ "1bdzay7j70fly5fy6wbdi8fbrxjrrlxnxnw226rwry1c8a351rpy"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-six" ,python-six)))
+ (native-inputs
+ `(("python-zope-testing" ,python-zope-testing)))
+ (home-page "https://pypi.org/project/manuel/")
+ (synopsis "Build tested documentation")
+ (description
+ "Manuel lets you mix and match traditional doctests with custom test syntax.")
+ (license license:asl2.0)))
+
+(define-public python-persistent
+ (package
+ (name "python-persistent")
+ (version "4.6.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "persistent" version))
+ (sha256
+ (base32
+ "0imm9ji03lhkpcfmhid7x5209ix8g2rlgki9ik1qxks4b8sm8gzq"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-cffi" ,python-cffi)
+ ("python-zope-interface" ,python-zope-interface)))
+ (native-inputs
+ `(("python-manuel" ,python-manuel)
+ ("python-zope-testrunner" ,python-zope-testrunner)))
+ (home-page "https://github.com/zopefoundation/persistent/")
+ (synopsis "Translucent persistent objects")
+ (description "This package contains a generic persistence implementation for
+Python. It forms the core protocol for making objects interact
+\"transparently\" with a database such as the ZODB.")
+ (license license:zpl2.1)))
+
+(define-public python-btrees
+ (package
+ (name "python-btrees")
+ (version "4.7.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "BTrees" version))
+ (sha256
+ (base32
+ "0iiq0g9k1g6qgqq84q9h6639vlvzznk1rgdm0rfcnnqkbkmsbr3w"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-persistent" ,python-persistent)
+ ("python-zope-interface" ,python-zope-interface)))
+ (native-inputs
+ `(("python-persistent" ,python-persistent)
+ ("python-transaction" ,python-transaction)
+ ("python-zope-testrunner" ,python-zope-testrunner)))
+ (home-page "https://github.com/zopefoundation/BTrees")
+ (synopsis "Scalable persistent object containers")
+ (description
+ "This package contains a set of persistent object containers built around a
+modified BTree data structure. The trees are optimized for use inside ZODB's
+\"optimistic concurrency\" paradigm, and include explicit resolution of
+conflicts detected by that mechanism.")
+ (license license:zpl2.1)))
+
+(define-public python-transaction
+ (package
+ (name "python-transaction")
+ (version "3.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "transaction" version))
+ (sha256
+ (base32
+ "0bdaks31bgfh78wnj3sij24bfysmqk25crsis6amz8kzrc0d82iv"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-zope-interface" ,python-zope-interface)))
+ (native-inputs
+ `(("python-coverage" ,python-coverage)
+ ("python-mock" ,python-mock)
+ ("python-nose" ,python-nose)))
+ (home-page "https://github.com/zopefoundation/transaction")
+ (synopsis "Transaction management for Python")
+ (description "This package contains a generic transaction implementation
+for Python. It is mainly used by the ZODB.")
+ (license license:zpl2.1)))