69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
|
from django.utils.translation import ugettext_lazy as _
|
||
|
|
||
|
from django.contrib import messages
|
||
|
from django.contrib.auth import logout as logout_user
|
||
|
from django.shortcuts import render, redirect
|
||
|
from django.http import HttpResponse, JsonResponse
|
||
|
|
||
|
from events.models.locale import City
|
||
|
from events.models.events import Event, Place, Attendee
|
||
|
from events.models.profiles import Team, UserProfile, Member
|
||
|
from events.models.search import Searchable
|
||
|
from events.forms import SearchForm
|
||
|
|
||
|
from accounts.decorators import setup_wanted
|
||
|
from django.conf import settings
|
||
|
|
||
|
import datetime
|
||
|
import simplejson
|
||
|
import geocoder
|
||
|
import math
|
||
|
import traceback
|
||
|
|
||
|
from .teams import *
|
||
|
from .events import *
|
||
|
from .places import *
|
||
|
from .user import *
|
||
|
from .new_user import *
|
||
|
|
||
|
KM_PER_DEGREE_LAT = 110.574
|
||
|
KM_PER_DEGREE_LNG = 111.320 # At the equator
|
||
|
DEFAULT_NEAR_DISTANCE = 100 # kilometeres
|
||
|
|
||
|
def get_geoip(request):
|
||
|
client_ip = get_client_ip(request)
|
||
|
if client_ip == '127.0.0.1' or client_ip == 'localhost':
|
||
|
if settings.DEBUG:
|
||
|
client_ip = '8.8.8.8' # Try Google's server
|
||
|
print("Client is localhost, using 8.8.8.8 for geoip instead")
|
||
|
else:
|
||
|
raise Exception("Client is localhost")
|
||
|
|
||
|
g = geocoder.ip(client_ip)
|
||
|
return g
|
||
|
|
||
|
def get_nearby_teams(request, near_distance=DEFAULT_NEAR_DISTANCE):
|
||
|
g = get_geoip(request)
|
||
|
if g.latlng is None or g.latlng[0] is None or g.latlng[1] is None:
|
||
|
print("Could not identify latlng from geoip")
|
||
|
return Team.objects.none()
|
||
|
try:
|
||
|
minlat = g.latlng[0]-(near_distance/KM_PER_DEGREE_LAT)
|
||
|
maxlat = g.latlng[0]+(near_distance/KM_PER_DEGREE_LAT)
|
||
|
minlng = g.latlng[1]-(near_distance/(KM_PER_DEGREE_LNG*math.cos(math.radians(g.latlng[0]))))
|
||
|
maxlng = g.latlng[1]+(near_distance/(KM_PER_DEGREE_LNG*math.cos(math.radians(g.latlng[0]))))
|
||
|
|
||
|
near_teams = Team.objects.filter(city__latitude__gte=minlat, city__latitude__lte=maxlat, city__longitude__gte=minlng, city__longitude__lte=maxlng)
|
||
|
return near_teams
|
||
|
except Exception as e:
|
||
|
print("Error looking for local teams: ", e)
|
||
|
return Team.objects.none()
|
||
|
|
||
|
def get_client_ip(request):
|
||
|
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
|
||
|
if x_forwarded_for:
|
||
|
ip = x_forwarded_for.split(',')[0]
|
||
|
else:
|
||
|
ip = request.META.get('REMOTE_ADDR')
|
||
|
return ip
|