Last active
December 16, 2018 01:38
-
-
Save JacobKnaack/7e956db37f0834572f9e7b9adfb2d885 to your computer and use it in GitHub Desktop.
Movie Blog DB Migrations Script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
Completed script, creates authors, adds movies from json file, posts reviews with author credentials.
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
Fetches / Creates User Objects for migrating json data between schemas.