Skip to content

Instantly share code, notes, and snippets.

@JacobKnaack
Last active December 16, 2018 01:38
Show Gist options
  • Save JacobKnaack/7e956db37f0834572f9e7b9adfb2d885 to your computer and use it in GitHub Desktop.
Save JacobKnaack/7e956db37f0834572f9e7b9adfb2d885 to your computer and use it in GitHub Desktop.
Movie Blog DB Migrations Script
import json
import requests
import base64
import markdown
BASE_URL = 'api-url-goes-here'
USER_INFO = [{"username": "Jacob", "password": "password-goes-here", "email": "email-goes-here"}, {"username": "e-vaughn",
"password": "passwor-goes-here", "email": "email-goes-here"}, {"username": "Megan", "password": "password-goes-here", "email": "email-goes-here"}]
NIT_PICKERS = []
# Check if proper users exist
for user in USER_INFO:
login_url = "%(base)s/login" % {'base': BASE_URL}
encoded_pass = base64.b64encode("%(username)s:%(password)s" % {
'username': user["username"], 'password': user["password"]})
bufferString = "Basic %(buffer)s" % {'buffer': encoded_pass}
login = requests.get(login_url, headers={
"Authorization": bufferString})
if login.status_code == 200:
NIT_PICKERS.append(login.json())
elif login.status_code == 401:
# Create 3 Users that are nitPickers
# PARAMS{ email: STRING, username: STRING, password: STRING, np_as: "access-secret" }
signup_url = "%(base)s/signup" % {"base": BASE_URL}
register = requests.post(signup_url, headers={"Content-Type": "application/json"}, json={
"username": user["username"], "password": user["password"], "email": user["email"], "np_as": "access-secret"})
register.raise_for_status()
fetchNitPicker = requests.get(
login_url, headers={"Authorization": bufferString})
NIT_PICKERS.append(fetchNitPicker.json())
else:
print "Error creating nit picker credentials for: %(nitpicker)s" % {
"nitpicker": user["username"]}
raise
MOVIE_URL = "%(base)s/movies" % {"base": BASE_URL}
REVIEW_URL = "%(base)s/review" % {"base": BASE_URL}
def fetchMovies():
return requests.get(MOVIE_URL)
def fetchReviews():
return requests.get(REVIEW_URL + 's')
def isMovieInDB(dbMovies, movie_name):
for data in dbMovies:
if movie_name == data["name"]:
return True
return False
def isReviewInDB(reviews, review_title):
for data in reviews:
if review_title == data["title"]:
return True
return False
def addMovies(movieData, movie_name):
if isMovieInDB(movieData, movie_name) is False:
addMovie = requests.post(MOVIE_URL, headers={
"Authorization": tokenString}, json={"name": movie["name"], "release": movie["release"], "image_path": movie["image_path"], "created_on": movie["created_on"]})
addMovie.raise_for_status()
print('Movie added: ' + movie["name"])
def addReviews(dbMovies, dbReviews, review_title, review_html):
for movieData in dbMovies:
MOVIE_ID = movieData["_id"]
MOVIE_NAME = movieData["name"]
if isReviewInDB(dbReviews, review_title) is False and MOVIE_NAME == review["movie"]:
for nitpicker in NIT_PICKERS:
if review["author"] == nitpicker["user"]["username"]:
bearerAuth = "Bearer %(token)s" % {
"token": nitpicker["accessToken"]}
addReview = requests.post(REVIEW_URL, headers={"Authorization": bearerAuth, "Content-Type": "application/json"}, json={
"movieId": MOVIE_ID, "title": review["title"], "user": review["author"], "html": review_html, "created_on": review["created_on"]})
addReview.raise_for_status()
print(review['title'] + ' success')
# load movie/review data file => add movies => add reviews
with open('data.json')as json_data:
db = json.load(json_data)
tokenString = "Bearer %(token)s" % {"token": NIT_PICKERS[0]["accessToken"]}
initMovies = fetchMovies().json()
for movie in db["movies"]:
addMovies(initMovies, movie["name"])
moviesAdded = fetchMovies().json()
initReviews = fetchReviews().json()
for review in db["reviews"]:
REVIEW_HTML = markdown.markdown(
review["markdown"], output_format='html5')
addReviews(moviesAdded, initReviews, review["title"], REVIEW_HTML)
@JacobKnaack
Copy link
Author

Fetches / Creates User Objects for migrating json data between schemas.

@JacobKnaack
Copy link
Author

Completed script, creates authors, adds movies from json file, posts reviews with author credentials.

@JacobKnaack
Copy link
Author

More Robust scripting for checking movie and reviews in db.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment