对Python的持续集支持
项目描述
Spans
Spans是PostgreSQL的范围类型的纯Python实现。范围类型在处理任何类型的区间时都非常方便。每次当你发现自己在使用date_start和date_end时,可能你真正需要的是区间。
自2013年8月30日首次发布以来,Spans已成功用于生产。
安装
Spans存在于PyPI上。
$ pip install Spans
文档托管在Read the Docs上。
示例
想象你正在构建一个日历,并想显示与当前月份重叠的所有周。通常你不得不做一些日期技巧才能实现这一点,因为月份的边界可能是任何一周中的某一天。使用Spans的集合操作和快捷方式,这个问题变得轻而易举。
我们首先导入date和daterange
>>> 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日
当开始和结束相同,并且任一边界是排他性的时,将范围规范化为空(错误 #18,lgharibashvili)
版本 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日
修复了当upper_inc设置为True时union()的问题(错误 #11,Michael Krahe)
版本 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 的发布做准备。
版本 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 日
版本 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日
首次发布
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。