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.

Reply via email to