Compare commits

..

No commits in common. 'cd267700affac1186c5548a7054adda1dcd3e611' and '381a7d43a5d5fa3f5ca27a845b870b31817abd6e' have entirely different histories.

  1. 29
      app.py
  2. 40
      config.py
  3. 10
      models.py
  4. BIN
      planet1.png
  5. BIN
      planet2.png
  6. 17
      planets.py
  7. 18
      rebuild_db.py
  8. 25
      schemes.py
  9. 46
      services.py
  10. BIN
      static/IMG/planet.png
  11. 11
      templates/index.html
  12. BIN
      test3.png
  13. BIN
      test4.png
  14. 5
      wsgi.py

29
app.py

@ -1,22 +1,13 @@
import os
from flask import Flask, render_template, send_file
from planets import createRandomPlanet
from services import (UserService, UserListService)
from config import app, api, docs, CORS
app = Flask(__name__)
#*______________ Service Registration ______________
api.add_resource(UserService, '/api/user/<user_id>')
docs.register(UserService)
api.add_resource(UserListService, '/api/list/user')
docs.register(UserListService)
#*______________ Application Creation ______________
if __name__ == '__main__':
app.run(debug=True)
IMG_FOLDER = os.path.join('static', 'IMG')
app.config['UPLOAD_FOLDER'] = IMG_FOLDER
@app.route('/')
def index():
planet = os.path.join(app.config['UPLOAD_FOLDER'], 'planet.png')
return render_template('index.html', planet=planet)
@app.route('/<seed>')
def hello(seed):
createRandomPlanet(seed)
planet = os.path.join(app.config['UPLOAD_FOLDER'], 'planet.png')
return send_file(planet)
if __name__=='__main__':
app.run(debug=True, host='0.0.0.0')

40
config.py

@ -0,0 +1,40 @@
from flask import Flask
from flask_restful import Api
from apispec import APISpec
from apispec.ext.marshmallow import MarshmallowPlugin
from flask_apispec.extension import FlaskApiSpec
from flask_marshmallow import Marshmallow
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS
#!______________ App Setup _____________ _
app = Flask(__name__, static_url_path='/static')
api_v1_cors_config = {
"origins": ["http://localhost:5000"]
}
#!______________ CORS Setup _____________ _
CORS(app, resources={"/api/*": api_v1_cors_config})
#!______________ DB Setup ______________
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///markdown.db'
app.config['SECRET_KEY'] = 'InputSecretKeyHere'
db = SQLAlchemy(app)
#!______________ Marshmallow Setup ______________
ma = Marshmallow(app)
#!______________ API & Swagger Setup ______________
api = Api(app)
app.config.update({
'APISPEC_SPEC': APISpec(
title='Markdown Presenter',
version='v0.0.1',
plugins=[MarshmallowPlugin()],
openapi_version='2.0.0'
),
'APISPEC_SWAGGER_URL': '/swagger/',
'APISPEC_SWAGGER_UI_URL': '/swagger-ui/'
})
#!______________ Docs Setup ______________
docs = FlaskApiSpec(app)

10
models.py

@ -0,0 +1,10 @@
from config import db
#!______________ DB Models ______________
class User(db.Model):
__tablename__ = "User"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
image = db.Column(db.String())
description = db.Column(db.String())

BIN
planet1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 KiB

BIN
planet2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 KiB

17
planets.py

