Reputation: 65
I am building a tool to query all DNS records for a hostname. Each hostname will create a ScanObject object, which will call another module to do the queries upon instantiation.
I create class methods so that I can just pull records I need instead of all the records. Therefore, these methods need to refer to the dictionary that contains ALL the DNS records (self.current_dns_record
). When I use methods like get_txt_records()
to refer to self.current_dns_record
, will it make call query_dns()
again or just used the saved result?
I would also appreciate any generic feedback on the code architecture + code inefficiencies. This is my first time doing OOP Python and not sure if I'm doing this correctly.
Semi-psuedocode and simplified:
from resolvedns import resolvedns # custom module
class ScanObject:
def __init__(self, hostname):
self.hostname = hostname
self.current_dns_record = query_dns()
def query_dns(self):
response = resolvedns(self.hostname)
return response
def get_txt_records(self):
txt_records = self.current_dns_record['TXT']
return txt_records
def get_ns_records(self):
ns_records = self.current_dns_record['NS']
return ns_records
def get_summary(self):
return {
"hostname": self.hostname,
"txt_record": get_txt_records(),
"ns_record": get_ns_records()
}
Sample output, simplified + abbreviated:
>>> result = ScanObject("google.com")
>>> print(result.get_ns_records())
ns2.google.com
ns3.google.com
>>> print(result.get_summary())
{
'hostname': 'google.com',
'txt_record': ['v=spf1 include:_spf.google.com ~all',
'....etc....'],
'ns_record': ['ns2.google.com',
'ns3.google.com']
}
Upvotes: 0
Views: 89
Reputation: 578
No, the get_txt_records
and get_dns_records
functions do not call the query_dns
function. It's not going to call itself. =)
As proof, you can add a print statement inside query_dns
, so you can see every time it is run. You'll see it when the object is created, but not on subsequent calls to get_txt_records
or get_dns_records
.
Upvotes: 1
Reputation: 396
will it make call query_dns() again or just used the saved result?
If you look at the code, the only place where query_dns()
is called is in __init__
which is only called once, on instantiation of the class. So the query_dns() will only be called when you instantiate the class.
Upvotes: 1