Exemplo n.º 1
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, '/')
Exemplo n.º 2
0
 def _organization_files(self):
     for path in directories.files_in(
         directories.organization_files_dir(self.project.organization)):
         yield {
             'type': 'Handleidingen e.d.',
             'filename': os.path.basename(path),
             'size': directories.human_size(path),
             'url': self._make_url('organization',
                                   self.project,
                                   None,
                                   path)
             }
Exemplo n.º 3
0
    def post(self, request):
        organization = models.Organization.get_by_user(request.user)

        uploaded_file = request.FILES['file']
        filename = request.POST.get('filename', uploaded_file.name)

        with open(os.path.join(
                directories.organization_files_dir(organization),
                filename), "wb") as f:
            for chunk in uploaded_file.chunks():
                f.write(chunk)

        return json_response({})
Exemplo n.º 4
0
    def delete(self, request, filetype, project_slug,
            contractor_slug, filename):
        """Delete a downloadable file. For now, only for files without
        contractor ('organization files')."""

        if contractor_slug != 'x' or filetype != 'organization':
            return HttpResponseForbidden()

        project = get_object_or_404(Project, slug=project_slug)

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

        directory = directories.organization_files_dir(
            project.organization)
        path = os.path.join(directory, filename)

        if os.path.exists(path) and os.path.isfile(path):
            os.remove(path)
        else:
            raise http.Http404()

        return HttpResponse()