In my views, I have this:
def questionnaire(request):
def save_the_lead(cleaned_data, ipinfo):
email = cleaned_data.pop('email', None)
lead, created = Lead.objects.update_or_create(email=email)
lead.q = cleaned_data
lead.ipinfo = ipinfo
lead.save()
return lead
form = LeadForm(request.POST or request.GET or None)
"""
Why am I still checking for request.method == "POST"?
if POST (valid data) to questionnaire, process it.
if GET (valid data) to questionnaire, display it first. Even if it's
all valid.
"""
if request.method == "POST":
if form.is_valid():
i = IPInfo(get_ip(request), dummy=True)
lead = save_the_lead(form.cleaned_data, i.get_result())
m = Matcher()
m.match([lead])
e = Emailer(lead)
e.send()
return redirect('results', lead.id)
return render(request, 'wizard/questionnaire.html', {'form': form})
And IPInfo looks like this:
import requests
import ipdb
class IPInfo:
def __init__(self, ip, dummy=False):
self.result = dict()
if (ip and not dummy):
response = requests.get('http://ipinfo.io/' + ip)
self.result = response.json()
elif (ip and dummy):
self.result = {"ip": ip}
def get_result(self):
return self.result
The part I'm worried about is the IPInfo lookup class and how it is used in
the view. I know you can mock classes in tests, but maybe I should use
dependency injection instead? or is that not needed in Python?
If I'm missing dependency injection: I don't have control over the code
that runs before the view, so I cannot tell it to inject another instance
of IPInfo in there.
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/2777f9b7-ec87-4dc5-ac8f-de971860c83b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.