def get_zip_data(Request, zip_code=None):
    from beckett.finance.utils.nyt_finance_getter import get_finance_data_json
    if zip_code == None:
        raise Http404
    response = get_finance_data_json(**{'resource_type': 'zips', 'query_file': zip_code})
    if 'errors' in response:
        raise Http404
    party_dict = {}
    for resp in response:
        try:
            party_dict[resp['party']] += resp['total']
        except KeyError:
            party_dict[resp['party']] = resp['total']
    return HttpResponse(max(party_dict, key= lambda a: party_dict.get(a)), mimetype="application/json")
def search_100_miles(ceo):
    json_data = get_finance_data_json(**{
                        'resource_type':'contributions',
                        'query_file': 'donorsearch',
                        'search':{
                            'fname': ceo.first_name,
                            'lname': ceo.last_name,
                        }
                       })
    if 'errors' not in json_data:
        for donor_json in json_data:  
            try:
                zip_obj = Zip.objects.get(code=donor_json['donor_zip5'])
            except Zip.DoesNotExist:
                zip_obj = Zip(code=donor_json['donor_zip5'])
                zip_obj.save()
            except Zip.MultipleObjectsReturned:
                zip_obj = Zip.objects.filter(code=donor_json['donor_zip5'])[0]

            try:
                address = Address.objects.get(**{
                    'address': donor_json['donor_address1'],
                    'address2': donor_json['donor_address1'],
                    'state':donor_json['donor_state'],
                    'city':donor_json['donor_city'],
                    'zip':zip_obj
                })
                return
            except Address.DoesNotExist:
                address = Address(**{
                    'address': donor_json['donor_address1'],
                    'address2': donor_json['donor_address1'],
                    'state':donor_json['donor_state'],
                    'city':donor_json['donor_city'],
                    'zip':zip_obj
                })

            address = geo_code(address)
            if address.point:
                addresses = Address.objects.filter(point__distance_lte=(address.point, D(mi=70)))
                if addresses:
                    for address in addresses:
                        if address == ceo.company_address:
                            print address
                            print donor_json
                            save_donor([donor_json], ceo)
    return json_data
def save_donor(donor_json, ceo):
    for donation_json in donor_json:
        candidate_name =""
        if donation_json['candidate_full_name'] == "McCain-Palin COMPLIANCE FUND INC.":
            donation_json['candidate_full_name'] = "John McCain" # Cmon NYTIMES!
        candidate_name = donation_json['candidate_full_name'].split(" ")
        candidate_name.reverse()
        query_string = ",".join("%s" % v for v in candidate_name)
        #print query_string
        try:
            candidate_json = get_finance_data_json(**{'resource_type': 'candidates', 'query_file': query_string})
        except:
            return

        for candidate in candidate_json:
            try:
                party, created = Party.objects.get_or_create(**{ 'name': candidate['party'] })
                candidate, created = Candidate.objects.get_or_create(**{ 
                            'name': donation_json['candidate_full_name'], 'party': party })
            except:
                return #compliance fundds argh

        zip_obj = Zip.objects.filter(code=donation_json['donor_zip5'])
        if zip_obj:
            zip_obj = zip_obj[0]
        else:
            zip_obj = Zip(code=donation_json['donor_zip5'])
            zip_obj.save()
        address, created = Address.objects.get_or_create(**{
            'address': donation_json['donor_address1'],
            'address2': donation_json['donor_address1'],
            'state':donation_json['donor_state'],
            'city':donation_json['donor_city'],
            'zip':zip_obj
        })
        donor, created = Donor.objects.get_or_create(**{'ceo': ceo,
                                                            'first_name': donation_json['donor_first_name'],
                                                            'last_name': donation_json['donor_last_name'],
                                                            'donor_address': address})
        year, month, day = donation_json['donation_date'].split("-")
        d = date(int(year), int(month), int(day))
        donation, created = Donation.objects.get_or_create(**{'candidate': candidate,
                                                                'donor': donor,
                                                                'donation_amount': donation_json['donation_amount'],
                                                                'donation_date': d, })
def save_ceo(**kwargs):
    ceos = list()
    if kwargs.has_key('CEO'):
        ceos = [kwargs['CEO'].split(" ")]
    elif kwargs.has_key('CEOs'):
        cs = kwargs['CEOs'].split(", ")
        for c in cs:
            a = c.split(" ")
            ceos.append(a)
    for name in ceos:
        search = dict()
        if len(name) > 2:
            search = {
                    'fname': name[0],
                    'lname': name[2],
                }
        elif len(name) == 2:
            search = {
                    'fname': name[0],
                    'lname': name[1],
                }
        else:
            #print "No name!"
            return
        city_state_zip = kwargs['Address1'].split(" ")
        zip = city_state_zip.pop()
        state = city_state_zip.pop()
        city = " ".join(city_state_zip).replace(",", '')
 
        if len(zip) == 5:
            zip_obj = Zip.objects.filter(code=zip)
            if zip_obj:
                zip_obj = zip_obj[0]
            else:
                zip_obj = Zip(code=zip)
                zip_obj.save()
            address, created = Address.objects.get_or_create(**{
                'address': kwargs['Address'],
                'address2': kwargs['Address1'],
                'state':state,
                'city':city,
                'zip':zip_obj
            })
            try:
                ceo, created = Ceo.objects.get_or_create(**{
                'first_name': search['fname'],
                'last_name': search['lname'],
                'website': kwargs['Website'],
                'company_name': kwargs['Company'],
                'company_address':address
                })
            except:
                return #### dynasties
            search['zip'] = zip
            donor_json = get_finance_data_json(**{'resource_type': 'contributions', 
                            'query_file': 'donorsearch',
                            'search': search,
                            })
            if donor_json != 'errors':
                save_donor(donor_json, ceo)
            elif zip_obj.poly:
                #nearby_zips = Zip.objects.filter(poly__dwithin=(zip[0].centroid, .1))[:9]
                nearby_zips = Zip.objects.filter(poly__touches=zip_obj.poly)[:9]
                for zip in nearby_zips:
                    search['zip'] = zip.code
                    donor_json = get_finance_data_json(**{'resource_type': 'contributions', 
                            'query_file': 'donorsearch',
                            'search': search,
                            })
                    if donor_json != 'errors':
                        save_donor(donor_json, ceo)
