Working on Flask version
This commit is contained in:
parent
25a58eef54
commit
49de698ec9
32
app.py
32
app.py
@ -3,25 +3,45 @@ import json
|
|||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
tmp = '71386-10'
|
||||||
|
|
||||||
@app.route('/')
|
@app.route('/')
|
||||||
def index():
|
def index():
|
||||||
return render_template('index.html')
|
with open('./sets/'+tmp+'/info.json') as info:
|
||||||
|
info_file = json.loads(info.read())
|
||||||
|
with open('./sets/'+tmp+'/inventory.json') as inventory:
|
||||||
|
inventory_file = json.loads(inventory.read())
|
||||||
|
return render_template('bootstrap_table.html', title=info_file['set_num']+" - "+info_file['name'],
|
||||||
|
info_file=info_file,inventory_file=inventory_file)
|
||||||
|
|
||||||
|
#return render_template('index.html')
|
||||||
|
|
||||||
#'Welcome to the Flask App'
|
#'Welcome to the Flask App'
|
||||||
|
|
||||||
|
|
||||||
@app.route('/saveNumber', methods=['POST'])
|
@app.route('/saveNumber', methods=['POST'])
|
||||||
def save_number():
|
def save_number():
|
||||||
data = request.get_json()
|
data1 = request.form.get('brick.part.part_num')
|
||||||
|
data2 = request.form.get('brick.color.name')
|
||||||
number = request.form.get('numberInput')
|
number = request.form.get('numberInput')
|
||||||
|
|
||||||
if number is not None:
|
if number is not None:
|
||||||
|
|
||||||
|
print(data1)
|
||||||
|
print(data2)
|
||||||
|
print(number)
|
||||||
|
|
||||||
|
with open('./info/'+tmp+'.json') as info:
|
||||||
|
json_file = json.loads(info.read())
|
||||||
|
print(json_file['count'])
|
||||||
|
|
||||||
|
print(json_file['unit'][0]['bricks']['missing'])
|
||||||
|
|
||||||
# Save number to JSON file
|
# Save number to JSON file
|
||||||
with open('data.json', 'w') as json_file:
|
with open('data.json', 'w') as json_file:
|
||||||
json.dump({'number': number}, json_file)
|
json.dump({'number': number}, json_file)
|
||||||
return jsonify({'message': 'Number saved successfully'}), 200
|
|
||||||
else:
|
return ('', 204)
|
||||||
return jsonify({'error': 'Invalid data provided'}), 400
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run(debug=True)
|
app.run(host='192.168.10.109', debug=True, port=3333)
|
||||||
|
12
lego.py
12
lego.py
@ -7,8 +7,6 @@ import rebrick #rebrickable api
|
|||||||
# json things
|
# json things
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from bs4 import BeautifulSoup
|
|
||||||
|
|
||||||
import requests # request img from web
|
import requests # request img from web
|
||||||
import shutil # save img locally
|
import shutil # save img locally
|
||||||
|
|
||||||
@ -34,9 +32,11 @@ with open('api','r') as f:
|
|||||||
rb = rebrick.init(api_key)
|
rb = rebrick.init(api_key)
|
||||||
|
|
||||||
Path(set_path).mkdir(parents=True, exist_ok=True)
|
Path(set_path).mkdir(parents=True, exist_ok=True)
|
||||||
|
Path('./static/parts').mkdir(parents=True, exist_ok=True)
|
||||||
|
Path('./info').mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
# Get set info
|
# Get set info
|
||||||
response = json.loads(rebrick.lego.get_set(int(set_num)).read())
|
response = json.loads(rebrick.lego.get_set(set_num).read())
|
||||||
with open(set_path+'info.json', 'w', encoding='utf-8') as f:
|
with open(set_path+'info.json', 'w', encoding='utf-8') as f:
|
||||||
json.dump(response, f, ensure_ascii=False, indent=4)
|
json.dump(response, f, ensure_ascii=False, indent=4)
|
||||||
|
|
||||||
@ -53,17 +53,17 @@ else:
|
|||||||
logging.error('set_img_url: ' + set_num)
|
logging.error('set_img_url: ' + set_num)
|
||||||
|
|
||||||
# set inventory
|
# set inventory
|
||||||
response = json.loads(rebrick.lego.get_set_elements(int(set_num)).read())
|
response = json.loads(rebrick.lego.get_set_elements(set_num).read())
|
||||||
with open(set_path+'inventory.json', 'w', encoding='utf-8') as f:
|
with open(set_path+'inventory.json', 'w', encoding='utf-8') as f:
|
||||||
json.dump(response, f, ensure_ascii=False, indent=4)
|
json.dump(response, f, ensure_ascii=False, indent=4)
|
||||||
|
|
||||||
# get part images if not exists
|
# get part images if not exists
|
||||||
for i in response["results"]:
|
for i in response["results"]:
|
||||||
if not Path("./parts/"+i["element_id"]+".jpg").is_file():
|
if not Path("./static/parts/"+i["element_id"]+".jpg").is_file():
|
||||||
res = requests.get(i["part"]["part_img_url"], stream = True)
|
res = requests.get(i["part"]["part_img_url"], stream = True)
|
||||||
|
|
||||||
if res.status_code == 200:
|
if res.status_code == 200:
|
||||||
with open("./parts/"+i["element_id"]+".jpg",'wb') as f:
|
with open("./static/parts/"+i["element_id"]+".jpg",'wb') as f:
|
||||||
shutil.copyfileobj(res.raw, f)
|
shutil.copyfileobj(res.raw, f)
|
||||||
print('image saved')
|
print('image saved')
|
||||||
else:
|
else:
|
||||||
|
15
templates/base.html
Normal file
15
templates/base.html
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>{{ title }}</title>
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<h1>{{ title }}</h1>
|
||||||
|
<hr>
|
||||||
|
{% block content %}{% endblock %}
|
||||||
|
</div>
|
||||||
|
{% block scripts %}{% endblock %}
|
||||||
|
</body>
|
||||||
|
</html>
|
42
templates/bootstrap_table.html
Normal file
42
templates/bootstrap_table.html
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<table id="data" class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>img</th>
|
||||||
|
<th>part.element_id</th>
|
||||||
|
<th>part.part_num</th>
|
||||||
|
<th>part.name</th>
|
||||||
|
<th>color.id</th>
|
||||||
|
<th>color.name</th>
|
||||||
|
<th>part.quantity</th>
|
||||||
|
<th>part.is_spare</th>
|
||||||
|
<th>Missing?</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for brick in inventory_file.results %}
|
||||||
|
<tr>
|
||||||
|
<td><img src="{{ '/static/parts/'+brick.element_id+'.jpg' }}" style="height: 50px; width: auto;"></td>
|
||||||
|
<td>{{ brick.element_id }}</td>
|
||||||
|
<td>{{ brick.part.part_num }}</td>
|
||||||
|
<td>{{ brick.part.name }}</td>
|
||||||
|
<td>{{ brick.color.id }}</td>
|
||||||
|
<td>{{ brick.color.name }}</td>
|
||||||
|
<td>{{ brick.quantity }}</td>
|
||||||
|
<td>{{ brick.is_spare }}</td>
|
||||||
|
<td>
|
||||||
|
<form action="/saveNumber" method="post">
|
||||||
|
<input type="hidden" name="brick.part.part_num" value="{{ brick.part.part_num }}">
|
||||||
|
<input type="hidden" name="brick.color.name" value="{{ brick.color.name }}">
|
||||||
|
<label for="numberInput">Number:</label>
|
||||||
|
<input type="text" id="numberInput" name="numberInput">
|
||||||
|
<button type="submit">Save Number</button>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue
Block a user