| 1 | ;;; GNU Guix --- Functional package management for GNU |
| 2 | ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org> |
| 3 | ;;; Copyright © 2013, 2017, 2020 Ludovic Courtès <ludo@gnu.org> |
| 4 | ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr> |
| 5 | ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il> |
| 6 | ;;; Copyright © 2015, 2017 Leo Famulari <leo@famulari.name> |
| 7 | ;;; Copyright © 2015, 2017 Cyril Roelandt <tipecaml@gmail.com> |
| 8 | ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com> |
| 9 | ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com> |
| 10 | ;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org> |
| 11 | ;;; Copyright © 2016, 2020 Marius Bakke <mbakke@fastmail.com> |
| 12 | ;;; Copyright © 2016, 2017, 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr> |
| 13 | ;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com> |
| 14 | ;;; Copyright © 2017 Nikita <nikita@n0.is> |
| 15 | ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu> |
| 16 | ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com> |
| 17 | ;;; Copyright © 2019 Kyle Meyer <kyle@kyleam.com> |
| 18 | ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com> |
| 19 | ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org> |
| 20 | ;;; |
| 21 | ;;; This file is part of GNU Guix. |
| 22 | ;;; |
| 23 | ;;; GNU Guix is free software; you can redistribute it and/or modify it |
| 24 | ;;; under the terms of the GNU General Public License as published by |
| 25 | ;;; the Free Software Foundation; either version 3 of the License, or (at |
| 26 | ;;; your option) any later version. |
| 27 | ;;; |
| 28 | ;;; GNU Guix is distributed in the hope that it will be useful, but |
| 29 | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of |
| 30 | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 31 | ;;; GNU General Public License for more details. |
| 32 | ;;; |
| 33 | ;;; You should have received a copy of the GNU General Public License |
| 34 | ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. |
| 35 | |
| 36 | (define-module (gnu packages time) |
| 37 | #:use-module (guix licenses) |
| 38 | #:use-module (guix packages) |
| 39 | #:use-module (guix download) |
| 40 | #:use-module (guix git-download) |
| 41 | #:use-module (guix build-system gnu) |
| 42 | #:use-module (guix build-system python) |
| 43 | #:use-module (gnu packages) |
| 44 | #:use-module (gnu packages check) |
| 45 | #:use-module (gnu packages compression) |
| 46 | #:use-module (gnu packages perl) |
| 47 | #:use-module (gnu packages python) |
| 48 | #:use-module (gnu packages python-xyz)) |
| 49 | |
| 50 | (define-public time |
| 51 | (package |
| 52 | (name "time") |
| 53 | (version "1.9") |
| 54 | (source |
| 55 | (origin |
| 56 | (method url-fetch) |
| 57 | (uri (string-append "mirror://gnu/time/time-" |
| 58 | version ".tar.gz")) |
| 59 | (sha256 |
| 60 | (base32 |
| 61 | "07jj7cz6lc13iqrpgn81ivqh8rkm73p4rnivwgrrshk23v4g1b7v")))) |
| 62 | (build-system gnu-build-system) |
| 63 | (home-page "https://www.gnu.org/software/time/") |
| 64 | (synopsis "Run a command, then display its resource usage") |
| 65 | (description |
| 66 | "Time is a command that displays information about the resources that a |
| 67 | program uses. The display output of the program can be customized or saved |
| 68 | to a file.") |
| 69 | (license gpl3+))) |
| 70 | |
| 71 | (define-public python-pytimeparse |
| 72 | (package |
| 73 | (name "python-pytimeparse") |
| 74 | (version "1.1.8") |
| 75 | (source |
| 76 | (origin |
| 77 | (method url-fetch) |
| 78 | (uri (pypi-uri "pytimeparse" version)) |
| 79 | (sha256 |
| 80 | (base32 |
| 81 | "02kaambsgpjx3zi42j6l11rwms2p35b9hsk4f3kdf979gd3kcqg8")))) |
| 82 | (native-inputs |
| 83 | `(("python-nose" ,python-nose))) |
| 84 | (build-system python-build-system) |
| 85 | (home-page "https://github.com/wroberts/pytimeparse") |
| 86 | (synopsis "Time expression parser") |
| 87 | (description "This small Python module parses various kinds of time |
| 88 | expressions.") |
| 89 | (license expat))) |
| 90 | |
| 91 | (define-public python-pytzdata |
| 92 | (package |
| 93 | (name "python-pytzdata") |
| 94 | (version "2019.3") |
| 95 | (source |
| 96 | (origin |
| 97 | (method url-fetch) |
| 98 | (uri (pypi-uri "pytzdata" version)) |
| 99 | (sha256 |
| 100 | (base32 |
| 101 | "0ppfc6kz4p41mxyqxq1g1zp6gvns99g6b344qj6ih0x9vxy6zh7s")))) |
| 102 | (build-system python-build-system) |
| 103 | ;; XXX: The PyPI distribution contains no tests, and the upstream |
| 104 | ;; repository lacks a setup.py! How to build from git? |
| 105 | (arguments '(#:tests? #f)) |
| 106 | (propagated-inputs |
| 107 | `(("python-cleo" ,python-cleo))) |
| 108 | (home-page "https://github.com/sdispater/pytzdata") |
| 109 | (synopsis "Timezone database for Python") |
| 110 | (description |
| 111 | "This library provides a timezone database for Python.") |
| 112 | (license expat))) |
| 113 | |
| 114 | (define-public python2-tzdata |
| 115 | (package-with-python2 python-pytzdata)) |
| 116 | |
| 117 | (define-public python-pytz |
| 118 | (package |
| 119 | (name "python-pytz") |
| 120 | (version "2019.1") |
| 121 | (source |
| 122 | (origin |
| 123 | (method url-fetch) |
| 124 | (uri (pypi-uri "pytz" version)) |
| 125 | (sha256 |
| 126 | (base32 |
| 127 | "0hg1r2c41gnmljdsdmdgy6kb1zkfmxsf49imd96g8znp4cyxsiyp")))) |
| 128 | (build-system python-build-system) |
| 129 | (home-page "http://pythonhosted.org/pytz") |
| 130 | (synopsis "Python timezone library") |
| 131 | (description "This library brings the Olson tz database into Python. It |
| 132 | allows accurate and cross platform timezone calculations using Python 2.4 or |
| 133 | higher. It also solves the issue of ambiguous times at the end of daylight |
| 134 | saving time. Almost all of the Olson timezones are supported.") |
| 135 | (license expat))) |
| 136 | |
| 137 | (define-public python2-pytz |
| 138 | (package-with-python2 python-pytz)) |
| 139 | |
| 140 | (define-public python-pendulum |
| 141 | (package |
| 142 | (name "python-pendulum") |
| 143 | (version "2.1.1") |
| 144 | (source |
| 145 | (origin |
| 146 | (method url-fetch) |
| 147 | (uri (pypi-uri "pendulum" version)) |
| 148 | (sha256 |
| 149 | (base32 "1w4an6ki3l1pc36m2f2xiglaw5czmj9b4imbigln9z6mlnkkjxyr")))) |
| 150 | (build-system python-build-system) |
| 151 | ;; XXX: The PyPI distribution lacks tests, and the upstream repository |
| 152 | ;; lacks a setup.py! |
| 153 | (arguments '(#:tests? #f)) |
| 154 | (propagated-inputs |
| 155 | `(("python-dateutil" ,python-dateutil) |
| 156 | ("python-pytzdata" ,python-pytzdata))) |
| 157 | (home-page "https://github.com/sdispater/pendulum") |
| 158 | (synopsis "Alternate API for Python datetimes") |
| 159 | (description "Pendulum is a drop-in replacement for the standard |
| 160 | @{datetime} class, providing an alternative API. As it inherits from the |
| 161 | standard @code{datetime} all @code{datetime} instances can be replaced by |
| 162 | Pendulum instances.") |
| 163 | (license expat))) |
| 164 | |
| 165 | (define-public python2-pendulum |
| 166 | (package-with-python2 python-pendulum)) |
| 167 | |
| 168 | (define-public python-dateutil |
| 169 | (package |
| 170 | (name "python-dateutil") |
| 171 | (version "2.8.1") |
| 172 | (source |
| 173 | (origin |
| 174 | (method url-fetch) |
| 175 | (uri (pypi-uri "python-dateutil" version)) |
| 176 | (sha256 |
| 177 | (base32 |
| 178 | "0g42w7k5007iv9dam6gnja2ry8ydwirh99mgdll35s12pyfzxsvk")))) |
| 179 | (build-system python-build-system) |
| 180 | (arguments |
| 181 | `(#:phases (modify-phases %standard-phases |
| 182 | (replace 'check |
| 183 | (lambda _ |
| 184 | ;; Delete tests that depend on "freezegun" to avoid a |
| 185 | ;; circular dependency. |
| 186 | (delete-file "dateutil/test/test_utils.py") |
| 187 | (delete-file "dateutil/test/test_rrule.py") |
| 188 | |
| 189 | ;; XXX: Fails to get timezone from /etc/localtime. |
| 190 | (delete-file "dateutil/test/test_tz.py") |
| 191 | |
| 192 | (invoke "pytest" "-vv")))))) |
| 193 | (native-inputs |
| 194 | `(("python-pytest" ,python-pytest) |
| 195 | ("python-pytest-cov" ,python-pytest-cov) |
| 196 | ("python-setuptools-scm" ,python-setuptools-scm))) |
| 197 | (propagated-inputs |
| 198 | `(("python-six" ,python-six))) |
| 199 | (home-page "https://dateutil.readthedocs.io/en/stable/") |
| 200 | (synopsis "Extensions to the standard datetime module") |
| 201 | (description |
| 202 | "The dateutil module provides powerful extensions to the standard |
| 203 | datetime module, available in Python 2.3+.") |
| 204 | ;; The license was changed from the three-clause BSD license to a dual |
| 205 | ;; Apache 2.0/BSD-3 variant at 2017-12-01. Some code is only available as |
| 206 | ;; BSD-3 still; but all new code is dual licensed (the user can choose). |
| 207 | (license (list bsd-3 asl2.0)))) |
| 208 | |
| 209 | (define-public python2-dateutil |
| 210 | (package-with-python2 python-dateutil)) |
| 211 | |
| 212 | (define-public python-parsedatetime |
| 213 | (package |
| 214 | (name "python-parsedatetime") |
| 215 | (version "2.4") |
| 216 | (source |
| 217 | (origin |
| 218 | (method url-fetch) |
| 219 | (uri (pypi-uri "parsedatetime" version)) |
| 220 | (sha256 |
| 221 | (base32 |
| 222 | "0jxqkjks7z9dn222cqgvskp4wr6d92aglinxq7pd2w4mzdc7r09x")))) |
| 223 | (build-system python-build-system) |
| 224 | (native-inputs |
| 225 | `(("python-nose" ,python-nose) |
| 226 | ("python-pyicu" ,python-pyicu) |
| 227 | ("python-pytest" ,python-pytest) |
| 228 | ("python-pytest-runner" ,python-pytest-runner))) |
| 229 | (propagated-inputs |
| 230 | `(("python-future" ,python-future))) |
| 231 | (home-page "https://github.com/bear/parsedatetime/") |
| 232 | (synopsis "Parse human-readable date/time text") |
| 233 | (description |
| 234 | "Parse human-readable date/time text.") |
| 235 | (license asl2.0))) |
| 236 | |
| 237 | (define-public python2-parsedatetime |
| 238 | (package-with-python2 python-parsedatetime)) |
| 239 | |
| 240 | (define-public python-ciso8601 |
| 241 | (package |
| 242 | (name "python-ciso8601") |
| 243 | (version "2.1.3") |
| 244 | (source |
| 245 | (origin |
| 246 | (method git-fetch) |
| 247 | ;; The PyPi distribution doesn't include the tests. |
| 248 | (uri (git-reference |
| 249 | (url "https://github.com/closeio/ciso8601") |
| 250 | (commit (string-append "v" version)))) |
| 251 | (file-name (git-file-name name version)) |
| 252 | (sha256 |
| 253 | (base32 |
| 254 | "0g1aiyc1ayh0rnibyy416m5mmck38ksgdm3jsy0z3rxgmgb24951")))) |
| 255 | (build-system python-build-system) |
| 256 | ;; Pytz should only be required for Python 2, but the test suite fails |
| 257 | ;; without it. |
| 258 | (native-inputs |
| 259 | `(("python-pytz" ,python-pytz))) |
| 260 | (home-page "https://github.com/closeio/ciso8601") |
| 261 | (synopsis |
| 262 | "Fast ISO8601 date time parser") |
| 263 | (description |
| 264 | "The package ciso8601 converts ISO 8601 or RFC 3339 date time strings into |
| 265 | Python datetime objects.") |
| 266 | (license expat))) |
| 267 | |
| 268 | (define-public python-tzlocal |
| 269 | (package |
| 270 | (name "python-tzlocal") |
| 271 | (version "1.5.1") |
| 272 | (source |
| 273 | (origin |
| 274 | (method url-fetch) |
| 275 | (uri (pypi-uri "tzlocal" version)) |
| 276 | (sha256 |
| 277 | (base32 |
| 278 | "0kiciwiqx0bv0fbc913idxibc4ygg4cb7f8rcpd9ij2shi4bigjf")))) |
| 279 | (build-system python-build-system) |
| 280 | (arguments |
| 281 | `(#:phases |
| 282 | (modify-phases %standard-phases |
| 283 | (add-before 'check 'fix-symlink-test |
| 284 | ;; see: https://github.com/regebro/tzlocal/issues/53 |
| 285 | (lambda _ |
| 286 | (delete-file "tzlocal/test_data/symlink_localtime/etc/localtime") |
| 287 | (symlink "../usr/share/zoneinfo/Africa/Harare" |
| 288 | "tzlocal/test_data/symlink_localtime/etc/localtime") |
| 289 | #t))))) |
| 290 | (propagated-inputs |
| 291 | `(("python-pytz" ,python-pytz))) |
| 292 | (native-inputs |
| 293 | `(("python-mock" ,python-mock))) |
| 294 | (home-page "https://github.com/regebro/tzlocal") |
| 295 | (synopsis "Local timezone information for Python") |
| 296 | (description |
| 297 | "Tzlocal returns a tzinfo object with the local timezone information. |
| 298 | This module attempts to fix a glaring hole in pytz, that there is no way to |
| 299 | get the local timezone information, unless you know the zoneinfo name, and |
| 300 | under several distributions that's hard or impossible to figure out.") |
| 301 | (license expat))) |
| 302 | |
| 303 | (define-public python-isodate |
| 304 | (package |
| 305 | (name "python-isodate") |
| 306 | (version "0.6.0") |
| 307 | (source |
| 308 | (origin |
| 309 | (method url-fetch) |
| 310 | (uri (pypi-uri "isodate" version)) |
| 311 | (sha256 |
| 312 | (base32 |
| 313 | "1n7jkz68kk5pwni540pr5zdh99bf6ywydk1p5pdrqisrawylldif")))) |
| 314 | (build-system python-build-system) |
| 315 | (native-inputs |
| 316 | `(("python-six" ,python-six))) |
| 317 | (home-page "https://github.com/gweis/isodate/") |
| 318 | (synopsis "Python date parser and formatter") |
| 319 | (description |
| 320 | "Python-isodate is a python module for parsing and formatting |
| 321 | ISO 8601 dates, time and duration.") |
| 322 | (license bsd-3))) |
| 323 | |
| 324 | (define-public python2-isodate |
| 325 | (package-with-python2 python-isodate)) |
| 326 | |
| 327 | (define-public python-iso8601 |
| 328 | (package |
| 329 | (name "python-iso8601") |
| 330 | (version "0.1.12") |
| 331 | (source |
| 332 | (origin |
| 333 | (method url-fetch) |
| 334 | (uri (pypi-uri "iso8601" version)) |
| 335 | (sha256 |
| 336 | (base32 |
| 337 | "10nyvvnrhw2w3p09v1ica4lgj6f4g9j3kkfx17qmraiq3w7b5i29")))) |
| 338 | (build-system python-build-system) |
| 339 | (native-inputs |
| 340 | `(("python-pytest" ,python-pytest))) |
| 341 | (home-page "https://bitbucket.org/micktwomey/pyiso8601") |
| 342 | (synopsis "Module to parse ISO 8601 dates") |
| 343 | (description |
| 344 | "This module parses the most common forms of ISO 8601 date strings (e.g. |
| 345 | @code{2007-01-14T20:34:22+00:00}) into @code{datetime} objects.") |
| 346 | (license expat))) |
| 347 | |
| 348 | (define-public python2-iso8601 |
| 349 | (package-with-python2 python-iso8601)) |
| 350 | |
| 351 | (define-public python-monotonic |
| 352 | (package |
| 353 | (name "python-monotonic") |
| 354 | (version "1.5") |
| 355 | (source |
| 356 | (origin |
| 357 | (method url-fetch) |
| 358 | (uri (pypi-uri "monotonic" version)) |
| 359 | (sha256 |
| 360 | (base32 |
| 361 | "1c6z46yb600klbfhqadyl7vq0jdjdxkm72k43ra3iw3d0xakv593")))) |
| 362 | (build-system python-build-system) |
| 363 | (arguments '(#:tests? #f)) ; no tests |
| 364 | (home-page "https://github.com/atdt/monotonic") |
| 365 | (synopsis "Implementation of time.monotonic() for Python 2 & < 3.3") |
| 366 | (description |
| 367 | "This module provides a @code{monotonic()} function which returns the |
| 368 | value (in fractional seconds) of a clock which never goes backwards.") |
| 369 | (license asl2.0))) |
| 370 | |
| 371 | (define-public python2-monotonic |
| 372 | (package-with-python2 python-monotonic)) |
| 373 | |
| 374 | (define-public python-pyrfc3339 |
| 375 | (package |
| 376 | (name "python-pyrfc3339") |
| 377 | (version "1.1") |
| 378 | (source |
| 379 | (origin |
| 380 | (method url-fetch) |
| 381 | (uri (pypi-uri "pyRFC3339" version)) |
| 382 | (sha256 |
| 383 | (base32 |
| 384 | "06jv7ar7lpvvk0dixzwdr3wgm0g1lipxs429s2z7knwwa7hwpf41")))) |
| 385 | (build-system python-build-system) |
| 386 | (propagated-inputs |
| 387 | `(("python-pytz" ,python-pytz))) |
| 388 | (native-inputs |
| 389 | `(("python-nose" ,python-nose))) |
| 390 | (home-page "https://github.com/kurtraschke/pyRFC3339") |
| 391 | (synopsis "Python timestamp library") |
| 392 | (description "Python library for generating and parsing RFC 3339-compliant |
| 393 | timestamps.") |
| 394 | (license expat))) |
| 395 | |
| 396 | (define-public python2-pyrfc3339 |
| 397 | (package-with-python2 python-pyrfc3339)) |
| 398 | |
| 399 | (define-public python-arrow |
| 400 | (package |
| 401 | (name "python-arrow") |
| 402 | (version "0.10.0") |
| 403 | (source (origin |
| 404 | (method url-fetch) |
| 405 | (uri (pypi-uri "arrow" version)) |
| 406 | (sha256 |
| 407 | (base32 |
| 408 | "08n7q2l69hlainds1byd4lxhwrq7zsw7s640zkqc3bs5jkq0cnc0")))) |
| 409 | (build-system python-build-system) |
| 410 | (native-inputs |
| 411 | `(;; For testing |
| 412 | ("python-chai" ,python-chai) |
| 413 | ("python-simplejson" ,python-simplejson))) |
| 414 | (propagated-inputs |
| 415 | `(("python-dateutil" ,python-dateutil))) |
| 416 | (home-page "https://github.com/crsmithdev/arrow/") |
| 417 | (synopsis "Dates and times for Python") |
| 418 | (description |
| 419 | "Arrow is a Python library to creating, manipulating, formatting and |
| 420 | converting dates, times, and timestamps. It implements and updates the |
| 421 | datetime type.") |
| 422 | (license asl2.0))) |
| 423 | |
| 424 | (define-public python2-arrow |
| 425 | (package-with-python2 python-arrow)) |
| 426 | |
| 427 | (define-public python-aniso8601 |
| 428 | (package |
| 429 | (name "python-aniso8601") |
| 430 | (version "1.3.0") |
| 431 | (source |
| 432 | (origin |
| 433 | (method url-fetch) |
| 434 | (uri (pypi-uri "aniso8601" version)) |
| 435 | (sha256 |
| 436 | (base32 |
| 437 | "1waj54iv3n3lw1fapbz8a93yjgrybgpc86wif5baxdh1arpj9df3")))) |
| 438 | (build-system python-build-system) |
| 439 | (propagated-inputs |
| 440 | `(("python-dateutil" ,python-dateutil))) |
| 441 | (home-page "https://bitbucket.org/nielsenb/aniso8601") |
| 442 | (synopsis "Python library for parsing ISO 8601 strings") |
| 443 | (description |
| 444 | "This package contains a library for parsing ISO 8601 datetime strings.") |
| 445 | (license bsd-3))) |
| 446 | |
| 447 | (define-public python2-aniso8601 |
| 448 | (package-with-python2 python-aniso8601)) |
| 449 | |
| 450 | (define-public datefudge |
| 451 | (package |
| 452 | (name "datefudge") |
| 453 | (version "1.23") |
| 454 | (source (origin |
| 455 | ;; Source code is available from |
| 456 | ;; <https://salsa.debian.org/debian/datefudge.git>. However, |
| 457 | ;; for bootstrapping reasons, we do not rely on 'git-fetch' here |
| 458 | ;; (since Git -> GnuTLS -> datefudge). |
| 459 | (method url-fetch) |
| 460 | (uri (string-append |
| 461 | "mirror://debian/pool/main/d/datefudge/datefudge_" |
| 462 | version ".tar.xz")) |
| 463 | (sha256 |
| 464 | (base32 |
| 465 | "0ifnlb0mc8qc2kb5042pbz0ns6rwcb7201di8wyrsphl0yhnhxiv")) |
| 466 | (patches (search-patches "datefudge-gettimeofday.patch")))) |
| 467 | (build-system gnu-build-system) |
| 468 | (arguments |
| 469 | `(#:test-target "test" |
| 470 | #:make-flags (list "CC=gcc" |
| 471 | (string-append "prefix=" (assoc-ref %outputs "out"))) |
| 472 | #:phases |
| 473 | (modify-phases %standard-phases |
| 474 | (add-after 'unpack 'patch-makefile |
| 475 | (lambda _ |
| 476 | (substitute* "Makefile" |
| 477 | ((" -o root -g root") "") |
| 478 | (("VERSION := \\$\\(shell dpkg-parsechangelog .*") |
| 479 | (string-append "VERSION = " ,version))) |
| 480 | #t)) |
| 481 | (delete 'configure)))) |
| 482 | (native-inputs |
| 483 | `(("perl" ,perl))) |
| 484 | (home-page "https://salsa.debian.org/debian/datefudge") |
| 485 | (synopsis "Pretend the system date is different") |
| 486 | (description |
| 487 | "Utility that fakes the system time by pre-loading a small library that |
| 488 | modifies the @code{time}, @code{gettimeofday} and @code{clock_gettime} system |
| 489 | calls.") |
| 490 | (license gpl2))) |