def test_project_with_unknown_mapping_type_is_invalid(self): project_dto = ProjectDTO() project_dto.mapping_types = ['BAD', 'DATA'] # Act / Assert with self.assertRaises(DataError): project_dto.validate()
def post(self, project_id): """ Updates a Tasking-Manager project --- tags: - project-admin produces: - application/json parameters: - in: header name: Authorization description: Base64 encoded session token required: true type: string default: Token sessionTokenHere== - name: project_id in: path description: The unique project ID required: true type: integer default: 1 - in: body name: body required: true description: JSON object for creating draft project schema: properties: projectStatus: type: string default: DRAFT projectPriority: type: string default: MEDIUM defaultLocale: type: string default: en mapperLevel: type: string default: BEGINNER enforceMapperLevel: type: boolean default: false enforceValidatorRole: type: boolean default: false private: type: boolean default: false changesetComment: type: string default: hotosm-project-1 entitiesToMap: type: string default: Buildings only dueDate: type: date default: "2017-04-11T12:38:49" imagery: type: string default: http//www.bing.com/maps/ josmPreset: type: string default: josm preset goes here mappingTypes: type: array items: type: string default: [BUILDINGS, ROADS] campaignTag: type: string default: malaria organisationTag: type: string default: red cross licenseId: type: integer default: 1 description: Id of imagery license associated with the project allowedUsernames: type: array items: type: string default: ["Iain Hunter", LindaA1] priorityAreas: type: array items: schema: $ref: "#/definitions/GeoJsonPolygon" projectInfoLocales: type: array items: schema: $ref: "#/definitions/ProjectInfo" responses: 200: description: Project updated 400: description: Client Error - Invalid Request 401: description: Unauthorized - Invalid credentials 404: description: Project not found 500: description: Internal Server Error """ try: project_dto = ProjectDTO(request.get_json()) project_dto.project_id = project_id project_dto.validate() except DataError as e: current_app.logger.error(f'Error validating request: {str(e)}') return str(e), 400 try: ProjectAdminService.update_project(project_dto) return {"Status": "Updated"}, 200 except InvalidGeoJson as e: return {"Invalid GeoJson": str(e)}, 400 except NotFound: return {"Error": "Project Not Found"}, 404 except ProjectAdminServiceError as e: return {"error": str(e)}, 400 except Exception as e: error_msg = f'Project GET - unhandled error: {str(e)}' current_app.logger.critical(error_msg) return {"error": error_msg}, 500