def heatmap_coordinates(request): """ Gets all the lat/long values for all organizations. Returns: List of lat/long coordinates encoded in JSON. """ if request.method != 'GET': return HttpResponseNotAllowed(request) coords = cache.get('organization_coords_list') last_update = cache.get('organization_coords_list_last_update') if not coords or not last_update or (datetime.utcnow() - last_update > REFRESH_COORDS_LIST): new_coords = [] cache.set('organization_address_list_last_update', datetime.utcnow()) ctx = ApplicationContext(DAOContext()) org_dao = ctx.get_object('OrganizationDAO') try: organizations = org_dao.findmany(latlng__exists=True, latlng__ne=[]) except: logger.error('Error occurred on organization lookup') return HttpResponseServerError(request) for org in organizations: new_coords.append(org.latlng) coords = MongoJSONEncoder().encode(new_coords) if len(coords) > 0: cache.set('organization_coords_list', coords) return HttpResponse(coords, content_type="application/json")
def clean_email(self): email = self.cleaned_data['email'] ctx = ApplicationContext(DAOContext()) dao = ctx.get_object('UserDAO') if dao.find(email=email): raise ValidationError('An account with that email already exists.') return email
def user_info(request): info = {'username': '', 'user_id': ''} if hasattr(request, 'session'): if 'name' in request.session and 'user_id' in request.session: info['username'] = request.session['name'] info['user_id'] = request.session['user_id'] elif 'user_id' in request.session: uid = request.session['user_id'] ctx = ApplicationContext(DAOContext()) dao = ctx.get_object('UserDAO') user_dto = dao.find(id=uid) info['username'] = user_dto.first_name + ' ' + user_dto.last_name info['user_id'] = uid return info
def clean_url(self): url = self.cleaned_data['url'] ctx = ApplicationContext(DAOContext()) org_dao = ctx.get_object('OrganizationDAO') url_metadata_dao = ctx.get_object('URLMetadataDAO') try: domain = UrlUtility().get_domain(url) except: raise ValidationError( "Oops! We couldn't find information on that domain.") if org_dao.find(organization_url=domain) or url_metadata_dao.find( domain=domain): raise ValidationError( "Oops! Looks like we already have information on that organization." ) return url
from springpython.context import ApplicationContext from HTResearch.Utilities.context import DAOContext from HTResearch.Utilities.geocoder import geocode # Helper script to fix broken database by adding latlongs if __name__ == '__main__': ctx = ApplicationContext(DAOContext()) dao = ctx.get_object('OrganizationDAO') empty_latlngs = dao.findmany(latlng=[]) null_latlngs = dao.findmany(latlng__exists=False) for dto in empty_latlngs: if not dto.address: continue dto.latlng = geocode(dto.address) dao.create_update(dto) for dto in null_latlngs: if not dto.address: continue dto.latlng = geocode(dto.address) dao.create_update(dto)
def org_partner_map(request): """ Generates the data needed to display the organization partner map and then stores it in the cache. Data returned as a JSON string. Returns: Partner map configurations encoded in JSON. """ if request.method != 'GET': return HttpResponseNotAllowed(request) pmap = cache.get('partner_map') last_update = cache.get('partner_map_last_update') if not pmap or not last_update or (datetime.utcnow() - last_update > REFRESH_PARTNER_MAP): new_pmap = { "nodes": [], "links": [], "types": { 'ADVOCACY': OrgTypesEnum.ADVOCACY, 'EDUCATION': OrgTypesEnum.EDUCATION, 'GOVERNMENT': OrgTypesEnum.GOVERNMENT, 'NGO': OrgTypesEnum.NGO, "PREVENTION": OrgTypesEnum.PREVENTION, "PROTECTION": OrgTypesEnum.PROTECTION, "PROSECUTION": OrgTypesEnum.PROSECUTION, 'RELIGIOUS': OrgTypesEnum.RELIGIOUS, 'RESEARCH': OrgTypesEnum.RESEARCH, 'UNKNOWN': OrgTypesEnum.UNKNOWN } } cache.set('partner_map_last_update', datetime.utcnow()) ctx = ApplicationContext(DAOContext()) org_dao = ctx.get_object('OrganizationDAO') try: organizations = org_dao.all('name', 'id', 'partners', 'types', 'address') except: logger.error('Error fetching organizations') return HttpResponseServerError(request) i = 0 for org in organizations: new_pmap["nodes"].append({ "name": org.name, "id": str(org.id), "types": org.types, "addr": org.address }) for part in org.partners: partner_id = str(part.id) for j in xrange(0, i): if new_pmap["nodes"][j]["id"] == partner_id: new_pmap["links"].append({"source": i, "target": j}) i += 1 pmap = MongoJSONEncoder().encode(new_pmap) cache.set('partner_map', pmap) return HttpResponse(pmap, content_type="application/json")