Skip to content

Commit

Permalink
init lesson crud-create
Browse files Browse the repository at this point in the history
  • Loading branch information
sgmdlt committed Aug 14, 2024
1 parent 6b5619d commit 0b2caef
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 18 deletions.
27 changes: 9 additions & 18 deletions example.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import json
import uuid
from flask import (
get_flashed_messages,
flash,
Expand All @@ -9,12 +7,11 @@
request,
url_for
)
from user_repository import UserRepository

app = Flask(__name__)
app.secret_key = "secret_key"

users = json.load(open("./users.json", 'r'))


@app.route('/')
def index():
Expand All @@ -23,10 +20,10 @@ def index():

@app.route('/users/')
def users_get():
with open("./users.json", "r") as f:
users = json.load(f)
messages = get_flashed_messages(with_categories=True)
term = request.args.get('term', '')
repo = UserRepository()
users = repo.get_content()
filtered_users = [user for user in users if term in user['name']]
return render_template(
'users/index.html',
Expand All @@ -46,15 +43,9 @@ def users_post():
user=user_data,
errors=errors,
)
id = str(uuid.uuid4())
user = {
'id': id,
'name': user_data['name'],
'email': user_data['email']
}
users.append(user)
with open("./users.json", "w") as f:
json.dump(users, f)
repo = UserRepository()
repo.save(user_data)

flash('Пользователь успешно добавлен', 'success')
return redirect(url_for('users_get'), code=302)

Expand All @@ -72,9 +63,9 @@ def users_new():

@app.route('/users/<id>')
def users_show(id):
with open("./users.json", "r") as f:
users = json.load(f)
user = next(user for user in users if id == str(user['id']))
repo = UserRepository()
user = repo.find(id)
print(user)
return render_template(
'users/show.html',
user=user,
Expand Down
36 changes: 36 additions & 0 deletions user_repository.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import json
import sys
import uuid

class UserRepository():
def __init__(self):
self.users = json.load(open("./users.json", 'r'))

def get_content(self):
return self.users

def find(self, id):
try:
for user in self.users:
if id == str(user['id']):
return user
except KeyError:
sys.stderr.write(f'Wrong post id: {id}')
raise

def save(self, new_user):
# repository should know nothing about validation in outer layer
if not (new_user.get('name') and new_user.get('email')):
raise Exception(f'Wrong data: {json.loads(new_user)}')
# replace already existed user
if new_user.get('id'):
current_user = self.find(new_user['id'])
self.users.pop(current_user)
self.users.append(new_user)
# or add new
else:
new_user['id'] = str(uuid.uuid4())
self.users.append(new_user)
with open("./users.json", "w") as f:
json.dump(self.users, f)
return new_user['id']

0 comments on commit 0b2caef

Please sign in to comment.