跳转到主要内容

对Python的持续集支持

项目描述

Spans

Test status Test coverage Documentation status PyPI version status Python version MIT License

Spans是PostgreSQL的范围类型的纯Python实现。范围类型在处理任何类型的区间时都非常方便。每次当你发现自己在使用date_start和date_end时,可能你真正需要的是区间。

自2013年8月30日首次发布以来,Spans已成功用于生产。

安装

Spans存在于PyPI上。

$ pip install Spans

文档托管在Read the Docs上。

示例

想象你正在构建一个日历,并想显示与当前月份重叠的所有周。通常你不得不做一些日期技巧才能实现这一点,因为月份的边界可能是任何一周中的某一天。使用Spans的集合操作和快捷方式,这个问题变得轻而易举。

我们首先导入datedaterange

>>> from datetime import date
>>> from spans import daterange

使用daterange.from_month我们可以获取表示2000年1月的范围

>>> month = daterange.from_month(2000, 1)
>>> month
daterange(datetime.date(2000, 1, 1), datetime.date(2000, 2, 1))

现在我们可以计算月份的第一天和最后一天的周范围

>>> start_week = daterange.from_date(month.lower, period="week")
>>> end_week = daterange.from_date(month.last, period="week")
>>> start_week
daterange(datetime.date(1999, 12, 27), datetime.date(2000, 1, 3))
>>> end_week
daterange(datetime.date(2000, 1, 31), datetime.date(2000, 2, 7))

使用并集我们可以表达日历视图

>>> start_week.union(month).union(end_week)
daterange(datetime.date(1999, 12, 27), datetime.date(2000, 2, 7))

你想了解更多吗?请访问文档

与Psycopg2一起使用

要使用这些范围类型与Psycopg2一起,需要使用PsycoSpans

动机

在我的一个项目中,我开始使用PostgreSQL的tsrange类型,并需要Python中的等效类型。这些范围类型尽可能地模仿PostgreSQL的行为。任何与之相悖的行为都被视为错误,并应该被报告。

贡献

我感激所有我能得到的帮助!以下是一些需要考虑的事项

  • 如果是简单的修复,例如文档或微小的错误修复,请提交一个问题或发送一个拉取请求。确保只修改与问题相关的行。我不会接受仅仅将代码格式化为PEP8兼容性的拉取请求。对我来说,仓库的历史更加重要。

  • 如果是功能请求或非微小的错误,请首先提交一个问题以讨论此事。如果好的工作因为拉取请求不符合本项目的范围而浪费,那就太可惜了。

拉取请求会在变更日志中记录,该日志显示在PyPI上,并在Read the Docs的文档中。

变更日志

版本号结构如下:<major>.<minor>.<bugfix>。第一个0.1发布没有正确遵守此结构。除非明确说明,否则变更由Andreas Runfalk完成。

版本 1.1.1

