Update snapshot node and mutation

This commit is contained in:
Ramon Wenger 2021-05-06 23:17:48 +02:00
parent 3d78761e20
commit e990596af5
4 changed files with 150 additions and 95 deletions

198
Pipfile.lock generated
View File

@ -25,10 +25,10 @@
},
"autopep8": {
"hashes": [
"sha256:9e136c472c475f4ee4978b51a88a494bfcd4e3ed17950a44a988d9e434837bea",
"sha256:cae4bc0fb616408191af41d062d7ec7ef8679c7f27b068875ca3a9e2878d5443"
"sha256:276ced7e9e3cb22e5d7c14748384a5cf5d9002257c0ed50c0e075b68011bb6d0",
"sha256:aa213493c30dcdac99537249ee65b24af0b2c29f2e83cd8b3f68760441ed0db9"
],
"version": "==1.5.5"
"version": "==1.5.7"
},
"backcall": {
"hashes": [
@ -55,18 +55,18 @@
},
"boto3": {
"hashes": [
"sha256:1ca39de26205439832fa740fcc200de85f107b615dae445f869a16b76672e663",
"sha256:d6716f6701aae771f6ff2386a1d641855a99a9fedd64bd25476b83bacdd50c94"
"sha256:1db618cfe0e9d8c6ff4fc31ef4f9620bd72f472da0f3095f0be9372d77b671e9",
"sha256:61fe8cbb2d4bf1c9a69a73b3f2c68464e0ab587c9367b35f0ef691f372d5ce67"
],
"index": "pypi",
"version": "==1.17.23"
"version": "==1.17.67"
},
"botocore": {
"hashes": [
"sha256:d5ea913331e93cecde25773841397c5d2abbc04f38b1c96c636444e8bb3478f8",
"sha256:f3ae5cae250c3fb200d33abacbee3f0c6513fc6f1d17a851b04a3998de68c829"
"sha256:4666fb5bdf7d78c51d465bac7d9eb1d31c34be46990cd1ad2d1b338bbec8c049",
"sha256:adb26d8bc65761b5a46744f67b7e7096dedb2071aff876e0962cd648f28e9a8f"
],
"version": "==1.20.23"
"version": "==1.20.67"
},
"certifi": {
"hashes": [
@ -84,10 +84,10 @@
},
"decorator": {
"hashes": [
"sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760",
"sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"
"sha256:6f201a6c4dac3d187352661f508b9364ec8091217442c9478f1f83c003a0f060",
"sha256:945d84890bb20cc4a2f4a31fc4311c0c473af65ea318617f13a7257c9a58bc98"
],
"version": "==4.4.2"
"version": "==5.0.7"
},
"dj-database-url": {
"hashes": [
@ -98,11 +98,11 @@
},
"django": {
"hashes": [
"sha256:30c235dec87e05667597e339f194c9fed6c855bda637266ceee891bf9093da43",
"sha256:e319a7164d6d30cb177b3fd74d02c52f1185c37304057bb76d74047889c605d9"
"sha256:db2214db1c99017cbd971e58824e6f424375154fe358afc30e976f5b99fc6060",
"sha256:e831105edb153af1324de44d06091ca75520a227456387dda4a47d2f1cc2731a"
],
"index": "pypi",
"version": "==2.2.19"
"version": "==2.2.22"
},
"django-appconf": {
"hashes": [
@ -113,11 +113,11 @@
},
"django-compressor": {
"hashes": [
"sha256:57ac0a696d061e5fc6fbc55381d2050f353b973fb97eee5593f39247bc0f30af",
"sha256:d2ed1c6137ddaac5536233ec0a819e14009553fee0a869bea65d03e5285ba74f"
"sha256:3358077605c146fdcca5f9eaffb50aa5dbe15f238f8854679115ebf31c0415e0",
"sha256:f8313f59d5e65712fc28787d084fe834997c9dfa92d064a1a3ec3d3366594d04"
],
"index": "pypi",
"version": "==2.4"
"version": "==2.4.1"
},
"django-cors-headers": {
"hashes": [
@ -220,10 +220,10 @@
},
"faker": {
"hashes": [
"sha256:97fb6748031569a65265d38d85370b3c3970f4333b40430d52a60b37dea97877",
"sha256:ee86c3140e1d1651b76a7aab637c7da068660f33937143e7063c663f4cec45ab"
"sha256:156854f36d4086bb21ff85a79b4d6a6403a240cd2c17a33a44b8ea4ff4e957c2",
"sha256:a2ed065342e91a7672407325848cd5728d5e5eb4928d0a1c478fd4f0dd97d1f7"
],
"version": "==6.5.2"
"version": "==8.1.2"
},
"future": {
"hashes": [
@ -290,11 +290,11 @@
},
"ipython": {
"hashes": [
"sha256:04323f72d5b85b606330b6d7e2dc8d2683ad46c3905e955aa96ecc7a99388e70",
"sha256:34207ffb2f653bced2bc8e3756c1db86e7d93e44ed049daae9814fed66d408ec"
"sha256:714810a5c74f512b69d5f3b944c86e592cee0a5fb9c728e582f074610f6cf038",
"sha256:f78c6a3972dde1cc9e4041cbf4de583546314ba52d3c97208e5b6b2221a9cb7d"
],
"index": "pypi",
"version": "==7.21.0"
"version": "==7.23.1"
},
"ipython-genutils": {
"hashes": [
@ -400,6 +400,13 @@
],
"version": "==1.1.1"
},
"matplotlib-inline": {
"hashes": [
"sha256:5cf1176f554abb4fa98cb362aa2b55c500147e4bdbb07e3fda359143e1da0811",
"sha256:f41d5ff73c9f5385775d5c0bc13b424535c8402fe70ea8210f93e11f3683993e"
],
"version": "==0.1.2"
},
"newrelic": {
"hashes": [
"sha256:242a5e901d684f7ffdd621bc58da8fe9a85d5545b4b63e1070589f5ab45c9e1e",
@ -501,10 +508,10 @@
},
"prompt-toolkit": {
"hashes": [
"sha256:0fa02fa80363844a4ab4b8d6891f62dd0645ba672723130423ca4037b80c1974",
"sha256:62c811e46bd09130fb11ab759012a4ae385ce4fb2073442d1898867a824183bd"
"sha256:bf00f22079f5fadc949f42ae8ff7f05702826a97059ffcc6281036ad40ac6f04",
"sha256:e1b4f11b9336a28fa11810bc623c357420f69dfdb6d2dac41ca2c21a55c033bc"
],
"version": "==3.0.16"
"version": "==3.0.18"
},
"psycopg2": {
"hashes": [
@ -536,17 +543,17 @@
},
"pycodestyle": {
"hashes": [
"sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367",
"sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e"
"sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068",
"sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"
],
"version": "==2.6.0"
"version": "==2.7.0"
},
"pygments": {
"hashes": [
"sha256:2656e1a6edcdabf4275f9a3640db59fd5de107d88e8663c5d4e9a0fa62f77f94",
"sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8"
"sha256:a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f",
"sha256:d66e804411278594d764fc69ec36ec13d9ae9147193a1740cd34d272ca383b8e"
],
"version": "==2.8.1"
"version": "==2.9.0"
},
"pyparsing": {
"hashes": [
@ -635,17 +642,17 @@
},
"s3transfer": {
"hashes": [
"sha256:1e28620e5b444652ed752cf87c7e0cb15b0e578972568c6609f0f18212f259ed",
"sha256:7fdddb4f22275cf1d32129e21f056337fd2a80b6ccef1664528145b72c49e6d2"
"sha256:9b3752887a2880690ce628bc263d6d13a3864083aeacff4890c1c9839a5eb0bc",
"sha256:cb022f4b16551edebbb31a377d3f09600dbada7363d8c5db7976e7f47732e1b2"
],
"version": "==0.3.4"
"version": "==0.4.2"
},
"sendgrid": {
"hashes": [
"sha256:2eb1dcb1f7d8656eed4db586e428c2c86f347590b8511d7f92993882d0e4fab9",
"sha256:e422c8263563ac7d664066d2f87b90bcb005b067eb7c33a9b1396442b2ed285b"
"sha256:273bdc0abec649bf6319df7b6267980f79e53ab64e92906d65eea6d4330d00b4",
"sha256:74b0dcf9a79188948f61f456bd1bf67ffa676a5d388aba1c76bff516566d7084"
],
"version": "==6.6.0"
"version": "==6.7.0"
},
"sentry-sdk": {
"hashes": [
@ -664,10 +671,10 @@
},
"six": {
"hashes": [
"sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259",
"sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"
"sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926",
"sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"
],
"version": "==1.15.0"
"version": "==1.16.0"
},
"sqlparse": {
"hashes": [
@ -705,10 +712,11 @@
},
"typing": {
"hashes": [
"sha256:1187fb9c82fd670d10aa07bbb6cfcfe4bdda42d6fab8d5134f04e8c4d0b71cc9",
"sha256:283d868f5071ab9ad873e5e52268d611e851c870a2ba354193026f2dfb29d8b5"
"sha256:12fbdfbe7d6cca1a42e485229afcb0b0c8259258cfb919b8a5e2a5c953742f89",
"sha256:13b4ad211f54ddbf93e5901a9967b1e07720c1d1b78d596ac6a439641aa1b130",
"sha256:c7219ef20c5fbf413b4567092adfc46fa6203cb8454eda33c3fc1afe1398a308"
],
"version": "==3.7.4.3"
"version": "==3.10.0.0"
},
"unidecode": {
"hashes": [
@ -727,10 +735,10 @@
},
"urllib3": {
"hashes": [
"sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80",
"sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73"
"sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df",
"sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937"
],
"version": "==1.26.3"
"version": "==1.26.4"
},
"wagtail": {
"hashes": [
@ -742,10 +750,10 @@
},
"wagtail-autocomplete": {
"hashes": [
"sha256:5f8ddf16d3ca365af4ad0f09e8f45d9e982ca854dc1b084a8a30f66b00a7739d"
"sha256:73602db77eb3eee27f17a0b22aa88badf9fb5079fb1822c921f06a17224ce4db"
],
"index": "pypi",
"version": "==0.6"
"version": "==0.6.3"
},
"wagtail-factories": {
"hashes": [
@ -788,25 +796,25 @@
"develop": {
"asgiref": {
"hashes": [
"sha256:5ee950735509d04eb673bd7f7120f8fa1c9e2df495394992c73234d526907e17",
"sha256:7162a3cb30ab0609f1a4c95938fd73e8604f63bdba516a7f7d64b83ff09478f0"
"sha256:92906c611ce6c967347bbfea733f13d6313901d54dcca88195eaeb52b2a8e8ee",
"sha256:d1216dfbdfb63826470995d31caed36225dcaf34f182e0fa257a4dd9e86f1b78"
],
"version": "==3.3.1"
"version": "==3.3.4"
},
"autopep8": {
"hashes": [
"sha256:9e136c472c475f4ee4978b51a88a494bfcd4e3ed17950a44a988d9e434837bea",
"sha256:cae4bc0fb616408191af41d062d7ec7ef8679c7f27b068875ca3a9e2878d5443"
"sha256:276ced7e9e3cb22e5d7c14748384a5cf5d9002257c0ed50c0e075b68011bb6d0",
"sha256:aa213493c30dcdac99537249ee65b24af0b2c29f2e83cd8b3f68760441ed0db9"
],
"version": "==1.5.5"
"version": "==1.5.7"
},
"awscli": {
"hashes": [
"sha256:191c07061bf227775437bf0b6e6209e0db50affcd8d5a37ba9fe5d87b6b80585",
"sha256:426e2eb8412b59e677ac28603cb6a038bea50ae8fab60ee9edf3756b28d4f419"
"sha256:23aaea71d9b159946bb4b4f9d76b0e7375acde79595d006d988225d1d07692db",
"sha256:d24d33d91f642fdd80ea989b37fddf59e46b2122be5ad04f0f8faee3a1140de8"
],
"index": "pypi",
"version": "==1.19.23"
"version": "==1.19.67"
},
"backcall": {
"hashes": [
@ -817,10 +825,10 @@
},
"botocore": {
"hashes": [
"sha256:d5ea913331e93cecde25773841397c5d2abbc04f38b1c96c636444e8bb3478f8",
"sha256:f3ae5cae250c3fb200d33abacbee3f0c6513fc6f1d17a851b04a3998de68c829"
"sha256:4666fb5bdf7d78c51d465bac7d9eb1d31c34be46990cd1ad2d1b338bbec8c049",
"sha256:adb26d8bc65761b5a46744f67b7e7096dedb2071aff876e0962cd648f28e9a8f"
],
"version": "==1.20.23"
"version": "==1.20.67"
},
"certifi": {
"hashes": [
@ -903,18 +911,18 @@
},
"decorator": {
"hashes": [
"sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760",
"sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"
"sha256:6f201a6c4dac3d187352661f508b9364ec8091217442c9478f1f83c003a0f060",
"sha256:945d84890bb20cc4a2f4a31fc4311c0c473af65ea318617f13a7257c9a58bc98"
],
"version": "==4.4.2"
"version": "==5.0.7"
},
"django": {
"hashes": [
"sha256:30c235dec87e05667597e339f194c9fed6c855bda637266ceee891bf9093da43",
"sha256:e319a7164d6d30cb177b3fd74d02c52f1185c37304057bb76d74047889c605d9"
"sha256:db2214db1c99017cbd971e58824e6f424375154fe358afc30e976f5b99fc6060",
"sha256:e831105edb153af1324de44d06091ca75520a227456387dda4a47d2f1cc2731a"
],
"index": "pypi",
"version": "==2.2.19"
"version": "==2.2.22"
},
"django-silk": {
"hashes": [
@ -946,18 +954,18 @@
},
"ipdb": {
"hashes": [
"sha256:1aa37e19e5b3b96c930fe7fe97193a54202c23a8d1b1c7763f76553f5b275731"
"sha256:178c367a61c1039e44e17c56fcc4a6e7dc11b33561261382d419b6ddb4401810"
],
"index": "pypi",
"version": "==0.13.6"
"version": "==0.13.7"
},
"ipython": {
"hashes": [
"sha256:04323f72d5b85b606330b6d7e2dc8d2683ad46c3905e955aa96ecc7a99388e70",
"sha256:34207ffb2f653bced2bc8e3756c1db86e7d93e44ed049daae9814fed66d408ec"
"sha256:714810a5c74f512b69d5f3b944c86e592cee0a5fb9c728e582f074610f6cf038",
"sha256:f78c6a3972dde1cc9e4041cbf4de583546314ba52d3c97208e5b6b2221a9cb7d"
],
"index": "pypi",
"version": "==7.21.0"
"version": "==7.23.1"
},
"ipython-genutils": {
"hashes": [
@ -1045,6 +1053,13 @@
],
"version": "==1.1.1"
},
"matplotlib-inline": {
"hashes": [
"sha256:5cf1176f554abb4fa98cb362aa2b55c500147e4bdbb07e3fda359143e1da0811",
"sha256:f41d5ff73c9f5385775d5c0bc13b424535c8402fe70ea8210f93e11f3683993e"
],
"version": "==0.1.2"
},
"parso": {
"hashes": [
"sha256:97218d9159b2520ff45eb78028ba8b50d2bc61dcc062a9682666f2dc4bd331ea",
@ -1069,10 +1084,10 @@
},
"prompt-toolkit": {
"hashes": [
"sha256:0fa02fa80363844a4ab4b8d6891f62dd0645ba672723130423ca4037b80c1974",
"sha256:62c811e46bd09130fb11ab759012a4ae385ce4fb2073442d1898867a824183bd"
"sha256:bf00f22079f5fadc949f42ae8ff7f05702826a97059ffcc6281036ad40ac6f04",
"sha256:e1b4f11b9336a28fa11810bc623c357420f69dfdb6d2dac41ca2c21a55c033bc"
],
"version": "==3.0.16"
"version": "==3.0.18"
},
"ptyprocess": {
"hashes": [
@ -1101,17 +1116,17 @@
},
"pycodestyle": {
"hashes": [
"sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367",
"sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e"
"sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068",
"sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"
],
"version": "==2.6.0"
"version": "==2.7.0"
},
"pygments": {
"hashes": [
"sha256:2656e1a6edcdabf4275f9a3640db59fd5de107d88e8663c5d4e9a0fa62f77f94",
"sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8"
"sha256:a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f",
"sha256:d66e804411278594d764fc69ec36ec13d9ae9147193a1740cd34d272ca383b8e"
],
"version": "==2.8.1"
"version": "==2.9.0"
},
"python-dateutil": {
"hashes": [
@ -1174,21 +1189,22 @@
"sha256:78f9a9bf4e7be0c5ded4583326e7461e3a3c5aae24073648b4bdfa797d78c9d2",
"sha256:9d689e6ca1b3038bc82bf8d23e944b6b6037bc02301a574935b2dd946e0353b9"
],
"markers": "python_version > '2.7'",
"version": "==4.7.2"
},
"s3transfer": {
"hashes": [
"sha256:1e28620e5b444652ed752cf87c7e0cb15b0e578972568c6609f0f18212f259ed",
"sha256:7fdddb4f22275cf1d32129e21f056337fd2a80b6ccef1664528145b72c49e6d2"
"sha256:9b3752887a2880690ce628bc263d6d13a3864083aeacff4890c1c9839a5eb0bc",
"sha256:cb022f4b16551edebbb31a377d3f09600dbada7363d8c5db7976e7f47732e1b2"
],
"version": "==0.3.4"
"version": "==0.4.2"
},
"six": {
"hashes": [
"sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259",
"sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"
"sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926",
"sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"
],
"version": "==1.15.0"
"version": "==1.16.0"
},
"sqlparse": {
"hashes": [
@ -1213,10 +1229,10 @@
},
"urllib3": {
"hashes": [
"sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80",
"sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73"
"sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df",
"sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937"
],
"version": "==1.26.3"
"version": "==1.26.4"
},
"wcwidth": {
"hashes": [

View File

@ -7,6 +7,17 @@ query SnapshotDetail($id: ID!) {
title
metaTitle
heroImage
created
changes {
newContentBlocks
newObjectives
hiddenContentBlocks
hiddenObjectives
}
creator {
firstName
lastName
}
chapters {
id
description

View File

@ -1,10 +1,11 @@
import graphene
from django.db.models import Q
from graphene import relay
from api.utils import get_object
from books.models import Module, ContentBlock
from books.models import Module, ContentBlock, Chapter
from books.models.snapshot import Snapshot
from books.schema.nodes import SnapshotNode
from books.schema.nodes import SnapshotNode, ModuleNode
from users.models import SchoolClass
@ -35,6 +36,7 @@ class ApplySnapshot(relay.ClientIDMutation):
selected_class = graphene.ID(required=True)
success = graphene.Boolean()
module = graphene.Field(ModuleNode)
@classmethod
def mutate_and_get_payload(cls, root, info, **args):
@ -43,6 +45,17 @@ class ApplySnapshot(relay.ClientIDMutation):
user = info.context.user
selected_class_id = args.get('selected_class')
selected_class = get_object(SchoolClass, selected_class_id)
#reset everything
for chapter in Chapter.get_by_parent(snapshot.module):
cb_qs = ContentBlock.get_by_parent(chapter)
without_owner = Q(owner__isnull=True)
no_snapshot = Q(contentblocksnapshot__isnull=True)
owner_user = Q(owner=user)
for cb in cb_qs.filter(without_owner & no_snapshot):
cb.hidden_for.remove(selected_class)
for cb in cb_qs.filter(owner_user):
cb.visible_for.remove(selected_class)
#apply snapshot
if not selected_class.users.filter(username=user.username).exists() or not user.is_teacher():
raise PermissionError('Not allowed')
for content_block in snapshot.hidden_content_blocks.all():
@ -55,4 +68,4 @@ class ApplySnapshot(relay.ClientIDMutation):
chapter.title_hidden_for.add(selected_class)
if chapter_snapshot.description_hidden:
chapter.description_hidden_for.add(selected_class)
return cls(success=True)
return cls(success=True, module=snapshot.module)

View File

@ -59,6 +59,11 @@ class SnapshotChapterNode(ObjectType):
title_hidden = graphene.Boolean()
class SnapshotChangesNode(ObjectType):
hidden_objectives = graphene.Int(required=True)
new_objectives = graphene.Int(required=True)
hidden_content_blocks = graphene.Int(required=True)
new_content_blocks = graphene.Int(required=True)
class SnapshotNode(DjangoObjectType):
@ -66,6 +71,7 @@ class SnapshotNode(DjangoObjectType):
chapters = graphene.List(SnapshotChapterNode)
meta_title = graphene.String()
hero_image = graphene.String()
changes = graphene.Field(SnapshotChangesNode)
class Meta:
model = Snapshot
@ -85,7 +91,7 @@ class SnapshotNode(DjangoObjectType):
@staticmethod
def resolve_title(parent, info, **kwargs):
return parent.__str__()
return parent.module.title
@staticmethod
def resolve_meta_title(parent, info, **kwargs):
@ -96,3 +102,12 @@ class SnapshotNode(DjangoObjectType):
if parent.module.hero_image:
return parent.module.hero_image.file.url
return ''
@staticmethod
def resolve_changes(parent, info, **kwargs):
return {
'hidden_objectives': 0,
'new_objectives': 0,
'hidden_content_blocks': parent.hidden_content_blocks.count(),
'new_content_blocks': parent.custom_content_blocks.count()
}