dropbox / dropbox/PyHive

Need Updates for python 3.10, using `collections.Iterable` as an example

未关闭
#421 5 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Python
星标
1.7k
派生
545
PR 合并指标
30 天内没有已合并 PR

描述

System Info:
```
Python 3.10.0 | packaged by conda-forge | (default, Nov 20 2021, 02:25:18) [GCC 9.4.0]
pyhive 0.6.4 | pyhd8ed1ab_0 | conda-forge
```

Logs:
```
~/anaconda3/envs/****/lib/python3.10/site-packages/pyhive/hive.py in execute(self, operation, parameters, **kwargs)
442 sql = operation
443 else:
--> 444 sql = operation % _escaper.escape_args(parameters)
445
446 self._reset_state()

~/anaconda3/envs/****/lib/python3.10/site-packages/pyhive/common.py in escape_args(self, parameters)
211 return {k: self.escape_item(v) for k, v in parameters.items()}
212 elif isinstance(parameters, (list, tuple)):
--> 213 return tuple(self.escape_item(x) for x in parameters)
214 else:
215 raise exc.ProgrammingError("Unsupported param format: {}".format(parameters))

~/anaconda3/envs/****/lib/python3.10/site-packages/pyhive/common.py in (.0)
211 return {k: self.escape_item(v) for k, v in parameters.items()}
212 elif isinstance(parameters, (list, tuple)):
--> 213 return tuple(self.escape_item(x) for x in parameters)
214 else:
215 raise exc.ProgrammingError("Unsupported param format: {}".format(parameters))

~/anaconda3/envs/****/lib/python3.10/site-packages/pyhive/common.py in escape_item(self, item)
246 elif isinstance(item, basestring):
247 return self.escape_string(item)
--> 248 elif isinstance(item, collections.Iterable):
249 return self.escape_sequence(item)
250 elif isinstance(item, datetime.datetime):

AttributeError: module 'collections' has no attribute 'Iterable'
```

This is because `collections.Iterable` is deprecated and we should use `collections.abc.Iterable` instead.

In fact, there has always been an `DeprecationWarning` in place:
```
DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.10 it will stop working
```

Are there any plans for a code review for such updates?

贡献指南

这个仓库没有索引到贡献指南

调研方向

回溯指向 pyhive/common.py,尤其是第 248 行的 escape_item,它是通过 hive.py execute 和 escape_args 到达的。首先阅读这条调用路径,并在 Python 3.10 下复现参数转义失败的问题;当示例不再针对 Iterable 引发 AttributeError 时,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
python
领域
databases
Issue 类型
缺陷
难度
2/5
预计耗时
1-3 小时
活跃度
停滞
描述清晰度
描述清楚
新手友好度
48/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。