def test_place_partial_update(self):
        request = RequestFactory().get('')
        request.get_dataset = lambda: self.dataset

        view = PlaceInstanceView()
        view.request = request

        serializer = PlaceSerializer(
            self.place,
            context={
                'view': view,
                'request': request,
                'include_private': True
            },
            data={
                'private-attr': 4,
                'new-attr': 5,
                'geometry': 'POINT(4 5)'
            },
            partial=True,
        )

        self.assert_(serializer.is_valid())
        serializer.save()
        self.assertEqual(json.loads(self.place.data), {
            'public-attr': 1,
            'private-attr': 4,
            'new-attr': 5
        })
        self.assertEqual(self.place.geometry.wkt,
                         GEOSGeometry('POINT(4 5)').wkt)
    def test_visible_has_truthy_boolean_values(self):
        # You should be able to use case-insensitive "on", "yes" and "true" for
        # the visible value (primarily for backwards compatibility).
        request = RequestFactory().get('')
        request.get_dataset = lambda: self.dataset

        view = PlaceInstanceView()
        view.request = request

        self.place.visible = False
        self.place.save()
        self.place.refresh_from_db()

        self.assert_(not self.place.visible)

        serializer = PlaceSerializer(
            self.place,
            context={
                'view': view,
                'request': request
            },
            data={'visible': 'On'},
            partial=True,
        )

        self.assert_(serializer.is_valid())
        serializer.save()
        self.place.refresh_from_db()

        self.assert_(self.place.visible)
Beispiel #3
0
def generate_bulk_content(dataset, submission_set_name, **flags):
    renderer_classes = {
        'csv': CSVRenderer,
        'json': GeoJSONRenderer if submission_set_name == 'places' else JSONRenderer
    }

    if submission_set_name == 'places':
        submissions = dataset.places.all()
        serializer = SimplePlaceSerializer(submissions, many=True)
    else:
        submissions = dataset.submissions.filter(set_name=submission_set_name)
        serializer = SimpleSubmissionSerializer(submissions, many=True)

    # Construct a request for the serializer context
    r_data = {}
    for flag_attr, flag_val in flags.iteritems():
        if flag_val: r_data[flag_attr] = 'true'
    r = RequestFactory().get('', data=r_data)
    r.get_dataset = lambda: dataset

    # Render the data in each format
    serializer.context['request'] = r
    data = serializer.data
    content = {}
    for format, renderer_class in renderer_classes.items():
        renderer = renderer_class()
        content[format] = renderer.render(data)
    return content
def generate_bulk_content(dataset, submission_set_name, format, **flags):
    renderer_classes = {
        'csv': CSVRenderer,
        'json': JSONRenderer,
        'geojson': GeoJSONRenderer
    }

    if submission_set_name == 'places':
        submissions = dataset.places.all()
        serializer = PlaceSerializer(submissions)
        if format == 'json': format = 'geojson'
    else:
        submissions = dataset.submissions.filter(parent__name=submission_set_name)
        serializer = SubmissionSerializer(submissions)

    # Construct a request for the serializer context
    r_data = {}
    for flag_attr, flag_val in flags.iteritems():
        if flag_val: r_data[flag_attr] = 'true'
    r = RequestFactory().get('', data=r_data)
    r.get_dataset = lambda: dataset

    serializer.context['request'] = r
    data = serializer.data
    renderer = renderer_classes.get(format)()
    content = renderer.render(data)
    return content
    def test_place_has_right_number_of_submissions(self):
        request = RequestFactory().get('')
        request.get_dataset = lambda: self.dataset

        serializer = PlaceSerializer(self.place)
        serializer.context = {'request': request}

        self.assertEqual(serializer.data['submission_sets']['comments']['length'], 2)
    def test_place_hides_private_data_by_default(self):
        request = RequestFactory().get('')
        request.get_dataset = lambda: self.dataset

        serializer = PlaceSerializer(self.place, context={'request': request})

        self.assertIn('public-attr', serializer.data)
        self.assertNotIn('private-attr', serializer.data)
    def test_place_has_right_number_of_submissions(self):
        request = RequestFactory().get('')
        request.get_dataset = lambda: self.dataset

        serializer = PlaceSerializer(self.place, context={'request': request})

        self.assertEqual(
            serializer.data['submission_sets']['comments']['length'], 2)
    def test_can_serlialize_a_null_instance(self):
        request = RequestFactory().get('')
        request.get_dataset = lambda: self.dataset

        serializer = PlaceSerializer(None, context={'request': request})

        data = serializer.data
        self.assertIsInstance(data, dict)
