【问题标题】:Monkey patching third-party library猴子补丁第三方库
【发布时间】:2019-07-15 17:28:54
【问题描述】:

我正在使用 minio 客户端并收到以下错误:

minio.error.InvalidEndpointError: InvalidEndpointError: message: Hostname does not meet URL standards.

这是由 minio.helpers:281 函数 is_valid_endpoint(endpoint) 中的不正确正则表达式引起的

上游问题是开放的,我想了解如何在导入 Minio 对象时使用 f = lambda: True 进行猴子修补。

from minio import Minio

# credentials['S3_ENDPOINT_URL'] = 'something.westeurope.azurecontainer.io'

minio_client = Minio(credentials['S3_ENDPOINT_URL'],
                     access_key=credentials['S3_ACCESS_KEY'],
                     secret_key=credentials['S3_SECRET_KEY'],
                     secure=USE_SSL)

有人可以告诉我如何修补这个吗?我以前只将它用于函数定义,而不是用于类。

【问题讨论】:

    标签: python debugging monkeypatching


    【解决方案1】:

    所以对于猴子补丁,你可以简单地替换函数

    首先定义一个总是返回true的函数:

    def is_valid_replacer(endpoint):
        return True
    

    然后只需替换函数

    import minio
    minio.helpers.is_valid_endpoint = is_valid_replacer
    #### Your code here ####
    

    如果我理解你,这应该可行。

    【讨论】:

    • 是的,我想用我的 lambda 函数替换它。然而,当 Minio 被实例化时,补丁并没有被使用。
    猜你喜欢
    • 2018-01-08
    • 2012-08-19
    • 1970-01-01
    • 2016-09-01
    • 2012-09-16
    • 2012-12-18
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多