Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conforms to Spec v0.2 #11

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open

Conversation

timothyqiu
Copy link
Member

尝试实现 v0.2 版本的 Spec,同时更新到了最新的数据。因为原有结构和测试与 Spec 要求差别太大,基本上就是重写了。

在 Spec 基础上:

  • Division 保留了原来的 is_province is_prefecture is_county 属性
  • 认为 province code 还可以写成 320000
    • 即定义 X code 为有效的 X 行政区代码,允许省略若干后缀的 00

GB2260 的数据通过 generate.py 生成到 gb2260.data.<源>.revision_<日期> 里。因为看到 Spec 后续有允许用户切换选择源的计划,所以目前是在生成时就把所有源的数据混合,按照「标准 > STATS > MCA」的优先级生成到假的「curated」源使用。这些模块在构造具体的 GB2260 对象时动态加载。

与 GB/T 2260 数字码相关的逻辑都在 gb2260.code 里,主要用正则表达式匹配、处理、变换。

Spec 为 GB2260 对象定义的大多数逻辑都在 Revision 对象中实现,GB2260 主要作为其它对象的代理使用。

关于 Division 对象是否允许用户自行通过「代码、名字、版本」三个字符串构造,我选择了不允许,同时还不允许修改这三个字段(行为类似 namedtuple)。因为有 Division.province 这种东西的缘故,它似乎就不再是 POD 而是有内部不变量的对象了。而且如果允许自行构建,Division.province 之类的方法似乎也会很难办,搞临时或者全局性质的 GB2260 对象似乎也不大好。所以还是和 Spec 一样,仅推荐通过 GB2260.get 获取 Division

另外因为 cn/GB2260#50 的问题,使用 MCA 源的数据可能会有一些问题(默认 GB2260() 得到的最新版也是 MCA 源的),但 GB2260('201412') 得到的是和老版本一样的数据。

可能改动大了一些。之前也尝试过一步步从原来的版本修改过来,但失败了,牵一发而动全身。仅供参考……

p.s. 在测试里加了 pytest-mock 的依赖;pypy 没有接触过,所以也没有在它上面跑测试 :(

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant