Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
b7e93aa
added class file
maple-megan333 Dec 14, 2022
5a60c6d
Add moon file
ryjpink Dec 14, 2022
27cbb17
simple planet with constructor
maple-megan333 Dec 14, 2022
78324a3
Merge branch 'main' of github.com:maple-megan333/solar-system-api
ryjpink Dec 14, 2022
a3b70bb
Add and register planets route
ryjpink Dec 14, 2022
f93a7e4
updated classes
maple-megan333 Dec 14, 2022
dcfc1ec
updated moon
maple-megan333 Dec 14, 2022
8f98c96
Merge branch 'main' of https://github.com/maple-megan333/solar-system…
maple-megan333 Dec 14, 2022
1f920e1
Add planets test route
ryjpink Dec 14, 2022
23512bf
moons updated
maple-megan333 Dec 14, 2022
21321af
small changes to moons and planets
maple-megan333 Dec 14, 2022
fcdb77d
planets done
maple-megan333 Dec 14, 2022
6c7b3aa
Add and register moons route
ryjpink Dec 14, 2022
9334210
Merge branch 'main' of github.com:maple-megan333/solar-system-api
ryjpink Dec 14, 2022
091c4cb
display all planet
maple-megan333 Dec 14, 2022
3079e6b
Update display_planet method
ryjpink Dec 14, 2022
5fdf06f
Add error handling for routes.py and methods for planets.py and moons.py
ryjpink Dec 15, 2022
531d19c
Updated data info for planets.
maple-megan333 Dec 17, 2022
6619288
Merge branch 'main' of https://github.com/maple-megan333/solar-system…
maple-megan333 Dec 17, 2022
cb0761c
Update planets routes and add serialize funtion to return all attributes
ryjpink Dec 19, 2022
16a9048
Added modules, created new routes, init database.
maple-megan333 Dec 20, 2022
0d78e7b
Create a json file to store all the planets data
ryjpink Dec 20, 2022
172bbc0
working on rest of CRUD through DB
maple-megan333 Dec 21, 2022
06bd9e9
debugging migration for boolean val
maple-megan333 Dec 21, 2022
dc30a5c
Finished debugging put.
maple-megan333 Dec 21, 2022
8bfe979
Seeing up queries.
maple-megan333 Dec 22, 2022
147a9f0
Update query filter in planet route
ryjpink Dec 23, 2022
5f7d023
Remove debug prints
ryjpink Dec 23, 2022
1cf96b6
Add test configuration
ryjpink Jan 3, 2023
440728a
Add attribute validation to update and create planet routes
ryjpink Jan 3, 2023
15d909c
Return planet as a single object instead of array and fix attribute name
ryjpink Jan 3, 2023
978b8bc
Return responses as JSON
ryjpink Jan 3, 2023
4cf6ffc
Add tests
ryjpink Jan 3, 2023
5596c20
Merge pull request #1 from maple-megan333/test
maple-megan333 Jan 3, 2023
b880e4e
started refactoring and improving test coverage
maple-megan333 Jan 3, 2023
56ac9ce
Split moon and planet routes
ryjpink Jan 3, 2023
0bceb5d
Add test_get_all_planets_with_two_records and make attribute display …
ryjpink Jan 4, 2023
baa9b8f
Add to_dict function and tests
ryjpink Jan 4, 2023
6965b90
Use to_dict function in display_planets and display_planet methods an…
ryjpink Jan 4, 2023
69205a2
Add from_dict method to planet model and tests for from_dict method
ryjpink Jan 4, 2023
091396a
Make id optional for Planet.from_dict
ryjpink Jan 4, 2023
1624900
Update test to be more robust: Order of attributes should not matter
ryjpink Jan 4, 2023
0a64315
Use from_dict function in create_planets method
ryjpink Jan 4, 2023
5d18775
format
maple-megan333 Jan 4, 2023
8537e2f
Merge branch 'main' of https://github.com/maple-megan333/solar-system…
maple-megan333 Jan 4, 2023
05281ad
Moon tests.
maple-megan333 Jan 4, 2023
5e00c1e
Update test_delete_one_moon to pass test
ryjpink Jan 4, 2023
d68420b
Create two global variables to reduce code duplication
ryjpink Jan 4, 2023
d1b2727
Update incorrect route name and validate function
ryjpink Jan 4, 2023
8f00da4
Refactor validate_planet to validate_model and Update all the depende…
ryjpink Jan 4, 2023
ed06a44
Refactor validate_model to validate_model and Update all the dependenies
ryjpink Jan 4, 2023
ccca0ff
Add size attribute.
maple-megan333 Jan 5, 2023
ed0abe1
Co-authored-by: Ya-Juan Ruan <ryjpink@users.noreply.github.com>
maple-megan333 Jan 5, 2023
033288f
setting up for deployment
maple-megan333 Jan 6, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Procfile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
web: gunicorn 'app:create_app()'
34 changes: 34 additions & 0 deletions app/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,41 @@
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from dotenv import load_dotenv
import os

