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()
Example #2
0
    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