Spec 对历史查询不友好
timothyqiu opened this issue · comments
GB2260 本身并不向后兼容,例如北京崇文区 110103
在 2009 以后的版本中是不存在的。
目前的 Spec 中 GB2260
接口都必须对应到具体的年,与 GB2260 本身是一致的。那么通过 `new GB2260("2014").get("110103") 应该是得不到结果的。
目前的 Spec 不支持在各个历史版本中查询。例如查询 110103
可以:
GB2260.search("110103") // 在所有历史版本中查询
GB2260.search("110103", ["2009", "2011"]) // 在 2009 和 2011 版本中查询
// =>
{
"code": "110103",
"name": "崇文区",
"year": "2009",
}
GB2260.search("110103", ["2007", "2008"]) // 得到 2008 版本
如果想要基于目前的 Spec 实现这个函数的话,不带参数的版本因为 Spec 中未给出 year 可选范围,几乎无法进行编写。
@timothyqiu 其实需要的是一个可选年份列表,这个其实很简单实现:
def search(code, years):
for year in years:
division = GB2260(year).get(code)
if division:
return division
Spec 之前的 GB2260.py 实现了 search 接口
@lepture 缺省不带 year
的版本比较难做到。从 Spec 里没法得知「GB2260 目前有哪些年份的版本」,只能 hard code 进去。
p.s. 「年份」感觉怪怪的,因为比如 2005 年有两个版本。GB2260.py 里 year
传 2014
实际上是当 201412
来的,把这个参数细化到了「月」。不过个人觉得还是「版本」更贴切。
一年两次修订的数据是后期才逐渐补充上的
不过赞同 revision 取代 year
这样的话,spec 需要修改一下了。
已经加上了 revisions 函数,可以获取所有 revisions 数据了。
#revisions()
List all revisions supported by GB2260 in descendant.
另外 search
函数返回什么数据还要再讨论。先关闭这个 issue,如果要加 search 的话,再另起 issue 讨论。