Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
11 changes: 11 additions & 0 deletions Kostetskiy_Nazar/workshop2/source/Pipfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]

[requires]
python_version = "3.7"
Empty file.
1 change: 1 addition & 0 deletions Kostetskiy_Nazar/workshop2/source/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SECRET_KEY = 'super-secret'
8 changes: 8 additions & 0 deletions Kostetskiy_Nazar/workshop2/source/forms/set_review_form.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, IntegerField


class SetReviewForm(FlaskForm):
text = StringField('Text')
rate = IntegerField('Rate')
submit = SubmitField('Submit')
8 changes: 8 additions & 0 deletions Kostetskiy_Nazar/workshop2/source/forms/set_user_post_form.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired


class SetUserPostForm(FlaskForm):
text = StringField('Text', validators=[DataRequired()])
submit = SubmitField('Submit')
83 changes: 83 additions & 0 deletions Kostetskiy_Nazar/workshop2/source/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import os

from flask import Flask, render_template, session, redirect, url_for, jsonify, request

from Kostetskiy_Nazar.workshop2.source.config import SECRET_KEY
from Kostetskiy_Nazar.workshop2.source.forms.set_review_form import SetReviewForm
from Kostetskiy_Nazar.workshop2.source.forms.set_user_post_form import SetUserPostForm
from Kostetskiy_Nazar.workshop2.source.models import Posts, Reviews
from Kostetskiy_Nazar.workshop2.source.models.user import User

app = Flask(__name__)
app.secret_key = SECRET_KEY
current_user = User(username='User1', email='user1@email')


posts = Posts()
reviews = Reviews()


@app.route("/")
def index():
post_form = SetUserPostForm()
rating_form = SetReviewForm()
return render_template("index.html", post_form=post_form, rating_form=rating_form)


@app.route("/sign_in")
def sign_in():
session['username'] = current_user.username
session['email'] = current_user.email
return redirect(url_for("index"))


@app.route('/sign_out')
def sign_out():
session.pop('username', None)
session.pop('user_type', None)

return redirect(url_for('index'))


@app.route("/api/review/submit", methods=['POST'])
def submit_review():
text = request.form.get('text')
rate = request.form.get('rate')

if rate:
reviews.set_data(rate=int(rate))

if text:
reviews.set_data(text=text)

return redirect(url_for('api_get', action="all"))


@app.route("/api/user_posts/submit", methods=['POST'])
def submit_user_posts():
text = request.form.get('text')

if text:
posts.set_data(text=text)

return redirect(url_for('api_get', action="all"))


@app.route('/api/<action>', methods=["GET"])
def api_get(action):
if action == "review":
return jsonify(reviews.data), 200

elif action == "user_posts":
return jsonify(posts.data), 200

elif action == "all":
return jsonify({'review': reviews.data, 'user_posts': posts.data}), 200

else:
return jsonify({'result': False}), 404


if __name__ == "__main__":
port = int(os.environ.get('PORT', 5000))
app.run('0.0.0.0', port, debug=True)
3 changes: 3 additions & 0 deletions Kostetskiy_Nazar/workshop2/source/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from .reviews import Reviews
from .posts import Posts
from .user import User
2 changes: 2 additions & 0 deletions Kostetskiy_Nazar/workshop2/source/models/fixtures/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from .user_posts import UserPost1
from .user_review import UserReview1
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from datetime import datetime

UserPost1 = {'text': 'User1 post.', 'user_id': 'user_id_1', 'date': datetime.now()}

Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from datetime import datetime

UserReview1 = {'rate': 10, 'text': 'Good Worker',
'user_id': 'user_id_1', 'reviewer': 'user_id_2', 'date': datetime.now()}

42 changes: 42 additions & 0 deletions Kostetskiy_Nazar/workshop2/source/models/posts.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import logging
import pickle

from .fixtures import UserPost1


class Posts:
def __init__(self):
self.data = self.initialize()

def initialize(self):
data = self.loads()
if data is not None:
return data
else:
self.save(UserPost1)
return UserPost1

def set_data(self, **data):
for k, v in data.items():
if k in self.data:
self.data[k] = v
self.save(self.data)
return self.data

@staticmethod
def save(data):
with open('temp/user_posts_data.pickle', 'wb') as f:
pickle.dump(data, f)
return data

@staticmethod
def loads():
try:
f = open("temp/user_posts_data.pickle", "rb")
# Do something with the file
except FileNotFoundError:
logging.warning('file user_posts does not exists')
else:
data = pickle.load(f)
f.close()
return data
43 changes: 43 additions & 0 deletions Kostetskiy_Nazar/workshop2/source/models/reviews.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import logging
import pickle

from .fixtures import UserReview1


