class CreateOperationMutation(graphene.Mutation): Arguments = create_mutation_arguments(OperationForm) operation = graphene.Field("core.queries.OperationType") def mutate(self, info, **kwargs): if not info.context.user: raise GraphQLError(json.dumps({"error": "Not authorized"})) kwargs["user"] = info.context.user.id if "slot" in kwargs: slot = info.context.user.slots.filter(id=kwargs["slot"]) if not slot: raise GraphQLError('{"slot": ["Does not exist"]}') if "project" in kwargs: project = info.context.user.projects.filter( id=kwargs["project"]).first() if not project: raise GraphQLError('{"project": ["Does not exist"]}') form = OperationForm(kwargs) if form.is_valid(): form.save() if "project" in kwargs: form.instance.project_order = ProjectOperationLink.objects.get( project=project, operation=form.instance).project_order return CreateOperationMutation(operation=form.instance) raise GraphQLError(json.dumps(form.errors))
class UpdateProjectSettingsMutation(graphene.Mutation): Arguments = create_mutation_arguments(ProjectSettingsForm) user = graphene.Field("core.queries.UserType") def mutate(self, info, **kwargs): if not info.context.user: raise GraphQLError(json.dumps({"error": "Not authorized"})) form = ProjectSettingsForm(kwargs, instance=info.context.user) if form.is_valid(): form.save() return UpdateProjectSettingsMutation(user=form.instance) raise GraphQLError(json.dumps(form.errors))
class UpdatePasswordMutation(graphene.Mutation): Arguments = create_mutation_arguments(UpdatePasswordForm) success = graphene.Boolean() def mutate(self, info, **kwargs): if not info.context.user: raise GraphQLError(json.dumps({"error": "Not authorized"})) form = UpdatePasswordForm(kwargs, instance=info.context.user) if form.is_valid(): form.save() return UpdatePasswordMutation(success=True) raise GraphQLError(json.dumps(form.errors))
class CreateProjectMutation(graphene.Mutation): Arguments = create_mutation_arguments(ProjectForm) project = graphene.Field("core.queries.ProjectType") def mutate(self, info, **kwargs): if not info.context.user: raise GraphQLError(json.dumps({"error": "Not authorized"})) kwargs["user"] = info.context.user.id form = ProjectForm(kwargs) if form.is_valid(): form.save() return CreateProjectMutation(project=form.instance) raise GraphQLError(json.dumps(form.errors))
class UpdateUserImageMutation(graphene.Mutation): Arguments = create_mutation_arguments(UpdateUserImageForm) user = graphene.Field("core.queries.UserType") def mutate(self, info, **kwargs): if not info.context.user: raise GraphQLError('{"user": "******"}') form = UpdateUserImageForm(kwargs, files=kwargs, instance=info.context.user) if form.is_valid(): form.save() return UpdateUserImageMutation(user=form.instance) raise GraphQLError(json.dumps(form.errors))
class CreateCollectionMutation(graphene.Mutation): Arguments = create_mutation_arguments(CollectionForm) collection = graphene.Field("core.queries.CollectionType") def mutate(self, info, **kwargs): if not info.context.user: raise GraphQLError(json.dumps({"error": "Not authorized"})) form = CollectionForm(kwargs) if form.is_valid(): form.save() CollectionUserLink.objects.create(collection=form.instance, user=info.context.user, permission=4) return CreateCollectionMutation(collection=form.instance) raise GraphQLError(json.dumps(form.errors))
class UpdateProjectCategoryMutation(graphene.Mutation): Arguments = create_mutation_arguments(ProjectCategoryForm, edit=True) category = graphene.Field("core.queries.ProjectCategoryType") def mutate(self, info, **kwargs): if not info.context.user: raise GraphQLError(json.dumps({"error": "Not authorized"})) kwargs["user"] = info.context.user.id category = info.context.user.project_categories.filter(id=kwargs["id"]) if not category: raise GraphQLError('{"category": ["Does not exist"]}') category = category.first() form = ProjectCategoryForm(kwargs, instance=category) if form.is_valid(): form.save() return UpdateProjectCategoryMutation(category=form.instance) raise GraphQLError(json.dumps(form.errors))
class UpdateSlotMutation(graphene.Mutation): Arguments = create_mutation_arguments(SlotForm, edit=True) slot = graphene.Field("core.queries.SlotType") def mutate(self, info, **kwargs): if not info.context.user: raise GraphQLError(json.dumps({"error": "Not authorized"})) kwargs["user"] = info.context.user.id slot = info.context.user.slots.filter(id=kwargs["id"]) if not slot: raise GraphQLError('{"slot": ["Does not exist"]}') slot = slot.first() form = SlotForm(kwargs, instance=slot) if form.is_valid(): form.save() return UpdateSlotMutation(slot=form.instance) raise GraphQLError(json.dumps(form.errors))
class SignupMutation(graphene.Mutation): Arguments = create_mutation_arguments(SignupForm) access_token = graphene.String() user = graphene.Field("core.queries.UserType") def mutate(self, info, **kwargs): form = SignupForm(kwargs) if form.is_valid(): form.instance.last_login = time.time() form.save() info.context.stratako_refresh_token = form.instance.make_refresh_jwt( ) Slot.objects.create(name="Work", user=form.instance) Slot.objects.create(name="Personal", user=form.instance) return SignupMutation(access_token=form.instance.make_access_jwt(), user=form.instance) raise GraphQLError(json.dumps(form.errors))
class CreateGroupMutation(graphene.Mutation): Arguments = create_mutation_arguments(GroupForm) group = graphene.Field("core.queries.GroupType") user = graphene.Field("core.queries.UserType") def mutate(self, info, **kwargs): if not info.context.user: raise GraphQLError(json.dumps({"error": "Not authorized"})) form = GroupForm(kwargs) if form.is_valid(): form.save() UserGroupLink.objects.create(group=form.instance, user=info.context.user, permission=3) return CreateGroupMutation(group=form.instance, user=info.context.user) raise GraphQLError(json.dumps(form.errors))
class UpdateGroupMutation(graphene.Mutation): Arguments = create_mutation_arguments(GroupForm, edit=True) group = graphene.Field("core.queries.GroupType") user = graphene.Field("core.queries.UserType") def mutate(self, info, **kwargs): if not info.context.user: raise GraphQLError(json.dumps({"error": "Not authorized"})) group = Group.objects.filter(id=kwargs["id"]) if not group: raise GraphQLError('{"group": ["Does not exist"]}') if not groups_run_by_user(info.context.user).filter(id=kwargs["id"]): raise GraphQLError('{"group": ["Not an admin"]}') form = GroupForm(kwargs, instance=group.first()) if form.is_valid(): form.save() return UpdateGroupMutation(group=form.instance, user=info.context.user) raise GraphQLError(json.dumps(form.errors))
class SignupMutation(graphene.Mutation): Arguments = create_mutation_arguments(SignupForm) access_token = graphene.String() user = graphene.Field("core.queries.UserType") def mutate(self, info, **kwargs): form = SignupForm(kwargs) if form.is_valid(): form.instance.last_login = time.time() form.save() send_welcome_email( form.instance, info.context.META.get("HTTP_ORIGIN", "https://imaps.goodwright.com")) info.context.imaps_refresh_token = form.instance.make_refresh_jwt() info.context.user = form.instance return SignupMutation(access_token=form.instance.make_jwt(900), user=form.instance) raise GraphQLError(json.dumps(form.errors))
class UpdateProjectMutation(graphene.Mutation): Arguments = create_mutation_arguments(ProjectForm, edit=True) project = graphene.Field("core.queries.ProjectType") def mutate(self, info, **kwargs): if not info.context.user: raise GraphQLError(json.dumps({"error": "Not authorized"})) kwargs["user"] = info.context.user.id project = info.context.user.projects.filter(id=kwargs["id"]) if not project: raise GraphQLError('{"project": ["Does not exist"]}') project = project.first() status_at_start = project.status form = ProjectForm(kwargs, instance=project) if form.is_valid(): form.save() if form.instance.status != status_at_start: ProjectStatusChange.objects.create(project=form.instance, original=status_at_start) return UpdateProjectMutation(project=form.instance) raise GraphQLError(json.dumps(form.errors))
class UpdateCollectionMutation(graphene.Mutation): Arguments = create_mutation_arguments(CollectionForm, edit=True, papers=graphene.List(PaperInput)) collection = graphene.Field("core.queries.CollectionType") def mutate(self, info, **kwargs): if not info.context.user: raise GraphQLError(json.dumps({"error": "Not authorized"})) collection = readable_collections( Collection.objects.filter(id=kwargs["id"]), info.context.user).first() if not collection: raise GraphQLError('{"collection": ["Does not exist"]}') if not does_user_have_permission_on_collection(info.context.user, collection, 2): raise GraphQLError( '{"collection": ["You don\'t have permission to edit this collection"]}' ) form = CollectionForm(kwargs, instance=collection) if form.is_valid(): if "papers" in kwargs: collection.papers.all().delete() for paper in kwargs["papers"]: paper_form = PaperForm({ **paper, "collection": collection.id }) if paper_form.is_valid(): paper_form.save() else: raise GraphQLError(json.dumps(paper_form.errors)) form.save() return UpdateCollectionMutation(collection=form.instance) raise GraphQLError(json.dumps(form.errors))
class UpdateSampleMutation(graphene.Mutation): Arguments = create_mutation_arguments(SampleForm, edit=True, collection=graphene.ID()) sample = graphene.Field("core.queries.SampleType") def mutate(self, info, **kwargs): if not info.context.user: raise GraphQLError(json.dumps({"error": "Not authorized"})) sample = readable_samples(Sample.objects.filter(id=kwargs["id"]), info.context.user).first() if not sample: raise GraphQLError('{"sample": ["Does not exist"]}') collection = readable_collections( Collection.objects.filter(id=kwargs.get("collection")), info.context.user).first() if not collection and sample.collection: raise GraphQLError('{"collection": ["Does not exist"]}') if collection and not does_user_have_permission_on_collection( info.context.user, collection, 4): raise GraphQLError( '{"sample": ["The new collection is not owned by you"]}') if not does_user_have_permission_on_sample(info.context.user, sample, 2): raise GraphQLError( '{"sample": ["You don\'t have permission to edit this sample"]}' ) if not collection: kwargs["collection"] = None form = SampleForm(kwargs, instance=sample) if form.is_valid(): form.save() form.instance.collection = collection form.instance.save() return UpdateSampleMutation(sample=form.instance) raise GraphQLError(json.dumps(form.errors))