Esempio n. 1
0
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")
Esempio n. 2
0
    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
Esempio n. 3
0
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
Esempio n. 4
0
    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
Esempio n. 5
0
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)
Esempio n. 6
0
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")