扩展whois包中的Python模块

问题描述 投票:1回答:1

我正在使用pythons whois模块检查.by区域中的可用域。该模块当前不支持它。但是我要做的就是将这些代码添加到... / lib / python3.8 / site-packages / whois / tld_regexpr.py:

by = {
'extend': 'com'
}

我认为将代码硬编码到lib文件夹中是不正确的。我的代码现在看起来像这样:

import whois

def free_domains(domain_list):
    """Looking for free domains"""
    free_d = []
    for domain in domain_list:
        if whois.query(domain) is None:
            free_d.append(domain)
    return free_d

但是没有这些注射就无法工作。 🤔如何从我的.py文件扩展tld_regexpr.py?

python module whois
1个回答
1
投票

供参考,这里是whois.tld_regexpr的源代码。像这样在whois.tld_regexpr中使用它:

whois._2_parse

我们可以看到,这运行一些模块级代码,这些代码从whois._2_parse中的数据生成正则表达式并将其缓存在from . import tld_regexpr TLD_RE = {} def get_tld_re(tld): if tld in TLD_RE: return TLD_RE[tld] v = getattr(tld_regexpr, tld) extend = v.get('extend') if extend: e = get_tld_re(extend) tmp = e.copy() tmp.update(v) else: tmp = v if 'extend' in tmp: del tmp['extend'] TLD_RE[tld] = dict((k, re.compile(v, re.IGNORECASE) if isinstance(v, str) else v) for k, v in tmp.items()) return TLD_RE[tld] [get_tld_re(tld) for tld in dir(tld_regexpr) if tld[0] != '_'] 全局表中。

令人讨厌的是,没有办法轻松扩展tld_regexpr 之前,因为此模块是从顶层TLD_RE导入的。然后,内部代码此后甚至不再使用tld_regexpr,即使它为缓存提供了接口:/因此,在添加新的TLD之后,您需要在新TLD上显式调用此__init__.py。类似于:

get_tld_re

之前:

get_tld_re

之后:

from whois import tld_regexpr
from whois._2_parse import get_tld_re  # a "private" module, but they leave us little choice
tld_regexpr.by = {
    'extend': 'com'
}
get_tld_re('by')

我猜该模块的扩展性不是最佳设计,但是没关系-可以通过一些小的调整来解决。同时,您应该向作者提交PR,以添加更多ccTLD或使扩展性更容易。

© www.soinside.com 2019 - 2024. All rights reserved.