db = SQLAlchemy()
migrate = Migrate()
load_dotenv()


def create_app(test_config=None):
app = Flask(__name__)

if not test_config:
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get(
"SQLALCHEMY_DATABASE_URI")
else:
app.config["TESTING"] = True
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
app.config["SQLALCHEMY_DATABASE_URI"] = os.environ.get(
"SQLALCHEMY_TEST_DATABASE_URI")


db.init_app(app)
migrate.init_app(app,db)



from app.models.celestial_body import CelestialBody
from app.models.planet import Planet
from app.models.moon import Moon

#from app.models.planet import Planet
#from app.models.moon import Moon
from .routes.planet import planets_bp
from .routes.moon import moons_bp
app.register_blueprint(planets_bp)
app.register_blueprint(moons_bp)
return app
4 changes: 4 additions & 0 deletions app/filter_attributes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
PLANET_ATTRIBUTES = ["name", "description", "mass", "diameter", "density", "gravity", "escape_velocity",
"rotation_period", "day_length", "distance_from_sun", "orbital_period", "orbital_velocity", "orbital_inclination", "orbital_eccentricity",
"obliquity_to_orbit", "mean_tempurature_c", "surface_pressure", "global_magnetic_feild", "has_rings"]
MOON_ATTRIBUTES = ["name", "description"]
7 changes: 7 additions & 0 deletions app/models/celestial_body.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from app import db
class CelestialBody(db.Model):
__tablename__ = 'celestial_bodies'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name=db.Column(db.String)
description = db.Column(db.String)
image=db.Column(db.String)
60 changes: 60 additions & 0 deletions app/models/moon.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
from app import db

class Moon(db.Model):
__tablename__='moons'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String)
size = db.Column(db.Float)
description = db.Column(db.String)
image = db.Column(db.String)
planet_id = db.Column(db.Integer, db.ForeignKey('planets.id'))
planet = db.relationship("Planet", back_populates="moons")


def to_dict(self):
moons_as_dict = {}
moons_as_dict["id"] = self.id
moons_as_dict["name"] = self.name
moons_as_dict["size"] = self.size
moons_as_dict["description"] = self.description
moons_as_dict["image"] = self.image

return moons_as_dict

@classmethod
def from_dict(cls, moon_data):
new_moon = Moon(
name=moon_data["name"],size=moon_data["size"], description=moon_data["description"], image=moon_data["image"])
return new_moon
# def __init__(self, id, name, description, planet_id):
# self.id=id
# self.name=name
# self.description=description
# self.planet_id = planet_id


# def get_siblings_moons(self):
# siblings_moons = []
# for moon in moons_list:
# if moon.planet_id == self.planet_id:
# siblings_moons.append(moon)
# return siblings_moons


# moons_list = []
# first_mon = Moon(1, "Luna", "Earths Moon", 3)
# moons_list.append(first_mon)
# second_moon = Moon(2,"Phobos", "Moon of mars discovered in 1877", 4)
# third_moon = Moon(3, "Deimos", "Second moon of mars discovered in 1877", 4)
# forth_moon = Moon(4, "Io", "discovered in 1610", 5)
# fifth_moon = Moon(5, "Europa", "discovered 1610", 5)
# sixth_moon = Moon(6, "Ganymede", "discovered 1610", 6)
# seventh_moon = Moon(7, "Callisto", "Discovered 1610", 5)
# eigth_moon = Moon(8, "Amalthea", "Discovered in 1982", 5)
# moons_list.append(second_moon)
# moons_list.append(third_moon)
# moons_list.append(forth_moon)
# moons_list.append(fifth_moon)
# moons_list.append(sixth_moon)
# moons_list.append(seventh_moon)
# moons_list.append(eigth_moon)
183 changes: 183 additions & 0 deletions app/models/planet.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
#from .moon import Moon, moons_list
from app import db
class Planet(db.Model):
__tablename__='planets'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name=db.Column(db.String)
description=db.Column(db.String)
mass=db.Column(db.Float)
diameter=db.Column(db.Float)
density=db.Column(db.Float)
gravity=db.Column(db.Float)
escape_velocity=db.Column(db.Float)
rotation_period=db.Column(db.Float)
day_length=db.Column(db.Float)
distance_from_sun=db.Column(db.Float)
orbital_period=db.Column(db.Float)
orbital_velocity=db.Column(db.Float)
orbital_inclination=db.Column(db.Float)
orbital_eccentricity=db.Column(db.Float)
obliquity_to_orbit=db.Column(db.Float)
mean_tempurature_c=db.Column(db.Float)
surface_pressure=db.Column(db.Float)
global_magnetic_feild=db.Column(db.Boolean, default=False, server_default="false")
img=db.Column(db.String)
has_rings=db.Column(db.Boolean, default=False, server_default="false")
moons = db.relationship("Moon", back_populates="planet")

