Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.7.3
2.7.4
2 changes: 1 addition & 1 deletion domaintools/_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@

"""

current = "2.7.3"
current = "2.7.4"
8 changes: 4 additions & 4 deletions domaintools/decorators.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,24 +51,24 @@ def wrapper(self, *args, **kwargs):

if "domains" in arguments.keys():
domains = arguments.pop("domains")
arguments["domain"] = (
",".join(domains) if isinstance(domains, (list, tuple)) else domains
)
arguments["domain"] = ",".join(domains) if isinstance(domains, (list, tuple)) else domains

if spec:
# Determine which HTTP method is currently being executed.
# If the function allows dynamic methods (e.g. method="POST"), use that.
# Otherwise, default to the first method defined in the decorator.
current_method = kwargs.get("method", normalized_methods[0])

filtered_arguments = {k: v for k, v in arguments.items() if v is not None}

# Run Validation
# This will raise a ValueError and stop execution if validation fails.
try:
RequestValidator.validate(
spec=spec,
path=path,
method=current_method,
parameters=arguments,
parameters=filtered_arguments,
)
except ValueError as e:
print(f"[Validation Error] {e}")
Expand Down
63 changes: 63 additions & 0 deletions tests/fixtures/vcr/test_account_information.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1118,4 +1118,67 @@ interactions:
status:
code: 200
message: OK
- request:
body: ''
headers:
accept:
- '*/*'
accept-encoding:
- gzip, deflate
connection:
- keep-alive
host:
- api.domaintools.com
user-agent:
- python-httpx/0.28.1
method: GET
uri: https://api.domaintools.com/v1/account?app_name=python_wrapper&app_version=2.7.4
response:
body:
string: !!binary |
H4sIAAAAAAAAA9WZYY+iMBCG/wuf7hKbCCyr7l/ZXEwXRpgstKQtesb4329AuHA5McAiS/0ktoVn
pi/vtPXiKNC5FBqct4vDw1AWwlRfc9wXGpTgGTU5KAzEihukrnsD2qCInRUNMHikdqMKuK6cXMmo
CI123t4vDkY0rr4jQ3GQKqvG07Ac1D6TwiT7FDOk5znuuvzUTYksVNMiijStB6AoDPwdEZSP/9Ay
bf1461xoHlfhGBnxM3X1fepbPY8udq7rECr8zvEWzz7iBm5jr6saGxVqYj6WgcZlcyfzEGRv3Z95
20be9SQGoTBM7sJ6Q2FfR8L6vWkjMBAaBjrkKXVhkcw4Cn0/18Ewen8A/bpFvx7GjrGQCqIx6CQf
58vou3biX4Jh8BkXdDt24iZMUtRm0glwh4j9CzNAw9BI9Q3Q/+Z+OwxbwMlO0VRqsUnxN1BGpemA
6QMjX4y6a2ANXHV4+YhiuX4ebyKr1QBLyEKkOluQYcwb25h/LTIcVUFMmVVcGGuoFeSFmXKx90w1
KDiC0sAwnwp2DlZ2SiR22O+y0ov60xJMBkeMQIQ2VIlGCeX+jGqFoit75Dupdp+Hm3H1yXgKyize
cXNOeY2sMYWWaq0parbktuJ8uBoL5qJ1X7xh0mVpeZx0N8feQmTQWo7ZYQ201UzP7HZS12zb2AEo
5T94jj8n4h8rEb9vAPKj8otoGSF4bvtMcRsEm95Cr/d3KuL3F5zBbGay6ZH8hrZWfdmNUTdOggpB
63JfbWQo0+UoqoflKOApM5g17wOLUIeSitF5dBgtg5pqeqYIRPtTTccMRx59RWZHUA98d7oAns7f
Ybs2RlAeVI0vG90v+Hylrx2BFTPwnz8l0lR/NXyfw7YPkDc9Tu27Q5jQhmacgeqgYxnp99zX0QEs
Ovm/rtc/kmOYlFkfAAA=
headers:
access-control-allow-origin:
- '*'
cache-control:
- no-store, no-cache, must-revalidate
content-encoding:
- gzip
content-security-policy:
- 'default-src * data: blob: ''unsafe-eval'' ''unsafe-inline'''
content-type:
- application/json;charset=utf-8
date:
- Fri, 15 May 2026 15:29:52 GMT
expires:
- Thu, 19 Nov 1981 08:52:00 GMT
pragma:
- no-cache
set-cookie:
- dtsession=6n7lmstljtnc5s6efrrv4kvou7h6idpth0mtcdafcgenjan1r0c2qfduol62f2e61goqkosl2e19d70g6qek7mctvupoe0aklqoc38n;
expires=Sun, 14-Jun-2026 15:29:52 GMT; Max-Age=2592000; path=/; domain=.domaintools.com;
secure; HttpOnly
strict-transport-security:
- max-age=31536000; includeSubDomains
transfer-encoding:
- chunked
vary:
- Accept-Encoding
x-time:
- '148401'
status:
code: 200
message: OK
version: 1
449 changes: 449 additions & 0 deletions tests/fixtures/vcr/test_async_context_manager.yaml

Large diffs are not rendered by default.

449 changes: 449 additions & 0 deletions tests/fixtures/vcr/test_async_iteration.yaml

Large diffs are not rendered by default.

449 changes: 449 additions & 0 deletions tests/fixtures/vcr/test_async_simple_await.yaml

Large diffs are not rendered by default.

63 changes: 63 additions & 0 deletions tests/fixtures/vcr/test_available_api_calls.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -934,4 +934,67 @@ interactions:
status:
code: 200
message: OK
- request:
body: ''
headers:
accept:
- '*/*'
accept-encoding:
- gzip, deflate
connection:
- keep-alive
host:
- api.domaintools.com
user-agent:
- python-httpx/0.28.1
method: GET
uri: https://api.domaintools.com/v1/account?app_name=python_wrapper&app_version=2.7.4
response:
body:
string: !!binary |
H4sIAAAAAAAAA9WZYY+iMBCG/wuf7hKbCCyr7l/ZXEwXRpgstKQtesb4329AuHA5McAiS/0ktoVn
pi/vtPXiKNC5FBqct4vDw1AWwlRfc9wXGpTgGTU5KAzEihukrnsD2qCInRUNMHikdqMKuK6cXMmo
CI123t4vDkY0rr4jQ3GQKqvG07Ac1D6TwiT7FDOk5znuuvzUTYksVNMiijStB6AoDPwdEZSP/9Ay
bf1461xoHlfhGBnxM3X1fepbPY8udq7rECr8zvEWzz7iBm5jr6saGxVqYj6WgcZlcyfzEGRv3Z95
20be9SQGoTBM7sJ6Q2FfR8L6vWkjMBAaBjrkKXVhkcw4Cn0/18Ewen8A/bpFvx7GjrGQCqIx6CQf
58vou3biX4Jh8BkXdDt24iZMUtRm0glwh4j9CzNAw9BI9Q3Q/+Z+OwxbwMlO0VRqsUnxN1BGpemA
6QMjX4y6a2ANXHV4+YhiuX4ebyKr1QBLyEKkOluQYcwb25h/LTIcVUFMmVVcGGuoFeSFmXKx90w1
KDiC0sAwnwp2DlZ2SiR22O+y0ov60xJMBkeMQIQ2VIlGCeX+jGqFoit75Dupdp+Hm3H1yXgKyize
cXNOeY2sMYWWaq0parbktuJ8uBoL5qJ1X7xh0mVpeZx0N8feQmTQWo7ZYQ201UzP7HZS12zb2AEo
5T94jj8n4h8rEb9vAPKj8otoGSF4bvtMcRsEm95Cr/d3KuL3F5zBbGay6ZH8hrZWfdmNUTdOggpB
63JfbWQo0+UoqoflKOApM5g17wOLUIeSitF5dBgtg5pqeqYIRPtTTccMRx59RWZHUA98d7oAns7f
Ybs2RlAeVI0vG90v+Hylrx2BFTPwnz8l0lR/NXyfw7YPkDc9Tu27Q5jQhmacgeqgYxnp99zX0QEs
Ovm/rtc/kmOYlFkfAAA=
headers:
access-control-allow-origin:
- '*'
cache-control:
- no-store, no-cache, must-revalidate
content-encoding:
- gzip
content-security-policy:
- 'default-src * data: blob: ''unsafe-eval'' ''unsafe-inline'''
content-type:
- application/json;charset=utf-8
date:
- Fri, 15 May 2026 15:29:53 GMT
expires:
- Thu, 19 Nov 1981 08:52:00 GMT
pragma:
- no-cache
set-cookie:
- dtsession=ua1eique1n27heaqbs6a8g8cnr6q4nvmohgl6bn74dsfve45gv3h1rk39pkto1q6bk5cfi1jefpm6mh01d9819ora10pgr00qh3i2am;
expires=Sun, 14-Jun-2026 15:29:53 GMT; Max-Age=2592000; path=/; domain=.domaintools.com;
secure; HttpOnly
strict-transport-security:
- max-age=31536000; includeSubDomains
transfer-encoding:
- chunked
vary:
- Accept-Encoding
x-time:
- '148943'
status:
code: 200
message: OK
version: 1
132 changes: 132 additions & 0 deletions tests/fixtures/vcr/test_brand_monitor.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1993,4 +1993,136 @@ interactions:
status:
code: 200
message: OK
- request:
body: ''
headers:
accept:
- '*/*'
accept-encoding:
- gzip, deflate
connection:
- keep-alive
host:
- api.domaintools.com
user-agent:
- python-httpx/0.28.1
method: GET
uri: https://api.domaintools.com/v1/account?app_name=python_wrapper&app_version=2.7.4
response:
body:
string: !!binary |
H4sIAAAAAAAAA9WZb4+iMBDGvwuv7hKbAP7b3a9yuZgujDJZaElb9Izxu9+Aeqk52W1ZFPGV2hZ+
M314pi2HQIEupdAQvB0CniSyEqb5WuKq0qAEL6gpQGFgo7hB6royoA2KTTChAQa31G5UBcdJUCqZ
VonRwduvQ4ApjTtfkaFYS1U042lYCWpVSGGyVY4F0v2CKKw/56ZMVurSIqo8Pw9AURn4N2Je3/5d
y9z689S50nzThGNkyvfUdVr3be5HP16jaUCo8KfEUzyrlBs4jT1OztioUBPztg50Uze3Mvsgx6E7
84uN/OpIDEJhkt2EjX1hFx1hp860KRhIDAOd8Jy6sFQWHIW+neu5H/3Ugz606EM/dtwIqSDtgk7y
Cb6NHkV25mdLP/qCC7oe23GTZDlq0+sMRD5q/8YU0DA0Ug0AfZ38uSe3gN1wsgmvZLPwI2/0MqTo
4yv6l6/pT6SMytMa80/M/I5asZAjZ2ANXLX4eYeCGXZ0dIcEZ7JZEbCMXESq/QgyjOXFOR6/HvFH
VbChzCouzHDUnh6toKxMnwu+e6pBwRaUBoZlX7CPYGW7TGKL/943vbYDxw7IqD9GgslgiymIZAxV
4qKEeo9GtULRr/HIt1ft3g+34OqD8RyUeXrHLTnlNR3OFDwza6l2NKV4LIbbcH66GpvfVQmhLd14
5kBsi5fl9aHSzSzHT/KsWQuygczB92mDXb5np/O6y86NrYFS/oOX+LMn/q52MXMNQL43jpE+Rwhx
dLVPmi/chX7e4amU315yzh9m1UuH5F9oz6qvuzHqxklQCWhd76yNTGQ+8HT4KUoBz5nB4vI8sBR1
Iqkc7TuHYRlUX9PjcFr9ZSB62td0PODQw1VkAwXlWSg+8d3+Arg7f4vtjjGC+qiqe9lof8AfV/rs
CEYxA//5UyZN875hQIe1Q1g6vLFqj6FHH3rgFDRnHU+S/zhyeHHVEsFTZ//38fgXL4fneGEfAAA=
headers:
access-control-allow-origin:
- '*'
cache-control:
- no-store, no-cache, must-revalidate
content-encoding:
- gzip
content-security-policy:
- 'default-src * data: blob: ''unsafe-eval'' ''unsafe-inline'''
content-type:
- application/json;charset=utf-8
date:
- Fri, 15 May 2026 15:37:16 GMT
expires:
- Thu, 19 Nov 1981 08:52:00 GMT
pragma:
- no-cache
set-cookie:
- dtsession=4lj8akl4k0kpbhuk8acprj6tlsbi4uqeqbi2f298af8dgmup2a66uedbg81spnjc15ma5qq2997qt62ln816imnr64k3siam1ihkuku;
expires=Sun, 14-Jun-2026 15:37:15 GMT; Max-Age=2592000; path=/; domain=.domaintools.com;
secure; HttpOnly
strict-transport-security:
- max-age=31536000; includeSubDomains
transfer-encoding:
- chunked
vary:
- Accept-Encoding
x-time:
- '152302'
status:
code: 200
message: OK
- request:
body: ''
headers:
accept:
- '*/*'
accept-encoding:
- gzip, deflate
connection:
- keep-alive
host:
- api.domaintools.com
user-agent:
- python-httpx/0.28.1
method: GET
uri: https://api.domaintools.com/v1/mark-alert?app_name=python_wrapper&app_version=2.7.4&query=google
response:
body:
string: !!binary |
H4sIAAAAAAAAA52Y3ZKiOhDH34VroWQ8zp7jq5zaiwABGpM05kNlpubdN6g47jgL3VvljVW/f9Lp
9Fd4T6x0PRonk917cgjSDskuaRAbJZNVokCDT3b5er1eJR69UPHP5nWVyHOpQhVF//9cJUaekp23
Qa4SNGmLqpr+Bl//m+xqoVz8UwkfBcnL+uU1XW/TfBs3EEpa7+Iy70mFWoAZgc2P/L9tejUiK1FH
znnhQ+Que32sHuhtfgON9FlpHtnJmN94Icqb4Ag9ga5YtGTRDYtuWTSw6I5F71m0YtGOQ1dOxtCt
rZTEaLm7JewXVy+gEFCF9rZ2haEVSAmxsrwFb1q2FvXFqi+6J8OuZNc/hD1pq4vMt3yZ1TfruFJz
P5zJWkWS4F/4A8v4I95qdT8EzaAKuX6uLBw/PaUwVLMG1d2euUFteUdo9oq5w4XefO/RPwumO0t1
sXRlN76SXoByLLNkKg1TUKPHTHiKRY3UYGBsECR6iu63dorXpyuZ1zZIvcSrqgPm2btLo07Lyiym
xqRwGVgKqLABkykwy/XxpjiIr56dox14mR6lhRpK4SFOHs0xzwWGBlrbmn98bHPduT1YlLlCc1Tl
YeBEq/NoZQZlIAoyIS1mpif4JhMOBBEtMSsKqgkaCyCuezZpuu+D3wBx8fU2fyEGSeymOR0VjTSe
iBeI+0wAlQRKnl7IXhHJQjQMWyPtGHgp3HKP+h1nLR8dbYViKMCLioH3Is7gDN7KXoBlCzhbnIls
2QrNKA9li0z8qcLO4WhO4qla/cnyK0xrSlUKPoVU6NSVwkrq5cpTk3lcnqMnumXRHYves2jFoGth
BmDwrY1UXYOhlgTw2Xl4I66uh0oM4yWZoAv5lCUzypiIT0k+hxve6BdzMNrlwMTWJAmn7lUMT3+i
Lh5pl1lq241miPx1Qzc+9vVy7xj8YKrbhEG3KpbZp8Izg4f4PuTgcS6k0ye0aszzbD8/t7Vg5b0p
y3Mv7XJXbh3160rrfe/0IOJjLBjPeDy0oaDuAeD470MwfE0Hb8w3U4exSlzTWkpv8LR4mH3H3EIX
X9/h84fQxdeDL/CS76jxsJM5YGpchKOXHCM4Rsk9BAnZqYdUlB6O4AdqUN1jdhLo+Zqnh2+5b80x
yLzjWKqvgvHbZ4YmPq/mrem5UTSWX1r8PJCEo37SY+0i4DIOt1PGLF5Sb0HLh26zyMf7xCku5+em
A/eODj1bEbgKG5iC8bXspnlRH0GetBgLkqtsfKG7Q5BxIkSNToQMbTPrEc5al1f0/GqOG6KXDo41
MX+d76X/bGyL/OcnUNqnF6+5nwDjcGCcEpNRpIEzUMtV4FpzpK58Yn/rPFmugJQIPz8+fgGxJtKQ
bhoAAA==
headers:
access-control-allow-origin:
- '*'
cache-control:
- no-store, no-cache, must-revalidate
content-encoding:
- gzip
content-security-policy:
- 'default-src * data: blob: ''unsafe-eval'' ''unsafe-inline'''
content-type:
- application/json;charset=utf-8
date:
- Fri, 15 May 2026 15:37:16 GMT
expires:
- Thu, 19 Nov 1981 08:52:00 GMT
pragma:
- no-cache
set-cookie:
- dtsession=jsr2nklr0cqdr0sjva7h4ul8kcookkpiis763531ka1jlhbcvdmb3fkkkrunk9kmvds99m6h0kjitlkkkd3j1kcgcm8759b3nlcr83p;
expires=Sun, 14-Jun-2026 15:37:16 GMT; Max-Age=2592000; path=/; domain=.domaintools.com;
secure; HttpOnly
strict-transport-security:
- max-age=31536000; includeSubDomains
transfer-encoding:
- chunked
vary:
- Accept-Encoding
x-time:
- '165737'
status:
code: 200
message: OK
version: 1
66 changes: 66 additions & 0 deletions tests/fixtures/vcr/test_dict_like_behaviour.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1045,4 +1045,70 @@ interactions:
status:
code: 200
message: OK
- request:
body: ''
headers:
accept:
- '*/*'
accept-encoding:
- gzip, deflate
connection:
- keep-alive
host:
- api.domaintools.com
user-agent:
- python-httpx/0.28.1
method: GET
uri: https://api.domaintools.com/v1/google.com/whois?app_name=python_wrapper&app_version=2.7.4
response:
body:
string: !!binary |
H4sIAAAAAAAAA7VVXXPaOBT9K3fcl3aKjSwgBL8xkGaZAdPBpPuw7mQUWzGaxZIry2W7nfz3vf5o
MMFk24dmmJDcj6Ore4/O/W5pnmdK5tzyvuPficiNZtJYnnWrVLLnsFzOrN6zxwgly8hIc2Z4jGHu
ZDK2ycR2RxjG/8kEAqKZEnpdmYdoLrK4iabEnZRmMmmBanSsmP57paQwSsNCRg66c8NMkZdof1nR
XnBp5nzPDf+o1U48iBKw1zi2WHP+yHWH6646+8SRc/2V6w6w2tEJVrvOwD4/9SzJUn5f+6ta/cB1
btfr2+WNM1uvMNcP6EvD4KVh2DZ87lmHnRJ52enywLqfVzYZ1f3UPFK6bOdcpUxI8LECD5JqYE6k
0lBu6tZ+gyZiMfeAuoPrkTu8n69X04V/jwfZnzaB/xzMNPz5x3oRQFDdxYOqBifFyaT1ZE6wMfxu
s/RgZ0zmhf2wfzgczoPrjsUwx99YAqFDmyAx6JZQzx17g8F7gj+hnJWEQnI1gUdWbcnYIwQ/TeDx
9E2Lk3BTMq+N8EzAwUUED1qs61W0a+Mvpv60btyEtu3TB2QlzJQ0LDL1/fOqATiU7KwD/biaQNgv
RNhnZaqteaa0uQgJH3dK4g3euw4l11c4s/EIy24mGVSvwoNudsPbYznlPETEpHSUTsI+z7I33Unv
LoCfP4Sfgj9Pu3TAyyf4U/Avk87Bu9/q/4B3J10C/+XWXEq7dMAvtqY76d2RY9LAWidMin+rR+LB
Ud5PgmaqkKgbHtwFJ/YbrHHvoTTsOTJ0w78UPG+s8EHpFJhpvYSa8+fa0a8kJey3pWrLo91vhC+1
8VnRZD5wXnEOX3O6rznpiXPuB8HNzINC5iKRPEYZ3CxBPYLZcVjMpr7fKC1KFQOc18Oep3jrUhaE
TCD4lhuetqU1znTuCGm4liJyJDdolaHE1kCqNAchH7FLtf7hp0avFyhEKuZ5D7I9ZygyX0UujBdK
gIuEwg2uCh1x7GTGkvILKWbXaHaFVp7d3tgNhVdMYnyKj/TtdoXkw5sZnGd5JexLhuzjOTAZ438y
L1Lcl1g4MIhFIgzbw0HpfeyU4J/KKtvyfEqAzlXzQz7xyhiM6nlNyHg4mlA6CeUCV0ShVcZ7lXM4
dAglA0quKKUorrYdSuvpx2a9r++PC/Y4Vevp6T/USF2CLQkAAA==
headers:
access-control-allow-origin:
- '*'
cache-control:
- no-store, no-cache, must-revalidate
content-encoding:
- gzip
content-security-policy:
- 'default-src * data: blob: ''unsafe-eval'' ''unsafe-inline'''
content-type:
- application/json;charset=utf-8
date:
- Fri, 15 May 2026 15:31:14 GMT
expires:
- Thu, 19 Nov 1981 08:52:00 GMT
pragma:
- no-cache
set-cookie:
- dtsession=boogjh9lvtq02elnrfub0t98in5eqti73dkoajmhp8s9b7k8ad90dmmktbr1btb031ant1vjeen39q2dll5flfbrco9h8mjc4sv5ksf;
expires=Sun, 14-Jun-2026 15:31:14 GMT; Max-Age=2592000; path=/; domain=.domaintools.com;
secure; HttpOnly
strict-transport-security:
- max-age=31536000; includeSubDomains
transfer-encoding:
- chunked
vary:
- Accept-Encoding
x-time:
- '42340'
status:
code: 200
message: OK
version: 1
Loading
Loading