@ -1,6 +1,7 @@
import os, random
from PIL import Image
light_directory = os.fsencode(str(os.getcwd() + "/planets/light"))
noise_directory = os.fsencode(str(os.getcwd() + "/planets/noise"))
sphere_directory = os.fsencode(str(os.getcwd() + "/planets/sphere"))
@ -10,12 +11,13 @@ amount_noise = len(os.listdir(noise_directory))
amount_sphere = len(os.listdir(sphere_directory))
def changeImageColor(im, red, green, blue):
# Split into 3 channels
r, g, b, a = im.split()
# Change channel by factor
r = r.point(lambda i: i * red)
g = g.point(lambda i: i * green)
b = b.point(lambda i: i * blue)
# Recombine back to RGB image
result = Image.merge('RGBA', (r, g, b, a))
return result
@ -23,6 +25,7 @@ def changePlanetLayerColor(planetLayer):
red = random.uniform(-0.5,1.5)
green = random.uniform(-0.5,1.5)
blue = random.uniform(-0.5,1.5)
print(red,green,blue)
changedColor = changeImageColor(planetLayer, red, green, blue)
return changedColor
@ -39,6 +42,8 @@ def mergePlanetParts(light, noise1, noise2, noise3, sphere):
planet.paste(noise1, (0, 0), noise1)
planet = Image.blend(planet, noise2, 0.1)
planet = Image.blend(planet, noise3, 0.1)
#planet.paste(noise2, (0, 0), noise2)
#planet.paste(noise3, (0, 0), noise3)
return planet
@ -58,5 +63,9 @@ def createRandomPlanet(seed):
sphere = changePlanetLayerColor(sphere)
planet = mergePlanetParts(light, noise1, noise2, noise3, sphere)
planet.save("static/IMG/planet.png")
return
return planet
planet = createRandomPlanet(random.randrange(0,10000))
planet.save("planet2.png")

18
rebuild_db.py

@ -0,0 +1,18 @@
import os
from config import db
from termcolor import colored
from config import app
def RebuildDatabase():
if os.path.exists('acceth.db'):
print(colored('Removing existing DB', 'blue'))
os.remove('acceth.db')
with app.app_context():
db.create_all()
db.session.commit()
print(colored('New DB created.', 'green'))
if __name__ == '__main__':
RebuildDatabase()

25
schemes.py

@ -0,0 +1,25 @@
from marshmallow_sqlalchemy import SQLAlchemyAutoSchema
from config import db
from models import User
from marshmallow import fields
#*______________ Base Schema ______________
class BaseScheme(SQLAlchemyAutoSchema):
def __str__(self):
return str(self.__class__) + ": " + str(self.__dict__)
class Meta:
ordered = True
sqla_session = db.session
include_fk = True
load_instance = True
#*______________ User Schemes ______________
class UserSchema(BaseScheme):
class Meta(BaseScheme.Meta):
model = User
id = fields.Int()
name = fields.Str()
class UserInsertSchema(UserSchema):
user_id = fields.Int()
class UserResponseSchema(UserSchema):
name = fields.Str()

46
services.py

@ -0,0 +1,46 @@
from flask_apispec import marshal_with, doc, use_kwargs
from flask_apispec.views import MethodResource
from flask_restful import Resource
from schemes import (UserSchema, UserResponseSchema)
from config import db
from models import User
#!______________ User ______________
class UserService(MethodResource, Resource):
@doc(description='Get User by User_id', tags=['User'])
@marshal_with(UserResponseSchema)
def get(self, user_id):
quser = db.session.query(User).get(user_id)
return UserSchema().dump(quser)
@doc(description='Add new User', tags=['User'])
@use_kwargs(UserSchema, location=('json'))
@marshal_with(UserResponseSchema())
def post(self, user, user_id):
db.session.add(user)
db.session.commit()
return UserSchema().dump(user)
@doc(description='Update User with PUT', tags=['User'])
@use_kwargs(UserSchema, location=('json'))
@marshal_with(UserResponseSchema())
def put(self, user, user_id):
db.session.add(user)
db.session.commit()
return UserSchema().dump(user)
@doc(description='Delete existing User', tags=['User'])
@use_kwargs(UserSchema, location=('json'))
@marshal_with(UserResponseSchema())
def delete(self, user, user_id):
user = db.session.query(User).get(user_id)
db.session.delete(user)
db.session.commit()
return UserSchema().dump(user)
class UserListService(MethodResource, Resource):
@doc(description='Get a List of all User', tags=['List'])
@marshal_with(UserResponseSchema(many=True))
def get(self):
users = db.session.query(User).all()
return UserSchema(many=True).dump(users)

BIN
static/IMG/planet.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 443 KiB

11
templates/index.html

@ -1,11 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Planets</title>
</head>
<body>
<h1>Welcome to Planets</h1>
<img src="{{ planet }}" alt="Planet">
</body>
</html>

BIN
test3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 KiB

BIN
test4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 KiB

5
wsgi.py

@ -0,0 +1,5 @@
from config import app
if __name__ == "__main__":
app.run()
Loading…
Cancel
Save