python - 在不更改代码源的情况下重写 pywb 中的函数
问题描述
我是 python 开发的新手,我正在使用 PYWB 库来重放 Web 档案(warc 文件)。
我想修改一个函数pywb/warcserver/index
但不修改代码源。
这个想法是在保留原始代码源的同时修改一些功能。在不丢失更改的情况下更新代码源将很有用。
这怎么可能在 pywb 和 python 中实现。
indexsource.py
在文件中重写的函数是load_index
谢谢
解决方案
load_index
是FileIndexSource
类的方法。您可以在实例级别修改方法,而无需更改库的源代码。例如:
from pywb.utils.binsearch import iter_range
from pywb.utils.wbexception import NotFoundException
from pywb.warcserver.index.cdxobject import CDXObject
from pywb.utils.format import res_template
def modified_load_index(self, params):
filename = res_template(self.filename_template, params)
try:
fh = open(filename, 'rb')
except IOError:
raise NotFoundException(filename)
def do_load(fh):
with fh:
gen = iter_range(fh, params['key'], params['end_key'])
for line in gen:
yield CDXObject(line)
# (... some modification on this method)
return do_load(fh)
# Change the "load_index" method on the instance of FileIndexSource
my_file_index_source.load_index = modified_load_index
对于 then on ,每次load_index
调用my_file_index_source
该方法时,都会运行修改后的方法。
另一种选择是创建一个继承FileIndexSource
并覆盖该load_index
方法的新类。
推荐阅读
- javascript - 如何在 React Native Navigation 中单击时关闭抽屉?
- javascript - 如果不使用 created() 生命周期钩子或传播运算符 (...),vue.js 中的空白屏幕
- python - 未找到覆盖模块
- swift - Firebase Twitter oAuth 回调不适用于 Swift ios13
- html - 多少 HTML 加密媒体扩展 (EME) 是可靠的?
- html - Yew 错误 – 只允许一个根 html 元素
- google-calendar-api - Google Calender API:可以将事件存储在自己的私人日历中吗?
- java - Python Java - 使用 subprocess.Popen 从 Python 脚本调用 JAR 时错误的类文件版本
- php - 在php中的表内链接?
- python - TypeError: an integer is required (got type str), 高分保存功能