def process_item(item): # Extract infos addr = item['address'] canton = addr['canton'] locality = addr['locality'] lat = addr['latitude'] lng = addr['longitude'] address = addr['formatted_address'] # Remove dots from phid. This cause some bugs with django/tastypie urls raw_phid = item['phid'] phid = re.sub('[\W_]', '', item['phid']) shortname = item['shortname'] url = urlparse.urljoin(ZIVI_DOMAIN, item['url']) # Create or update into DB addr, created = Address.objects.get_or_create(canton=canton, locality=locality, defaults={'latitude':lat, 'longitude':lng}) # Now, the address of the workspec might have changed, in which case # we need to delete the old workspec and create a new one try: ws = WorkSpec.objects.get(phid=phid) ws.address = addr except WorkSpec.DoesNotExist: ws = WorkSpec(phid=phid, address=addr) ws.raw_phid = raw_phid ws.shortname = shortname ws.url = url ws.institution_name = item['institution_name'] ws.institution_description = item['institution_description'] ws.job_title = item['job_title'] ws.job_functions = item['job_functions_list'] ws.activity_domain = item['activity_domain'] ws.language = item['lang'] ws.save() # Update available dates for this workspec. First remove all previous # available dates for dr in ws.daterange_set.all(): dr.delete() for daterange in item['available_dates']: start, end = daterange dr = DateRange(workspec=ws, start=start, end=end) dr.save()
def index(request): # Save current language in session (in case the user used a i18n url) lang = translation.get_language() request.session['django_language'] = lang date_min, date_max = DateRange.get_min_max() form = SearchForm(date_min, date_max, request.GET) if form.is_valid(): cd = form.cleaned_data first_time_message = not request.session.get('visited', False) request.session['visited'] = True workspec_search_url = reverse('api_dispatch_list', kwargs={ 'api_name': 'v1', 'resource_name': 'workspec_search'}) query = MultiValueDict() query['format'] = 'json' for lang in cd['languages']: query.appendlist('language__in', lang) for dom in cd['domains']: query.appendlist('activity_domain__in', dom) start_min = cd['start_min'] end_max = cd['end_max'] if start_min: query['start_min'] = start_min if end_max: query['end_max'] = end_max workspec_search_url += '?' + urlencode(query, doseq=True) address_url = reverse('api_dispatch_list', kwargs={ 'api_name': 'v1', 'resource_name': 'address'}) context = {'search_form' : form, 'first_time_message' : first_time_message, 'workspec_search_url' : workspec_search_url, 'address_url': address_url} return render(request, 'index.html', context) else: return redirect('index')