def to_dict(self):
planet_as_dict = {}
planet_as_dict["id"] = self.id
planet_as_dict["name"] = self.name
planet_as_dict["description"] = self.description
planet_as_dict["mass"] = self.mass
planet_as_dict["diameter"]=self.diameter
planet_as_dict["density"] = self.density
planet_as_dict["gravity"] = self.gravity
planet_as_dict["escape_velocity"] = self.escape_velocity
planet_as_dict["rotation_period"] = self.rotation_period
planet_as_dict["day_length"] = self.day_length
planet_as_dict["distance_from_sun"] = self.distance_from_sun
planet_as_dict["orbital_period"] = self.orbital_period
planet_as_dict["orbital_velocity"] = self.orbital_velocity
planet_as_dict["orbital_inclination"] = self.orbital_inclination
planet_as_dict["orbital_eccentricity"] = self.orbital_eccentricity
planet_as_dict["obliquity_to_orbit"] = self.obliquity_to_orbit
planet_as_dict["mean_tempurature_c"] = self.mean_tempurature_c
planet_as_dict["surface_pressure"] = self.surface_pressure
planet_as_dict["global_magnetic_feild"] = self.global_magnetic_feild
planet_as_dict["img"] = self.img
planet_as_dict["has_rings"] = self.has_rings
planet_as_dict["moons"] = list(map(lambda moon: moon.to_dict(), self.moons))
return planet_as_dict

@classmethod
def from_dict(cls, planets_data):
# Moons are optional
moons = []
if "moons" in planets_data:
moons = planets_data["moons"]

new_planet = Planet(
name=planets_data["name"],
description=planets_data["description"],
mass=planets_data["mass"],
diameter=planets_data["diameter"],
density=planets_data["density"],
gravity=planets_data["gravity"],
escape_velocity=planets_data["escape_velocity"],
rotation_period=planets_data["rotation_period"],
day_length=planets_data["day_length"],
distance_from_sun=planets_data["distance_from_sun"],
orbital_period=planets_data["orbital_period"],
orbital_velocity=planets_data["orbital_velocity"],
orbital_inclination=planets_data["orbital_inclination"],
orbital_eccentricity=planets_data["orbital_eccentricity"],
obliquity_to_orbit=planets_data["obliquity_to_orbit"],
mean_tempurature_c=planets_data["mean_tempurature_c"],
surface_pressure=planets_data["surface_pressure"],
global_magnetic_feild=planets_data["global_magnetic_feild"],
img=planets_data["img"],
has_rings=planets_data["has_rings"],
moons=moons)
return new_planet
# def __init__(self, id, name, description, mass, diameter, density, gravity, escape_velocity,
# rotation_period, day_length, distance_from_sun, orbital_period, orbital_velocity, orbital_inclination, orbital_eccentricity,
# obliquity_to_orbit, mean_tempurature_c, surface_pressure, global_magnetic_feild,img,has_rings=False, moons=None):
# self.id=id
# self.name=name
# self.description=description
# self.mass=mass
# self.diameter=diameter
# self.density=density
# self.gravity=gravity
# self.escape_velocity=escape_velocity
# self.rotation_period=rotation_period
# self.day_length=day_length
# self.distance_from_sun=distance_from_sun
# self.orbital_period=orbital_period
# self.orbital_velocity=orbital_velocity
# self.orbital_inclination=orbital_inclination
# self.orbital_eccentricity=orbital_eccentricity
# self.obliquity_to_orbit=obliquity_to_orbit
# self.mean_tempurature_c=mean_tempurature_c
# self.surface_pressure=surface_pressure
# self.global_magnetic_feild=global_magnetic_feild
# self.img=img
# self.has_rings=has_rings
# self.moons = moons if moons else []

# def add_moon(self, moon):
# # validate if is a moon object
# if moon.__class__.__name__ != "Moon":
# raise ValueError(f"{moon} is not a moon.")
# # validate if the planet_id of the moon is the same as self.id
# if moon.planet_id != self.id:
# raise ValueError(f"{moon} is not the moon of {self.name}")
# self.moons.append(moon)

# def serialize(self):
# filtered_attributes = self.__dict__.copy()
# new_value = []
# for moon_object in filtered_attributes["moons"]:
# new_value.append(moon_object.name)
# filtered_attributes["moons"] = new_value
# return filtered_attributes