Beispiel #9
0
    def test_place_has_right_number_of_submissions(self):
        request = RequestFactory().get("")
        request.get_dataset = lambda: self.dataset

        serializer = PlaceSerializer(self.place)
        serializer.context = {"request": request}

        self.assertEqual(serializer.data["submission_sets"]["comments"]["length"], 2)
    def test_can_serlialize_a_null_instance(self):
        request = RequestFactory().get('')
        request.get_dataset = lambda: self.dataset

        serializer = PlaceSerializer(None)
        serializer.context = {'request': request}

        data = serializer.data
        self.assertIsInstance(data, dict)
    def test_submission_includes_private_data_when_specified(self):
        request = RequestFactory().get('')
        request.get_dataset = lambda: self.dataset

        serializer = SubmissionSerializer(self.submission,
                                          context={
                                              'request': request,
                                              'include_private': True
                                          })

        self.assertIn('public-attr', serializer.data)
        self.assertIn('private-attr', serializer.data)
Beispiel #12
0
def load_dataset_archive(dataset_id, archive_url):
    dataset = DataSet.objects.get(id=dataset_id)

    archive_response = requests.get(archive_url)

    if archive_response.status_code == 200:
        data = archive_response.json()

        # Preload users
        users_map = preload_users(data)

        with transaction.atomic():
            # Construct the dataset from metadata
            metadata = data.get('metadata')
            if metadata:
                metadata.pop('id', None)
                metadata.pop('owner', None)
                serializer = SimpleDataSetSerializer(dataset,
                                                     data=data.get('metadata'))
                assert serializer.is_valid, list_errors(serializer.errors)
                serializer.save()

            # Construct each place and submission individually
            for place_data in data.get('features'):
                place_data.pop('type', None)
                place_data.update(place_data.pop('properties', {}))

                place_data.pop('id', None)
                place_data.pop('dataset', None)
                place_data.pop('created_datetime', None)
                place_data.pop('updated_datetime', None)
                submission_sets_data = place_data.pop('submission_sets', {})
                submitter_data = place_data.pop('submitter', None)

                serializer = SimplePlaceSerializer(data=place_data)
                assert serializer.is_valid(), list_errors(serializer.errors)
                # Construct a request for the serializer context
                r = RequestFactory().get('', data={})
                r.get_dataset = lambda: dataset

                # Render the data in each format
                serializer.context['request'] = r
                serializer.save(dataset=dataset,
                                submitter=get_or_create_user(
                                    submitter_data, users_map),
                                silent=True,
                                reindex=False)

                for set_name, submissions_data in submission_sets_data.iteritems(
                ):
                    for submission_data in submissions_data:
                        submission_data.pop('id', None)
                        submission_data.pop('place', None)
                        submission_data.pop('dataset', None)
                        submission_data.pop('attachments', None)
                        submission_data.pop('created_datetime', None)
                        submission_data.pop('updated_datetime', None)
                        submitter_data = submission_data.pop('submitter', None)

                        serializer = SimpleSubmissionSerializer(
                            data=submission_data)
                        assert serializer.is_valid(), list_errors(
                            serializer.errors)
                        submission = serializer.object
                        submission.set_name = set_name
                        submission.place = place
                        submission.dataset = dataset
                        submission.submitter = get_or_create_user(
                            submitter_data, users_map)
                        submission.save(silent=True, reindex=False)

            dataset.reindex()