Initial commit
This commit is contained in:
commit
834119102f
|
@ -0,0 +1 @@
|
|||
.env*
|
|
@ -0,0 +1,18 @@
|
|||
# migrations.accords-library.com
|
||||
|
||||
Provides to Accord's Library the tools to make migrations of the database.
|
||||
|
||||
## Credentials to Strapi
|
||||
|
||||
Create a .env.local file with the following information:
|
||||
```txt
|
||||
URL_GRAPHQL=https://path.to.strapi.com/graphql
|
||||
ACCESS_TOKEN=token_generated_by_strapi
|
||||
```
|
||||
|
||||
Then run the script using:
|
||||
|
||||
```bash
|
||||
python3 prog.py
|
||||
```
|
||||
|
|
@ -0,0 +1,151 @@
|
|||
from gql import Client, gql
|
||||
from gql.transport.aiohttp import AIOHTTPTransport
|
||||
|
||||
|
||||
# STEP 1: SETUP
|
||||
|
||||
urlGraphQL = ""
|
||||
accessToken = ""
|
||||
|
||||
with open(".env.local", "r") as configFile:
|
||||
for line in configFile.readlines():
|
||||
if line.startswith("URL_GRAPHQL="):
|
||||
urlGraphQL = line[len("URL_GRAPHQL="):-1]
|
||||
elif line.startswith("ACCESS_TOKEN="):
|
||||
accessToken = line[len("ACCESS_TOKEN="):-1]
|
||||
|
||||
|
||||
# Select your transport with a defined url endpoint
|
||||
transport = AIOHTTPTransport(url=urlGraphQL, headers={
|
||||
'Authorization': "Bearer " + accessToken})
|
||||
|
||||
# Create a GraphQL client using the defined transport
|
||||
client = Client(transport=transport, fetch_schema_from_transport=True)
|
||||
|
||||
# Provide a GraphQL query
|
||||
migrationContentsIds = gql(
|
||||
"""
|
||||
query migrationContentsIds {
|
||||
contents(pagination: { limit: -1 }) {
|
||||
data {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
)
|
||||
|
||||
mutation = gql(
|
||||
"""
|
||||
mutation updateContent($id: ID!, $data: ContentInput!) {
|
||||
updateContent(id: $id, data: $data) {
|
||||
data {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
)
|
||||
|
||||
migrationContent = gql(
|
||||
"""
|
||||
query migrationContent($id: ID!) {
|
||||
content(id: $id) {
|
||||
data {
|
||||
attributes {
|
||||
titles {
|
||||
language {
|
||||
data {
|
||||
id
|
||||
}
|
||||
}
|
||||
pre_title
|
||||
title
|
||||
subtitle
|
||||
description
|
||||
}
|
||||
text_set {
|
||||
language {
|
||||
data {
|
||||
id
|
||||
}
|
||||
}
|
||||
status
|
||||
source_language {
|
||||
data {
|
||||
id
|
||||
}
|
||||
}
|
||||
transcribers {
|
||||
data {
|
||||
id
|
||||
}
|
||||
}
|
||||
translators {
|
||||
data {
|
||||
id
|
||||
}
|
||||
}
|
||||
proofreaders {
|
||||
data {
|
||||
id
|
||||
}
|
||||
}
|
||||
notes
|
||||
text
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
)
|
||||
|
||||
|
||||
# STEP 2: GET LIST OF IDS
|
||||
|
||||
# Execute the query on the transport
|
||||
ids = client.execute(migrationContentsIds)["contents"]["data"]
|
||||
ids = [id["id"] for id in ids]
|
||||
|
||||
|
||||
for id in ids:
|
||||
# STEP 3: GET DATA FROM SPECIFIC ID
|
||||
content = client.execute(migrationContent, variable_values={"id": id})[
|
||||
"content"]["data"]["attributes"]
|
||||
|
||||
# STEP 4: TRANSFORM DATA
|
||||
newContent = {}
|
||||
for title in content["titles"]:
|
||||
langid = title["language"]["data"]["id"]
|
||||
newContent[langid] = {}
|
||||
newContent[langid]["language"] = langid
|
||||
newContent[langid]["pre_title"] = title["pre_title"]
|
||||
newContent[langid]["title"] = title["title"]
|
||||
newContent[langid]["subtitle"] = title["subtitle"]
|
||||
newContent[langid]["description"] = title["description"]
|
||||
|
||||
for textSet in content["text_set"]:
|
||||
langid = textSet["language"]["data"]["id"]
|
||||
if langid not in newContent:
|
||||
newContent[langid] = {}
|
||||
newContent[langid]["language"] = langid
|
||||
newContent[langid]["title"] = "MISSING TITLE"
|
||||
newContent[langid]["text_set"] = {}
|
||||
newContent[langid]["text_set"]["status"] = textSet["status"]
|
||||
newContent[langid]["text_set"]["source_language"] = textSet["source_language"]["data"]["id"]
|
||||
newContent[langid]["text_set"]["text"] = textSet["text"]
|
||||
newContent[langid]["text_set"]["transcribers"] = [e["id"]
|
||||
for e in textSet["transcribers"]["data"]]
|
||||
newContent[langid]["text_set"]["translators"] = [e["id"]
|
||||
for e in textSet["translators"]["data"]]
|
||||
newContent[langid]["text_set"]["proofreaders"] = [e["id"]
|
||||
for e in textSet["proofreaders"]["data"]]
|
||||
newContent[langid]["text_set"]["notes"] = textSet["notes"]
|
||||
|
||||
# STEP 5: UPDATE ON THE CMS
|
||||
|
||||
client.execute(mutation, variable_values={"id": id,
|
||||
"data": {
|
||||
"translations": [newContent[e] for e in newContent]
|
||||
}})
|
Loading…
Reference in New Issue