def import_row(self, row): # generate slugs row['name'] = row['name'].strip() row['email'] = row['email'].lower() if row['url'] and not row['url'].startswith(('http://', 'https://')): row['url'] = 'http://' + row['url'] row['slug'] = slugify(row['name']) row['classification'] = self.get_classification( row.pop('classification__slug', None)) categories = parse_tags(row.pop('categories', '')) categories = list(self.get_categories(categories)) tags = parse_tags(row.pop('tags', '')) # Backwards compatible handling of topic__slug topic_slug = row.pop('topic__slug', None) if topic_slug: tags.append(self.get_topic(topic_slug)) # resolve foreign keys row['jurisdiction'] = self.get_jurisdiction( row.pop('jurisdiction__slug')) parent = row.pop('parent__name', None) if parent: row['parent'] = PublicBody.objects.get(slug=slugify(parent)) # get optional values for n in ('description', 'other_names', 'request_note', 'website_dump'): row[n] = row.get(n, '') try: if 'id' in row and row['id']: pb = PublicBody.objects.get(id=row['id']) else: pb = PublicBody.objects.get(slug=row['slug']) # If it exists, update it row.pop('id', None) # Do not update id though row['_updated_by'] = self.user PublicBody.objects.filter(id=pb.id).update(**row) pb.laws.clear() pb.laws.add(*row['jurisdiction'].laws) pb.tags.set(*tags) pb.categories.set(*categories) return pb except PublicBody.DoesNotExist: pass row.pop('id', None) # Remove id if present public_body = PublicBody(**row) public_body._created_by = self.user public_body._updated_by = self.user public_body.confirmed = True public_body.site = self.site public_body.save() public_body.laws.add(*row['jurisdiction'].laws) public_body.tags.set(*list(tags)) return public_body
def import_row(self, row): # generate slugs row['name'] = row['name'].strip() row['email'] = row['email'].lower() if row['url'] and not row['url'].startswith(('http://', 'https://')): row['url'] = 'http://' + row['url'] row['slug'] = slugify(row['name']) row['classification_slug'] = slugify(row['classification']) def comma_splitter(tag_string): return [t.strip() for t in tag_string.split(',') if t.strip()] tags = comma_splitter(row.pop('tags', '')) # Backwards compatible handling of topic__slug topic_slug = row.pop('topic__slug', None) if topic_slug: tags.append(self.get_topic(topic_slug)) # resolve foreign keys row['jurisdiction'] = self.get_jurisdiction(row.pop('jurisdiction__slug')) parent = row.pop('parent__name', None) if parent: row['parent'] = PublicBody.objects.get(slug=slugify(parent)) # get optional values for n in ('description', 'other_names', 'request_note', 'website_dump'): row[n] = row.get(n, '') try: if 'id' in row and row['id']: pb = PublicBody.objects.get(id=row['id']) else: pb = PublicBody.objects.get(slug=row['slug']) # If it exists, update it row.pop('id', None) # Do not update id though row['_updated_by'] = self.user PublicBody.objects.filter(id=pb.id).update(**row) pb.laws.clear() pb.laws.add(*row['jurisdiction'].laws) pb.tags.set(*tags) return except PublicBody.DoesNotExist: pass row.pop('id', None) # Remove id if present public_body = PublicBody(**row) public_body._created_by = self.user public_body._updated_by = self.user public_body.confirmed = True public_body.site = self.site public_body.save() public_body.laws.add(*row['jurisdiction'].laws) public_body.tags.set(*list(tags))
def import_row(self, row): # generate slugs row["name"] = row["name"].strip() row["email"] = row["email"].lower() if row["url"] and not row["url"].startswith(("http://", "https://")): row["url"] = "http://" + row["url"] row["slug"] = slugify(row["name"]) row["classification_slug"] = slugify(row["classification"]) tags = parse_tags(row.pop("tags", "")) # Backwards compatible handling of topic__slug topic_slug = row.pop("topic__slug", None) if topic_slug: tags.append(self.get_topic(topic_slug)) # resolve foreign keys row["jurisdiction"] = self.get_jurisdiction(row.pop("jurisdiction__slug")) parent = row.pop("parent__name", None) if parent: row["parent"] = PublicBody.objects.get(slug=slugify(parent)) # get optional values for n in ("description", "other_names", "request_note", "website_dump"): row[n] = row.get(n, "") try: if "id" in row and row["id"]: pb = PublicBody.objects.get(id=row["id"]) else: pb = PublicBody.objects.get(slug=row["slug"]) # If it exists, update it row.pop("id", None) # Do not update id though row["_updated_by"] = self.user PublicBody.objects.filter(id=pb.id).update(**row) pb.laws.clear() pb.laws.add(*row["jurisdiction"].laws) pb.tags.set(*tags) return except PublicBody.DoesNotExist: pass row.pop("id", None) # Remove id if present public_body = PublicBody(**row) public_body._created_by = self.user public_body._updated_by = self.user public_body.confirmed = True public_body.site = self.site public_body.save() public_body.laws.add(*row["jurisdiction"].laws) public_body.tags.set(*list(tags))
def import_row(self, row): # generate slugs row['name'] = row['name'].strip() row['email'] = row['email'].lower() row['slug'] = slugify(row['name']) row['classification_slug'] = slugify(row['classification']) # resolve foreign keys row['topic'] = self.get_topic(row.pop('topic__slug')) row['jurisdiction'] = self.get_jurisdiction( row.pop('jurisdiction__slug')) parent = row.pop('parent__name', None) if parent: row['parent'] = PublicBody.objects.get(slug=slugify(parent)) # get optional values for n in ('description', 'other_names', 'request_note', 'website_dump'): row[n] = row.get(n, '') try: if 'id' in row and row['id']: pb = PublicBody.objects.get(id=row['id']) else: pb = PublicBody.objects.get(slug=row['slug']) # If it exists, update it row.pop('id', None) # Do not update id though row['_updated_by'] = self.user PublicBody.objects.filter(id=pb.id).update(**row) pb.laws.clear() pb.laws.add(*row['jurisdiction'].laws) return except PublicBody.DoesNotExist: pass row.pop('id', None) # Remove id if present public_body = PublicBody(**row) public_body._created_by = self.user public_body._updated_by = self.user public_body.confirmed = True public_body.site = self.site public_body.save() public_body.laws.add(*row['jurisdiction'].laws)
def import_row(self, row): # generate slugs row['name'] = row['name'].strip() row['email'] = row['email'].lower() row['slug'] = slugify(row['name']) row['classification_slug'] = slugify(row['classification']) # resolve foreign keys row['topic'] = self.get_topic(row.pop('topic__slug')) row['jurisdiction'] = self.get_jurisdiction(row.pop('jurisdiction__slug')) parent = row.pop('parent__name', None) if parent: row['parent'] = PublicBody.objects.get(slug=slugify(parent)) # get optional values for n in ('description', 'other_names', 'request_note', 'website_dump'): row[n] = row.get(n, '') try: if 'id' in row and row['id']: pb = PublicBody.objects.get(id=row['id']) else: pb = PublicBody.objects.get(slug=row['slug']) # If it exists, update it row.pop('id', None) # Do not update id though row['_updated_by'] = self.user PublicBody.objects.filter(id=pb.id).update(**row) pb.laws.clear() pb.laws.add(*row['jurisdiction'].laws) return except PublicBody.DoesNotExist: pass row.pop('id', None) # Remove id if present public_body = PublicBody(**row) public_body._created_by = self.user public_body._updated_by = self.user public_body.confirmed = True public_body.site = self.site public_body.save() public_body.laws.add(*row['jurisdiction'].laws)
def submit_request(request, public_body=None): error = False foilaw = None if public_body is not None: public_body = get_object_or_404(PublicBody, slug=public_body) if not public_body.email: raise Http404 all_laws = FoiLaw.objects.filter(jurisdiction=public_body.jurisdiction) else: all_laws = FoiLaw.objects.all() context = {"public_body": public_body} request_form = RequestForm(all_laws, FoiLaw.get_default_law(), True, request.POST) context["request_form"] = request_form context["public_body_form"] = PublicBodyForm() if public_body is None and request.POST.get("public_body") == "new": pb_form = PublicBodyForm(request.POST) context["public_body_form"] = pb_form if pb_form.is_valid(): data = pb_form.cleaned_data data["confirmed"] = False # Take the first jurisdiction there is data["jurisdiction"] = Jurisdiction.objects.all()[0] data["slug"] = slugify(data["name"]) public_body = PublicBody(**data) else: error = True if not request_form.is_valid(): error = True else: if ( public_body is None and request_form.cleaned_data["public_body"] != "" and request_form.cleaned_data["public_body"] != "new" ): public_body = request_form.public_body_object context["user_form"] = None user = None if not request.user.is_authenticated(): user_form = NewUserForm(request.POST) context["user_form"] = user_form if not user_form.is_valid(): error = True else: user = request.user if not error: password = None if user is None: user, password = AccountManager.create_user(**user_form.cleaned_data) sent_to_pb = 1 if public_body is not None and public_body.pk is None: public_body._created_by = user public_body.save() sent_to_pb = 2 elif public_body is None: sent_to_pb = 0 if foilaw is None: if public_body is not None: foilaw = public_body.default_law else: foilaw = request_form.foi_law foi_request = FoiRequest.from_request_form( user, public_body, foilaw, form_data=request_form.cleaned_data, post_data=request.POST ) if user.is_active: if sent_to_pb == 0: messages.add_message( request, messages.INFO, _("Others can now suggest the Public Bodies for your request.") ) elif sent_to_pb == 2: messages.add_message( request, messages.INFO, _( "Your request will be sent as soon as the newly created Public Body was confirmed by an administrator." ), ) else: messages.add_message(request, messages.INFO, _("Your request has been sent.")) return redirect(u"%s%s" % (foi_request.get_absolute_url(), _("?request-made"))) else: AccountManager(user).send_confirmation_mail(request_id=foi_request.pk, password=password) messages.add_message( request, messages.INFO, _("Please check your inbox for mail from us to confirm your mail address.") ) # user cannot access the request yet! return redirect("/") messages.add_message( request, messages.ERROR, _("There were errors in your form submission. Please review and submit again.") ) return render(request, "foirequest/request.html", context, status=400)
def submit_request(request, public_body=None): error = False foilaw = None if public_body is not None: public_body = get_object_or_404(PublicBody, slug=public_body) if not public_body.email: raise Http404 all_laws = FoiLaw.objects.filter(jurisdiction=public_body.jurisdiction) else: all_laws = FoiLaw.objects.all() context = {"public_body": public_body} request_form = RequestForm(all_laws, FoiLaw.get_default_law(), True, request.POST) context['request_form'] = request_form context['public_body_form'] = PublicBodyForm() if (public_body is None and request.POST.get('public_body') == "new"): pb_form = PublicBodyForm(request.POST) context["public_body_form"] = pb_form if pb_form.is_valid(): data = pb_form.cleaned_data data['confirmed'] = False # Take the first jurisdiction there is data['jurisdiction'] = Jurisdiction.objects.all()[0] data['slug'] = slugify(data['name']) public_body = PublicBody(**data) else: error = True if not request_form.is_valid(): error = True else: if (public_body is None and request_form.cleaned_data['public_body'] != '' and request_form.cleaned_data['public_body'] != 'new'): public_body = request_form.public_body_object context['user_form'] = None user = None if not request.user.is_authenticated(): user_form = NewUserForm(request.POST) context['user_form'] = user_form if not user_form.is_valid(): error = True else: user = request.user if not error: password = None if user is None: user, password = AccountManager.create_user(**user_form.cleaned_data) sent_to_pb = 1 if public_body is not None and public_body.pk is None: public_body._created_by = user public_body.save() sent_to_pb = 2 elif public_body is None: sent_to_pb = 0 if foilaw is None: if public_body is not None: foilaw = public_body.default_law else: foilaw = request_form.foi_law foi_request = FoiRequest.from_request_form( user, public_body, foilaw, form_data=request_form.cleaned_data, post_data=request.POST ) if user.is_active: if sent_to_pb == 0: messages.add_message(request, messages.INFO, _('Others can now suggest the Public Bodies for your request.')) elif sent_to_pb == 2: messages.add_message(request, messages.INFO, _('Your request will be sent as soon as the newly created Public Body was confirmed by an administrator.')) else: messages.add_message(request, messages.INFO, _('Your request has been sent.')) return redirect(u'%s%s' % (foi_request.get_absolute_url(), _('?request-made'))) else: AccountManager(user).send_confirmation_mail(request_id=foi_request.pk, password=password) messages.add_message(request, messages.INFO, _('Please check your inbox for mail from us to confirm your mail address.')) # user cannot access the request yet! return redirect("/") messages.add_message(request, messages.ERROR, _('There were errors in your form submission. Please review and submit again.')) return render(request, 'foirequest/request.html', context, status=400)
def import_row(self, row): # generate slugs if 'name' in row: row['name'] = row['name'].strip() if 'email' in row: row['email'] = row['email'].lower() if 'url' in row: if row['url'] and not row['url'].startswith( ('http://', 'https://')): row['url'] = 'http://' + row['url'] if 'slug' not in row and 'name' in row: row['slug'] = slugify(row['name']) if 'classification' in row: row['classification'] = self.get_classification( row.pop('classification', None)) categories = row.pop('categories', '').split(',') categories = list(self.get_categories(categories)) # resolve foreign keys if 'jurisdiction__slug' in row: row['jurisdiction'] = self.get_jurisdiction( row.pop('jurisdiction__slug')) regions = None if 'georegion_id' in row: regions = [self.get_georegion(id=row.pop('georegion_id'))] elif 'georegion_identifier' in row: regions = [ self.get_georegion(identifier=row.pop('georegion_identifier')) ] elif 'regions' in row: regions = row.pop('regions') if regions: regions = [ self.get_georegion(id=r) for r in regions.split(',') ] parent = row.pop('parent__name', None) if parent: row['parent'] = PublicBody._default_manager.get( slug=slugify(parent)) parent = row.pop('parent__id', None) if parent: row['parent'] = PublicBody._default_manager.get(pk=parent) # get optional values for n in ('description', 'other_names', 'request_note', 'website_dump', 'wikidata_item'): if n in row: row[n] = row.get(n, '').strip() if 'lat' in row and 'lng' in row: lat = row.pop('lat') lng = row.pop('lng') if lat and lng: row['geo'] = Point(float(lng), float(lat)) try: if 'id' in row and row['id']: pb = PublicBody._default_manager.get(id=row['id']) elif row.get('source_reference'): pb = PublicBody._default_manager.get( source_reference=row['source_reference']) else: pb = PublicBody._default_manager.get(slug=row['slug']) # If it exists, update it row.pop('id', None) # Do not update id though row.pop('slug', None) # Do not update slug either row['_updated_by'] = self.user row['updated_at'] = timezone.now() PublicBody._default_manager.filter(id=pb.id).update(**row) pb.laws.clear() pb.laws.add(*row['jurisdiction'].laws) if regions: pb.regions.set(regions) pb.categories.set(*categories) return pb except PublicBody.DoesNotExist: pass row.pop('id', None) # Remove id if present pb = PublicBody(**row) pb._created_by = self.user pb._updated_by = self.user pb.created_at = timezone.now() pb.updated_at = timezone.now() pb.confirmed = True pb.site = self.site pb.save() pb.laws.add(*row['jurisdiction'].laws) if regions: pb.regions.set(regions) pb.categories.set(*categories) return pb
def submit_request(request, public_body=None): error = False foi_law = None if public_body is not None: public_body = get_object_or_404(PublicBody, slug=public_body) if not public_body.email: raise Http404 all_laws = FoiLaw.objects.filter(jurisdiction=public_body.jurisdiction) else: all_laws = FoiLaw.objects.all() context = {"public_body": public_body} request_form = RequestForm(user=request.user, list_of_laws=all_laws, default_law=FoiLaw.get_default_law(), data=request.POST) context['request_form'] = request_form context['public_body_form'] = PublicBodyForm() if (public_body is None and request.POST.get('public_body') == "new"): pb_form = PublicBodyForm(request.POST) context["public_body_form"] = pb_form if pb_form.is_valid(): data = pb_form.cleaned_data data['confirmed'] = False # Take the first jurisdiction there is data['jurisdiction'] = Jurisdiction.objects.all()[0] data['slug'] = slugify(data['name']) public_body = PublicBody(**data) else: error = True if not request_form.is_valid(): error = True else: if (public_body is None and request_form.cleaned_data['public_body'] != '' and request_form.cleaned_data['public_body'] != 'new'): public_body = request_form.public_body_object context['user_form'] = None user = None if not request.user.is_authenticated: user_form = NewUserForm(request.POST) context['user_form'] = user_form if not user_form.is_valid(): error = True else: user = request.user if error: messages.add_message(request, messages.ERROR, _('There were errors in your form submission. Please review and submit again.')) return render(request, 'foirequest/request.html', context, status=400) password = None if user is None: user, password = AccountManager.create_user(**user_form.cleaned_data) sent_to_pb = 1 if public_body is not None and public_body.pk is None: public_body._created_by = user public_body.save() sent_to_pb = 2 elif public_body is None: sent_to_pb = 0 if foi_law is None: if public_body is not None: foi_law = public_body.default_law else: foi_law = request_form.foi_law kwargs = registry.run_hook('pre_request_creation', request, user=user, public_body=public_body, foi_law=foi_law, form_data=request_form.cleaned_data, post_data=request.POST ) foi_request = FoiRequest.from_request_form(**kwargs) if user.is_active: if sent_to_pb == 0: messages.add_message(request, messages.INFO, _('Others can now suggest the Public Bodies for your request.')) elif sent_to_pb == 2: messages.add_message(request, messages.INFO, _('Your request will be sent as soon as the newly created Public Body was confirmed by an administrator.')) else: messages.add_message(request, messages.INFO, _('Your request has been sent.')) if request_form.cleaned_data['redirect_url']: redirect_url = request_form.cleaned_data['redirect_url'] if is_safe_url(redirect_url, allowed_hosts=settings.ALLOWED_REDIRECT_HOSTS): return redirect(redirect_url) return redirect(u'%s%s' % (foi_request.get_absolute_url(), _('?request-made'))) else: AccountManager(user).send_confirmation_mail(request_id=foi_request.pk, password=password) messages.add_message(request, messages.INFO, _('Please check your inbox for mail from us to confirm your mail address.')) # user cannot access the request yet! return redirect("/")
def import_row(self, row): # generate slugs if 'name' in row: row['name'] = row['name'].strip() if 'email' in row: row['email'] = row['email'].lower() if 'url' in row: if row['url'] and not row['url'].startswith( ('http://', 'https://')): row['url'] = 'http://' + row['url'] if 'slug' not in row and 'name' in row: row['slug'] = slugify(row['name']) if 'classification' in row: row['classification'] = self.get_classification( row.pop('classification', None)) categories = parse_tags(row.pop('categories', '')) categories = list(self.get_categories(categories)) tags = parse_tags(row.pop('tags', '')) # Backwards compatible handling of topic__slug topic_slug = row.pop('topic__slug', None) if topic_slug: tags.append(self.get_topic(topic_slug)) # resolve foreign keys if 'jurisdiction__slug' in row: row['jurisdiction'] = self.get_jurisdiction( row.pop('jurisdiction__slug')) regions = None if 'georegion_id' in row: regions = [self.get_georegion(id=row.pop('georegion_id'))] elif 'georegion_identifier' in row: regions = [ self.get_georegion(identifier=row.pop('georegion_identifier')) ] elif 'regions' in row: regions = row.pop('regions') if regions: regions = [ self.get_georegion(id=r) for r in regions.split(',') ] parent = row.pop('parent__name', None) if parent: row['parent'] = PublicBody.objects.get(slug=slugify(parent)) parent = row.pop('parent__id', None) if parent: row['parent'] = PublicBody.objects.get(pk=parent) # get optional values for n in ('description', 'other_names', 'request_note', 'website_dump'): if n in row: row[n] = row.get(n, '').strip() try: if 'id' in row and row['id']: pb = PublicBody.objects.get(id=row['id']) else: pb = PublicBody.objects.get(slug=row['slug']) # If it exists, update it row.pop('id', None) # Do not update id though row.pop('slug', None) # Do not update slug either row['_updated_by'] = self.user row['updated_at'] = timezone.now() PublicBody.objects.filter(id=pb.id).update(**row) pb.laws.clear() pb.laws.add(*row['jurisdiction'].laws) pb.tags.set(*tags) if regions: pb.regions.set(*regions) pb.categories.set(*categories) return pb except PublicBody.DoesNotExist: pass row.pop('id', None) # Remove id if present pb = PublicBody(**row) pb._created_by = self.user pb._updated_by = self.user pb.created_at = timezone.now() pb.updated_at = timezone.now() pb.confirmed = True pb.site = self.site pb.save() pb.laws.add(*row['jurisdiction'].laws) pb.tags.set(*list(tags)) if regions: pb.regions.set(*regions) pb.categories.set(*categories) return pb