# solar_system=[]{
# "name": "Mercury",
# "description": First Planet near the Sun",
# "mass": 0.330,
# "diameter":4878,
# "density": 5429,
# "gravity": 3.7,
# "escape_velocity": 4.3,
# "rotation_period": 1407.6,
# "day_length": 57.9,
# "distance_from_sun":36.04,
# "orbital_period": 88.0,
# "orbital_velocity" : 47.4,
# "orbital_inclination": 7.0,
# "orbital_eccentricity":0.206,
# "obliquity_to_orbit":0.034,
# "mean_tempurature_c":167,
# "surface_pressure":0,
# "global_magnetic_feild":False,
# "img":https://photojournal.jpl.nasa.gov/jpegMod/PIA16853_modest.jpg,
# "has_Rings": False}
# mercurey =
# Planet(1, "Mercury", "First Planet near the Sun", .330, 4878, 5429, 3.7, 4.3, 1407.6, 4222.6,
# 57.9, 88.0, 47.4, 7.0, .206, .034, 167, 0, False, 'https://photojournal.jpl.nasa.gov/jpegMod/PIA16853_modest.jpg')
# solar_system.append(mercurey){
# "name": "Mercury",
# "description": First Planet near the Sun",
# "mass": 0.330,
# "diameter":4878,
# "density": 5429,
# "gravity": 3.7,
# "escape_velocity": 4.3,
# "rotation_period": 1407.6,
# "day_length": 57.9,
# "distance_from_sun":36.04,
# "orbital_period": 88.0,
# "orbital_velocity" : 47.4,
# "orbital_inclination": 7.0,
# "orbital_eccentricity":0.206,
# "obliquity_to_orbit":0.034,
# "mean_tempurature_c":167,
# "surface_pressure":0,
# "global_magnetic_feild":False,
# "img":https://photojournal.jpl.nasa.gov/jpegMod/PIA16853_modest.jpg,
# "has_Rings": False}
# venus = Planet(2, "Venus", "Second Planet from the sun", 4.87, 12104, 5243, 8.9, 10.4, -5832.5, 2802.0, 108.2, 224.7, 35.0, 3.4, .0007, 177.4, 464, 92, False, 'https://solarsystem.nasa.gov/resources/2524/newly-processed-views-of-venus-from-mariner-10/?category=planets_venus')
# solar_system.append(venus)
# earth = Planet(3, "Earth", "Has Humans", 5.97, 12756, 5514, 9.8, 11.2, 23.9, 24.0, 149.6, 365.2, 29.8, 0.0, .017, 23.4, 15, 1, True, 'https://solarsystem.nasa.gov/resources/786/blue-marble-2002/?category=planets_earth', False, [moons_list[0]])
# solar_system.append(earth)
# mars= Planet(4, "Mars", "Being explored by robots, considered for space colony", .642, 6792, 3934, 3.7, 5, 24.6, 24.7, 228, 687, 24.1, 1.8, .094, 25.2, -65, .01, False, 'https://solarsystem.nasa.gov/resources/948/hubbles-close-up-view-of-mars-dust-storm/?category=planets_mars')
# solar_system.append(mars)
# jupiter = Planet(5, "Jupiter", "Largest Gas Giant", 1898, 142984, 1326, 23.1, 59.5, 9.9, 9.9, 778.5, 4331,13.1, 1.3, .049, 3.1, -110, None, True, 'https://solarsystem.nasa.gov/resources/2486/hubbles-new-portrait-of-jupiter/?category=planets_jupiter', has_rings=True)
# solar_system.append(jupiter)
# saturn = Planet(6, "Saturn", "Gas Giant", 568, 120536, 687, 9, 35.5, 10.7, 10.7, 1432.0, 10747, 9.7, 2.5, .052, 26.7, -140, None, True, 'https://solarsystem.nasa.gov/resources/2490/saturns-rings-shine-in-hubble-portrait/?category=planets_saturn', has_rings=True)
# solar_system.append(saturn)
# uranus = Planet(7, "Uranus", "Smells bad",86.8, 51118, 1270, 8.7, 21.3, -17.2, 17.2, 2867, 30589, 6.8, .8, .047, 97.8, -195, None, True, 'https://solarsystem.nasa.gov/resources/605/keck-telescope-views-of-uranus/?category=planets_uranus', has_rings=True)
# neptune = Planet(8, "Neptue", "Named for the god of the sea because it is blue", 102, 49528, 1638, 11.0, 23.5, 16.1, 16.1, 4515, 59800, 5.4, 1.8, .010, 28.3, -200, None, True, 'https://solarsystem.nasa.gov/resources/611/neptune-full-disk-view/?category=planets_neptune', has_rings=True)
Loading