摘要
函数 send_document
在 wait_till_finished=True
和 silent=False
时抛出 NameError: name 'file' is not defined
异常。当 wait_till_finished=True
和 silent=True
时,它会陷入无限循环。我发现,在主分支上,这个错误可能已经被修复了,但是当前的 PIP 包没有更新这些更改。
重现步骤
pip install parsr-client
- 在 Python shell 中执行:
>>> from parsr_client import ParsrClient
>>> parsr = ParsrClient("localhost:3001")
>>> request = parsr.send_document("someDocument.pdf",
config_path="config.json", document_name="someDocument",
wait_till_finished=True, silent=False)
> Polling server for the job <job-id>...
>> Progress percentage: 0
>> Job done!
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<timed exec> in <module>
/opt/anaconda/miniconda3/envs/docspy37/lib/python3.8/site-packages/parsr_client/parsr_client.py in send_document(self, file_path, config_path, server, document_name, revision, wait_till_finished, refresh_period, save_request_id, silent)
148 print('>> Job done!')
149 return {
--> 150 'file': file_path,
151 'config': config,
152 'status_code': r.status_code,
NameError: name 'file' is not defined
- 在 Python shell 中执行:
>>> from parsr_client import ParsrClient
>>> parsr = ParsrClient("localhost:3001")
>>> request = parsr.send_document("someDocument.pdf",
config_path="config.json", document_name="someDocument",
wait_till_finished=True, silent=True)
> Polling server for the job <job-id>...
# infinite loop, not finishing after document has been processed by server
预期行为
无错误且不陷入无限循环
7条答案
按热度按时间wsewodh21#
感谢@jvalls-axa
@mkosturek :您说得对,Python客户端上的函数
send_document
已经有更新,但更改仍在开发分支上 - 它们将在下一个次要版本发布时合并到主分支。以下是当前函数签名:
Parsr/clients/python-client/parsr_client/parsr_client.py
69e6b9b中的第73行至第83行
| | defsend_document( |
| | self, |
| | file_path: str, |
| | config_path: str, |
| | server: str="", |
| | document_name: str=None, |
| | revision: str='major', |
| | wait_till_finished: bool=False, |
| | refresh_period: int=2, |
| | save_request_id: bool=False, |
| | silent: bool=True) ->dict: |
TLDR:将
file
参数重命名为file_path
以避免使用保留的Python关键字file
。感谢您指出这一点;从现在开始,我们将尝试使Python客户端与主分支保持PIP更新,而不是开发分支。
np8igboo2#
我的两分钱:我正在使用的parsr服务(通过docker)在使用parsr API(POST /document)时陷入了无限循环。
在降级到v0.12后修复。
6vl6ewon3#
我的两分钱:我正在使用的parsr服务(通过docker)在使用parsr API(POST /document)时陷入了无限循环。
在降级到v0.12后修复了这个问题。
感谢@marcpicaud。你能打开一个包含更多细节的问题吗?
vc6uscn94#
我的两分钱:我正在使用的parsr服务(通过docker)在使用parsr API(POST /document)时陷入了无限循环。
升级到v0.12后修复了这个问题。
嗨@marcpicaud
你能尝试使用0.12.1吗?我检查了一下,似乎一切都按预期工作......
wi3ka0sx5#
使用Docker镜像v0.12.2和客户端v3.2.2,我在这里遇到了问题:
对我来说看起来像是无限循环。
在Docker镜像v0.12和客户端v3.1上运行正常。
enxuqcxy6#
我认为已经应用的修复解决了
silent=False
时的 NameError,但我认为它并没有解决silent=True
时的无限循环问题。问题似乎出在 140-148 行的缩进:
Parsr/clients/python-client/parsr_client/parsr_client.py
第 140 行到第 148 行的 f4410d7
| | while ('progress-percentage'inserver_status_response): |
| | ifnotsilent: |
| | print( |
| | '>> Progress percentage: {}'.format( |
| | server_status_response['progress-percentage'])) |
| | sleep(refresh_period) |
| | server_status_response=self.get_status(jobId)[ |
| | 'server_response'] |
| | print('>> Job done!') |
更新到
server_status_response
是if not silent
块的一部分,所以如果设置了silent=True
,状态永远不会更新。由于缩进的影响,如果你设置了
silent=False
,即使任务没有完成,"Job done!" 也会在每次迭代中打印出来。我很乐意打开一个 pull request,如果调整这个看起来是正确的解决方案?
wbgh16ku7#
我终于解决了在将文档发送时,通过将解析客户端降级到3.1.0版本后出现的"无限循环"问题。