示例#1
0
    def post(self, request, *args, **kwargs):
        if not self.form.is_valid():
            return self.get(request, *args, **kwargs)

        if not self.project.is_manager(request.user):
            return HttpResponseForbidden()

        hydrovakken_dir = directories.hydrovakken_dir(self.project)

        filename = request.FILES['shp'].name

        # Remove old hydrovakken
        for filename in os.listdir(hydrovakken_dir):
            filepath = os.path.join(hydrovakken_dir, filename)
            if os.path.isfile(filepath):
                os.remove(filepath)
        models.Hydrovak.objects.filter(project=self.project).delete()

        # Save uploaded files
        for ext in ['shp', 'dbf', 'shx']:
            uploaded_file = request.FILES[ext]
            with open(
                os.path.join(hydrovakken_dir, uploaded_file.name), 'wb+') as f:
                for chunk in uploaded_file.chunks():
                    f.write(chunk)

        datasource = DataSource(
            os.path.join(hydrovakken_dir, request.FILES['shp'].name))
        id_field_name = configuration.get(
            self.project, 'hydrovakken_id_field')
        layer = datasource[0]

        for feature in layer:
            if id_field_name in feature.fields:
                # The shape can contain both LineStrings and
                # MultiLineStrings - to be able to save both we
                # convert them all to multis
                geom = fromstr(feature.geom.ewkt)
                if isinstance(geom, LineString):
                    geom = MultiLineString(geom)

                hydrovak, created = models.Hydrovak.objects.get_or_create(
                    project=self.project,
                    br_ident=unicode(feature[id_field_name]),
                    defaults={'the_geom': geom})
                if not created:
                    hydrovak.the_geom = geom
                    hydrovak.save()
            else:
                logger.debug("id_field_name not present")
                logger.debug(feature.fields)

        return HttpResponseRedirect(reverse(
                'lizard_progress_downloadhomeview', kwargs={
                    'project_slug': self.project.slug}))
示例#2
0
    def get(self, request, filetype, project_slug,
            contractor_slug, filename):
        project = get_object_or_404(Project, slug=project_slug)
        if contractor_slug == 'x':
            contractor = None
        else:
            contractor = get_object_or_404(Contractor, slug=contractor_slug)

        if not has_access(request.user, project, contractor):
            return HttpResponseForbidden()

        if filetype == 'reports':
            directory = directories.reports_dir(project, contractor)
        elif filetype == 'results':
            directory = directories.reports_dir(project, contractor)
        elif filetype == 'locations':
            logger.debug("Looking for {0}".format(filename))
            directory = directories.location_shapefile_dir(project, contractor)
            logger.debug("Trying in {0}".format(directory))
            for path in directories.all_files_in(directory):
                logger.debug("... {0}".format(path))
                if os.path.basename(path) == filename:
                    directory = os.path.dirname(path)
                    break
            else:
                raise http.Http404()
        elif filetype == 'organization':
            directory = directories.organization_files_dir(
                project.organization)
        elif filetype == 'hydrovakken':
            directory = directories.hydrovakken_dir(project)
            for path in directories.all_files_in(directory):
                if os.path.basename(path) == filename:
                    directory = os.path.dirname(path)
                    break
            else:
                raise http.Http404()
        elif filetype == 'contractor_hydrovakken':
            directory = directories.shapefile_dir(project, contractor)
            for path in directories.all_files_in(directory):
                if os.path.basename(path) == filename:
                    directory = os.path.dirname(path)
                    break
            else:
                raise http.Http404()
        else:
            return HttpResponseForbidden()

        path = os.path.join(directory, filename)

        if not os.path.exists(path):
            raise http.Http404()

        return serve(request, path, '/')
示例#3
0
 def _hydrovakken_files(self):
     if has_access(self.user, self.project):
         for path in directories.all_files_in(
             directories.hydrovakken_dir(self.project),
             extension=".shp"):
             yield {
             'description':
                 "Hydrovakken {project}".format(project=self.project),
             'urls': {
                 'shp': self._make_url(
                         'hydrovakken', self.project, None, path),
                 'dbf': self._make_url(
                         'hydrovakken', self.project, None,
                         path.replace('.shp', '.dbf')),
                 'shx': self._make_url(
                         'hydrovakken', self.project, None,
                         path.replace('.shp', '.shx'))
                 }}