def save_ceo(**kwargs):
    ceos = list()
    if kwargs.has_key('CEO'):
        ceos = [kwargs['CEO'].split(" ")]
    elif kwargs.has_key('CEOs'):
        cs = kwargs['CEOs'].split(", ")
        for c in cs:
            a = c.split(" ")
            ceos.append(a)
    for name in ceos:
        search = dict()
        if len(name) > 2:
            search = {
                'fname': name[0],
                'lname': name[2],
            }
        elif len(name) == 2:
            search = {
                'fname': name[0],
                'lname': name[1],
            }
        else:
            #print "No name!"
            return
        city_state_zip = kwargs['Address1'].split(" ")
        zip = city_state_zip.pop()
        state = city_state_zip.pop()
        city = " ".join(city_state_zip).replace(",", '')

        if len(zip) == 5:
            zip_obj = Zip.objects.filter(code=zip)
            if zip_obj:
                zip_obj = zip_obj[0]
            else:
                zip_obj = Zip(code=zip)
                zip_obj.save()
            address, created = Address.objects.get_or_create(
                **{
                    'address': kwargs['Address'],
                    'address2': kwargs['Address1'],
                    'state': state,
                    'city': city,
                    'zip': zip_obj
                })
            try:
                ceo, created = Ceo.objects.get_or_create(
                    **{
                        'first_name': search['fname'],
                        'last_name': search['lname'],
                        'website': kwargs['Website'],
                        'company_name': kwargs['Company'],
                        'company_address': address
                    })
            except:
                return  #### dynasties
            search['zip'] = zip
            donor_json = get_finance_data_json(
                **{
                    'resource_type': 'contributions',
                    'query_file': 'donorsearch',
                    'search': search,
                })
            if donor_json != 'errors':
                save_donor(donor_json, ceo)
            elif zip_obj.poly:
                #nearby_zips = Zip.objects.filter(poly__dwithin=(zip[0].centroid, .1))[:9]
                nearby_zips = Zip.objects.filter(
                    poly__touches=zip_obj.poly)[:9]
                for zip in nearby_zips:
                    search['zip'] = zip.code
                    donor_json = get_finance_data_json(
                        **{
                            'resource_type': 'contributions',
                            'query_file': 'donorsearch',
                            'search': search,
                        })
                    if donor_json != 'errors':
                        save_donor(donor_json, ceo)
def save_donor(donor_json, ceo):
    for donation_json in donor_json:
        candidate_name = ""
        if donation_json[
                'candidate_full_name'] == "McCain-Palin COMPLIANCE FUND INC.":
            donation_json[
                'candidate_full_name'] = "John McCain"  # Cmon NYTIMES!
        candidate_name = donation_json['candidate_full_name'].split(" ")
        candidate_name.reverse()
        query_string = ",".join("%s" % v for v in candidate_name)
        #print query_string
        try:
            candidate_json = get_finance_data_json(**{
                'resource_type': 'candidates',
                'query_file': query_string
            })
        except:
            return

        for candidate in candidate_json:
            try:
                party, created = Party.objects.get_or_create(
                    **{'name': candidate['party']})
                candidate, created = Candidate.objects.get_or_create(
                    **{
                        'name': donation_json['candidate_full_name'],
                        'party': party
                    })
            except:
                return  #compliance fundds argh

        zip_obj = Zip.objects.filter(code=donation_json['donor_zip5'])
        if zip_obj:
            zip_obj = zip_obj[0]
        else:
            zip_obj = Zip(code=donation_json['donor_zip5'])
            zip_obj.save()
        address, created = Address.objects.get_or_create(
            **{
                'address': donation_json['donor_address1'],
                'address2': donation_json['donor_address1'],
                'state': donation_json['donor_state'],
                'city': donation_json['donor_city'],
                'zip': zip_obj
            })
        donor, created = Donor.objects.get_or_create(
            **{
                'ceo': ceo,
                'first_name': donation_json['donor_first_name'],
                'last_name': donation_json['donor_last_name'],
                'donor_address': address
            })
        year, month, day = donation_json['donation_date'].split("-")
        d = date(int(year), int(month), int(day))
        donation, created = Donation.objects.get_or_create(
            **{
                'candidate': candidate,
                'donor': donor,
                'donation_amount': donation_json['donation_amount'],
                'donation_date': d,
            })