skillbox/server/handle_content_block.py

116 lines
4.0 KiB
Python

import csv
from wagtail.blocks import StreamValue
from books.models.contentblock import ContentBlock
from books.models.custom_document import CustomDocument
# from books.schema.nodes.content import ContentBlockNode
from graphql_relay import to_global_id
columns = [
"content_block_id",
"document_id",
"old",
"old_s3",
"new",
"module",
"content_block",
]
def format_link_s3(document):
return (
f"https://skillbox-my-kv-prod.s3-eu-west-1.amazonaws.com{document.file.url[6:]}"
)
def format_link_django(document):
return f"https://app.mykv.ch{document.url}"
def handle_all_content_blocks():
with open("source.csv", mode="w", encoding="utf-8") as file:
writer = csv.DictWriter(file, fieldnames=columns)
writer.writeheader()
# print("id,old link,new link,module,content block link")
for cb in ContentBlock.objects.all():
handle_content_block(content_block=cb, contents=cb.contents, writer=writer)
def fill_csv_with_old_data():
with open("source.csv", mode="r", encoding="utf-8") as file:
with open("output.csv", mode="w", encoding="utf-8") as destination:
reader = csv.DictReader(file)
writer = csv.DictWriter(destination, fieldnames=columns)
writer.writeheader()
for row in reader:
try:
document = CustomDocument.objects.get(id=row["document_id"])
old_django_url = format_link_django(document)
old_s3_url = format_link_s3(document)
# print(document.file.url)
# print(row["new"])
row["old"] = old_django_url
row["old_s3"] = old_s3_url
except ValueError:
pass
except CustomDocument.DoesNotExist:
print(f"Document with id {row['document_id']} does not exist")
writer.writerow(row)
def print_document(document, content_block, writer):
content_block_id = content_block.id
try:
# new_link = f"https://skillbox-my-kv-prod.s3-eu-west-1.amazonaws.com{document.file.url[6:]}"
new_link = format_link_django(document)
document_id = document.id
except AttributeError:
new_link = "missing document"
document_id = ""
module_slug = content_block.get_parent().get_parent().slug
module_url = f"https://app.mykv.ch/module/{module_slug}"
# content_block_node = ContentBlockNode(content_block)
# content_block_path = content_block_node.resolve_path(content_block, None)
node_id = to_global_id("ContentBlockNode", content_block.id)
# content_block_url = f"https://app.mykv.ch/{content_block_path}"
content_block_url = f"https://app.mykv.ch/content/{node_id}"
# print(f"{id},,{new_link},{module_url}")
row = {
"content_block_id": content_block_id,
"document_id": document_id,
"old": "",
"old_s3": "",
"new": new_link,
"module": module_url,
"content_block": content_block_url,
}
writer.writerow(row)
# writer.writerow(
# [content_block_id, document_id, "", new_link, module_url, content_block_url]
# )
def handle_content_block(content_block: ContentBlock, contents: StreamValue, writer):
# contents: StreamValue
document_blocks = contents.blocks_by_name("cms_document_block")
instruction_block = contents.blocks_by_name("instruction")
solution_block = contents.blocks_by_name("solution")
list_item_blocks = contents.blocks_by_name("content_list_item")
for li in list_item_blocks:
handle_content_block(
contents=li.value, content_block=content_block, writer=writer
)
for db in document_blocks:
document = db.value
print_document(document, content_block, writer)
for ib in instruction_block:
document = ib.value["document"]
print_document(document, content_block, writer)
for sb in solution_block:
document = sb.value["document"]
print_document(document, content_block, writer)