def test_interests(self): if self.skip_tests: return interests = ["interest_number_{0}".format(i) for i in range(1, 9)] [InterestService.create(interest_name=i) for i in interests] interests = InterestService.get_all_interests().to_primitive( )["interests"] self.assertEqual(len(interests), 8) # Create new interest. new_interest = InterestService.create( interest_name="test_new_interest") interests = InterestService.get_all_interests().to_primitive( )["interests"] self.assertEqual(len(interests), 9) # Update interest new_interest.name = "new_interest_name" updated_interest = InterestService.update(new_interest.id, new_interest) self.assertEqual(new_interest.name, updated_interest.name) # Associate users with interest. iids, uids = TestInterestService.relationship_user( interests, self.test_user.id, [1, 4, 5]) self.assertEqual(uids, iids) # Try again. iids, uids = TestInterestService.relationship_user( interests, self.test_user.id, [1, 2]) self.assertEqual(uids, iids) # Validate unexistent interest. with self.assertRaises(NotFound): InterestService.create_or_update_user_interests( self.test_user.id, [0]) # Associate projects with interest. iids, pids = TestInterestService.relationship_project( interests, self.test_project.id, [1, 2]) self.assertEqual(pids, iids) # Validate unexistent interest. with self.assertRaises(NotFound): InterestService.create_or_update_project_interests( self.test_project.id, [0]) # Delete one by one. for interest in interests: InterestService.delete(interest["id"]) interests = InterestService.get_all_interests().to_primitive( )["interests"] self.assertEqual(len(interests), 0)
def relationship_project(interests, project_id, ids): interest_ids = [interests[c]["id"] for c in ids] project_interests = InterestService.create_or_update_project_interests( project_id, interest_ids) project_interests_ids = [ i["id"] for i in project_interests.to_primitive()["interests"] ] return interest_ids, project_interests_ids
def update_project_categories(filename): with open(filename, "r", encoding="ISO-8859-1", newline="") as csvfile: reader = csv.DictReader(csvfile) for row in reader: project_id = int(row.get("projectId")) primary_category = row.get("primaryCat") interest_ids = [] # Map only primary_category interest to projects if primary_category: try: interest = InterestService.get_by_name(primary_category) except NotFound: interest = InterestService.create(primary_category) interest_ids.append(interest.id) try: InterestService.create_or_update_project_interests( project_id, interest_ids) except Exception as e: print(f"Problem updating {project_id}: {type(e)}")
def post(self, project_id): """ Creates a relationship between project and interests --- tags: - interests 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: Unique project ID required: true type: integer default: 1 - in: body name: body required: true description: JSON object for creating/updating project and interests relationships schema: properties: interests: type: array items: type: integer responses: 200: description: New project interest relationship created 400: description: Invalid Request 401: description: Unauthorized - Invalid credentials 403: description: Forbidden 500: description: Internal Server Error """ try: ProjectAdminService.is_user_action_permitted_on_project( token_auth.current_user(), project_id) except ValueError as e: error_msg = f"ProjectsActionsSetInterestsAPI POST: {str(e)}" return {"Error": error_msg}, 403 try: data = request.get_json() project_interests = InterestService.create_or_update_project_interests( project_id, data["interests"]) return project_interests.to_primitive(), 200 except NotFound: return {"Error": "Project not Found"}, 404 except Exception as e: error_msg = ( f"ProjectsActionsSetInterestsAPI POST - unhandled error: {str(e)}" ) current_app.logger.critical(error_msg) return {"Error": error_msg}, 500