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, '/')
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) }
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({})
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()