def get(self, project_id): """ Get HOT Project for mapping --- tags: - projects produces: - application/json parameters: - in: header name: Accept-Language description: Language user is requesting type: string required: true default: en - name: project_id in: path description: Unique project ID required: true type: integer default: 1 - in: query name: as_file type: boolean description: Set to true if file download is preferred default: False responses: 200: description: Project found 403: description: Forbidden 404: description: Project not found 500: description: Internal Server Error """ try: as_file = ( strtobool(request.args.get("as_file")) if request.args.get("as_file") else False ) locale = request.environ.get("HTTP_ACCEPT_LANGUAGE") project_dto = ProjectService.get_project_dto_for_mapper( project_id, None, locale, True ) project_dto = project_dto.to_primitive() if as_file: return send_file( io.BytesIO(geojson.dumps(project_dto).encode("utf-8")), mimetype="application/json", as_attachment=True, attachment_filename=f"project_{str(project_id)}.json", ) return project_dto, 200 except NotFound: return {"Error": "Project Not Found"}, 404 except ProjectServiceError: return {"Error": "Unable to fetch project"}, 403 except Exception as e: error_msg = f"Project GET - unhandled error: {str(e)}" current_app.logger.critical(error_msg) return {"Error": "Unable to fetch project"}, 500 finally: # this will try to unlock tasks that have been locked too long try: ProjectService.auto_unlock_tasks(project_id) except Exception as e: current_app.logger.critical(str(e))
def get(self, project_id): """ Get a specified project including it's area --- tags: - projects produces: - application/json parameters: - in: header name: Authorization description: Base64 encoded session token required: false type: string default: Token sessionTokenHere== - in: header name: Accept-Language description: Language user is requesting type: string required: true default: en - name: project_id in: path description: Unique project ID required: true type: integer default: 1 - in: query name: as_file type: boolean description: Set to true if file download is preferred default: False - in: query name: abbreviated type: boolean description: Set to true if only state information is desired default: False responses: 200: description: Project found 403: description: Forbidden 404: description: Project not found 500: description: Internal Server Error """ try: authenticated_user_id = token_auth.current_user() as_file = ( strtobool(request.args.get("as_file")) if request.args.get("as_file") else False ) abbreviated = ( strtobool(request.args.get("abbreviated")) if request.args.get("abbreviated") else False ) project_dto = ProjectService.get_project_dto_for_mapper( project_id, authenticated_user_id, request.environ.get("HTTP_ACCEPT_LANGUAGE"), abbreviated, ) if project_dto: project_dto = project_dto.to_primitive() if as_file: return send_file( io.BytesIO(geojson.dumps(project_dto).encode("utf-8")), mimetype="application/json", as_attachment=True, attachment_filename=f"project_{str(project_id)}.json", ) return project_dto, 200 else: return {"Error": "Private Project"}, 403 except NotFound: return {"Error": "Project Not Found"}, 404 except ProjectServiceError as e: return {"Error": str(e)}, 403 except Exception as e: error_msg = f"Project GET - unhandled error: {str(e)}" current_app.logger.critical(error_msg) return {"Error": "Unable to fetch project"}, 500 finally: # this will try to unlock tasks that have been locked too long try: ProjectService.auto_unlock_tasks(project_id) except Exception as e: current_app.logger.critical(str(e))