发布于2021年3月21日

  • 当开始和结束相同,并且任一边界是排他性的时,将范围规范化为空(错误 #18lgharibashvili

版本 1.1.0

发布于2019年6月2日

此版本更改了许多内部实现细节,这些细节应该可以防止未来的方法无法正确处理无界范围。

  • 添加验证以确保无界范围从不包括在内

  • 更改范围__repr__以使其更类似于正确的Python语法。旧表示看起来像是错配的括号。例如,floatrange((,10.0])变为floatrange(upper=10.0, upper_inc=True)

  • 停止支持Python 3.3,因为其已停用近两年。它可能仍然可以工作,但不再进行测试

  • 修复了空范围集的序列化问题(错误 #14

  • 修复了union()在处理无界范围时的不正确行为

  • 修复了下限无界范围被错误地设置为下限包含的问题

  • 修复了startswith()endsbefore()未处理空范围的问题

版本 1.0.2

发布于2019年2月22日

版本 1.0.1

发布于2018年1月31日

  • 修复了PartialOrderingMixin未使用__slots__错误 #10

版本 1.0.0

发布于2017年6月8日

  • 在存在类型不匹配的情况下添加了NotImplemented用于<<>>运算符

  • 添加了|运算符用于Range的并集,并为RangeSet添加了NotImplemented支持

  • 添加了&运算符用于Range的交集,并为RangeSet添加了NotImplemented支持

  • 增加了用于 Range 差异的 - 运算符,并支持 RangeSet

  • DiscreteRange 添加了 reversed() 迭代器支持

  • 修复了与空范围重叠时错误返回 True 的问题 (问题 #7)

  • 修复了在无界范围上对标量使用 contains() 的问题

  • 修复了 right_of() 的类型检查

  • 修复了 contains() 的类型检查

  • 修复了 union() 的类型检查

  • 修复了 intersection() 的类型检查

  • 修复了 difference() 的类型检查

  • 修复了 DiscreteRange 不支持无限迭代器的问题

版本 0.5.0

发布于 2017 年 4 月 16 日

这次发布是为稳定版 1.0 的发布做准备。

  • 修复了与空或无界范围一起使用时比较运算符的问题。之前这会导致抛出异常。范围现在部分有序而不是完全有序

  • 增加了更多的单元测试

  • 将类重命名为符合 PEP8 规范。这不适用于遵循 PEP8 的内置类的类。

  • 重构了 left_of()

  • 重构了 overlap()

  • 重构了 union()

版本 0.4.0

发布于 2017 年 3 月 20 日

由于上传错误,这次发布在 PyPI 上被称为 0.4.1。

  • from_date() 添加了新的参数,以处理不同类型的日期区间。该参数接受 "day"(默认)、"week"(ISO 周)、"american_week"(从周日开始)、"month""quarter""year" 的周期。

  • daterange 添加了新的方法,用于处理不同类型的日期区间:from_week()from_month()from_quarter()from_year()

  • 添加了一个新的类 PeriodRange,用于处理类似周、月、季度或年的周期。它继承自 daterange 并知道其周期类型。它允许执行诸如获取前一周或下一周等操作。

  • 修复了 daterange 不接受 date 的子类的问题 (问题 #5)

  • 修复了一些损坏的 doctests

  • 将单元测试移动到 pytest

  • 移除了 Tox 配置

  • 较小的文档调整

版本 0.3.0

发布于 2016 年 8 月 26 日

  • __iter__() 添加了文档

  • 修复了多个范围集交集不正确的问题 (问题 #3)

  • 修复了当 RangeSet 为空时迭代返回空范围的问题 (问题 #4)

版本 0.2.1

发布于 2016 年 6 月 27 日

  • 修复了 RangeSet 在与不是 RangeSet 子类的类比较时不返回 NotImplemented 的问题,pull request #2 (Michael Krahe)

  • setup.py中更新了许可证,以遵循PyPA的建议

版本0.2.0

发布于2015年12月22日

  • 为范围集添加了__len__()Michael Krahe

  • 为范围集添加了contains()Michael Krahe

  • 为所有方法添加了Sphinx风格的文档字符串

  • 添加了适当的Sphinx文档

  • 为未覆盖的部分添加了单元测试,主要是错误检查

  • wheel与源分发一起添加到PyPI

  • 修复了比较不同类型范围时可能导致无限循环的潜在错误

  • 更改了范围集元类的实现,以允许更多自定义范围集的混入

版本0.1.4

发布于2015年5月15日

  • DiscreteRange添加了.last属性

  • daterange添加了from_date()辅助函数

  • 增加了更多的单元测试

  • 改进了pickle实现

  • 为了防止在daterange中允许使用datetime,对日期范围进行了更严格的数据类型检查

版本0.1.3

发布于2015年2月27日

  • 某些范围类型添加了offset()

  • 某些范围集类型添加了offset()

  • 对范围边界进行了合理性检查

  • 修复了错误的__slots__使用,导致大多数范围未使用__slots__

  • 修复了范围和范围集的pickle操作

  • 通过使用元类MetaRangeSet简化了新范围集的创建

版本0.1.2

发布于2014年6月13日

  • 修复了在Ubuntu捆绑Python解释器上版本检测不正确的问题

版本0.1.1

发布于2014年6月12日

  • 修复了Readme文件

  • 为PyPI页面添加了语法高亮显示

版本0.1.0

发布于2013年8月30日

  • 首次发布

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

Spans-1.1.1.tar.gz (45.8 kB 查看哈希值)

上传时间

构建分发

Spans-1.1.1-py2.py3-none-any.whl (24.3 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者