class Reviews:
def __init__(self):
self.data = self.initialize()

def initialize(self):
data = self.loads()
if data is not None:
return data
else:
self.save(UserReview1)
return UserReview1

def set_data(self, **data):
for k, v in data.items():
print(k)
if k in self.data:
self.data[k] = v
self.save(self.data)
return self.data

@staticmethod
def save(data):
with open('temp/reviews_data.pickle', 'wb') as f:
pickle.dump(data, f)
return data

@staticmethod
def loads():
try:
f = open("temp/reviews_data.pickle", "rb")
# Do something with the file
except FileNotFoundError:
logging.warning('file reviews_data does not exists')
else:
data = pickle.load(f)
f.close()
return data
5 changes: 5 additions & 0 deletions Kostetskiy_Nazar/workshop2/source/models/user.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class User:
def __init__(self, username, email):
self.id = 'user_id_1'
self.username = username
self.email = email
31 changes: 31 additions & 0 deletions Kostetskiy_Nazar/workshop2/source/temp/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
def f(x):
x1, x2 = x
print(x)
return 2*((x1-11)**2) + x1*x2 + 6*x2**2

# x1 = (17.2, 17.2-15.8141)
# res = f(x1)
# print(res)
#
# print(-17.0348-8*2.4324)


if __name__ == '__main__':
# interval = [-18.2475, -15.841]
# eps = 0.2
#
# # while interval[0]-interval[1] < eps:
# for i in range(10):
# medLabmda = (interval[0] + interval[1])/2
# print('MediumLambda: ', medLabmda)
# rightLambda = (interval[1] + medLabmda)/2
# print('rightLambda: ', rightLambda)
# leftLambda = (interval[0] + medLabmda)/2
# print('leftLambda: ', leftLambda)
# interval = leftLambda, rightLambda
# print('fl ', f((17.2, 17.2-leftLambda)))
# print('fr ', f((17.2, 17.2-rightLambda)))
x1 = (17.2-5.98055, 0.1558)
res = f(x1)
print(res)

35 changes: 35 additions & 0 deletions Kostetskiy_Nazar/workshop2/source/templates/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{% block rating %}
<h2>modify rating</h2>
<form action="{{ url_for('submit_review') }}" method="post" novalidate>
<p>
{{ rating_form.text.label }}<br>
{{ rating_form.text(size=32) }}
</p>
<p>
{{ rating_form.rate.label }}<br>
{{ rating_form.rate(size=32) }}
</p>
<p>{{ rating_form.submit() }}</p>
</form>
{% endblock %}

{% block review %}
<h2>modify post</h2>
<form action="{{ url_for('submit_user_posts') }}" method="post" novalidate>
<p>
{{ post_form.text.label }}<br>
{{ post_form.text(size=32) }}
</p>
<p>{{ post_form.submit() }}</p>
</form>
{% endblock %}
</head>
<body>

</body>
</html>
5 changes: 5 additions & 0 deletions Kostetskiy_Nazar/workshop3/source/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
*.pyc
.idea
venv
migrations
.pytest_cache
22 changes: 22 additions & 0 deletions Kostetskiy_Nazar/workshop3/source/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
## Install:
1) Install into virtual environment requirements: ```pip install -r reqiurements.txt```
<br>
2) Init flask migrations: ```flask db init```
<br>

## Run

###1) Run DB migration:
(if db models changed and auto-migration does'nt work)
<br>
1)``` flask db migrate```
<br>
2)```flask db upgrade```

###2) Run app
```(venv) python run.py```<br> or <br>
```set FLASK_APP=app.py```<br> ```flask run```


## Testing:
Run tests: ```python -m pytest``` (from root directory)
30 changes: 30 additions & 0 deletions Kostetskiy_Nazar/workshop3/source/app/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import logging
from flask import Flask
from flask_login import LoginManager

from app.db_models.base import AppBase, engine
from app.db_models import User
from config import DB_URL_PATH, DEBUG, SECRET_KEY
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
from flask_socketio import SocketIO

logger = logging.getLogger(__name__)

app = Flask(__name__)
socketio = SocketIO(app, logger=logger, async_mode="gevent")

app.debug = DEBUG
app.config['SECRET_KEY'] = SECRET_KEY
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL_PATH
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

AppBase.metadata.create_all(engine)
migrate = Migrate(app, AppBase)
manager = Manager(app)
manager.add_command('db', MigrateCommand)

login_manager = LoginManager()
login_manager.init_app(app)

from app import views
5 changes: 5 additions & 0 deletions Kostetskiy_Nazar/workshop3/source/app/db_models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from .user import User
from .posts import UserPost
from .comments import Comments
from .user_reviews import UserReviews

Loading