{"id":18863061,"url":"https://github.com/ramonhagenaars/trange","last_synced_at":"2025-04-14T13:06:35.517Z","repository":{"id":66162940,"uuid":"161943399","full_name":"ramonhagenaars/trange","owner":"ramonhagenaars","description":"A lightweight Python lib for defining time ranges","archived":false,"fork":false,"pushed_at":"2019-04-29T11:57:23.000Z","size":24,"stargazers_count":3,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-28T02:11:12.990Z","etag":null,"topics":["python","python-library"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ramonhagenaars.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2018-12-15T21:00:54.000Z","updated_at":"2019-04-29T11:57:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"a301ee43-c068-4ec9-8b8d-ae7fdf332575","html_url":"https://github.com/ramonhagenaars/trange","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramonhagenaars%2Ftrange","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramonhagenaars%2Ftrange/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramonhagenaars%2Ftrange/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramonhagenaars%2Ftrange/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ramonhagenaars","download_url":"https://codeload.github.com/ramonhagenaars/trange/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248886314,"owners_count":21177643,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["python","python-library"],"created_at":"2024-11-08T04:36:33.303Z","updated_at":"2025-04-14T13:06:35.277Z","avatar_url":"https://github.com/ramonhagenaars.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"|PyPI version| |Build Status|\n\ntrange\n======\n\nA *very lightweight* Python lib for ``datetime`` ranges.\n\n\nInstallation\n''''''''''''\n\n::\n\n   pip install trange\n\nUsage\n'''''\n\n.. code:: python\n\n   from trange import trange\n\n   trange(datetime_1200, datetime_1300)  # Two datetime objects\n\n\nOnce created, you can iterate through a ``TimeRange`` using a generator:\n\n.. code:: python\n\n   for dt in trange1.step(minutes=15):\n       print('This is printed every 15 minutes within trange1.')\n\n\nThere are many other ways to create a ``TimeRange`` instance:\n\n.. code:: python\n\n   trange1 = trange(datetime_1200, timedelta(hours=1))  # A datetime and a timedelta\n   trange2 = trange(datetime_1200)                      # A TimeRange that does not end\n   trange3 = trange()                                   # A TimeRange from now to eternity\n   trange4 = trange(timedelta(hours=1))                 # A TimeRange that starts in 1 hour to eternity\n   trange5 = trange(datetime_1300, datetime_1200)       # A backward TimeRange\n   trange6 = trange(end=datetime_1200)                  # A backward TimeRange until datetime_1200\n\n\nYou can even use two ``timedelta`` instances:\n\n.. code:: python\n\n   # This range will start in 1 hour and end 1 hour later than start (so in 2 hours):\n   trange6 = trange(timedelta(hours=1), timedelta(hours=1)\n\n\nIterating through a backward ``TimeRange`` instance works as well:\n\n.. code:: python\n\n   for dt in trange5.step(minutes=15):\n       print(\"We're going back in time with steps of 15 minutes.\")\n\n\nYou can check if some ``datetime`` is withing the range:\n\n.. code:: python\n\n   if datetime_1230 in trange1:\n       print('Yes, it is in range!')\n\nDetailed information\n''''''''''''''''''''\nYou can create a ``TimeRange`` by providing two ``datetime`` instances:\n\n::\n\n    trange(datetime_1230, datetime_1415)\n\n                    |-------------------------\u003e\u003e|\n    __.______.______.______.______.______.______.______.______.______.__\n    12:00  12:15  12:30  12:45  13:30  14:00  14:15  14:30  14:45  15:00\n\n|\n|\n\nIf the date and time of the first ``datetime`` is later than the second, a ``BackwardTimeRange`` is returned:\n\n::\n\n    trange(datetime_1415, datetime_1230)\n\n                    |\u003c\u003c=========================|\n    __.______.______.______.______.______.______.______.______.______.__\n    12:00  12:15  12:30  12:45  13:30  14:00  14:15  14:30  14:45  15:00\n\n|\n|\n\nThe second parameter can be omitted, in which case an infinite ``TimeRange`` instance is created:\n\n::\n\n    trange(datetime_1230)\n\n                    |=============================================== ...\n    __.______.______.______.______.______.______.______.______.______.__\n    12:00  12:15  12:30  12:45  13:30  14:00  14:15  14:30  14:45  15:00\n\n|\n|\n\nIf only ``end`` is provided, a ``TimeRange`` is created that defines a range 'until now'. This is a special case as a ``BackwardTimeRange`` is created that points infinitely back in history, starting at ``end``:\n\n::\n\n    trange(end=datetime_1400)\n\n    ... =================================|\n    __.______.______.______.______.______.______.______.______.______.__\n    12:00  12:15  12:30  12:45  13:30  14:00  14:15  14:30  14:45  15:00\n\n\n\nRecent updates\n''''''''''''''\n\n0.1.1\n+++++\n- Bugfix: contains (``in``) operator failed with infinite ``tranges``.\n\n0.1.0\n+++++\n- Initial version\n\n\n.. |PyPI version| image:: https://badge.fury.io/py/trange.svg\n   :target: https://badge.fury.io/py/trange\n.. |Build Status| image:: https://travis-ci.com/ramonhagenaars/trange.svg?branch=master\n   :target: https://travis-ci.com/ramonhagenaars/trange\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framonhagenaars%2Ftrange","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Framonhagenaars%2Ftrange","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framonhagenaars%2Ftrange/lists"}