working on imports and exports

This commit is contained in:
cube
2026-03-30 14:01:00 +01:00
parent 96253f469e
commit a2c947ca00
2 changed files with 102 additions and 34 deletions

View File

@@ -26,7 +26,7 @@ def new():
@bp.route("/import", methods=("GET","POST"))
@login_required
def import_member():
def import_member_route():
db = get_db()
response=""
data=None
@@ -37,25 +37,7 @@ def import_member():
file = request.files["file"]
if file.filename.split(".")[1].lower() == "json":
response = json.loads(file.read())
date_raw = response["date-created"].split(",")
date = date_raw[0]
day,month,year = date.split("/")
time = date_raw[1]
hour,minute,second = time.split(":")
date_created = datetime.datetime(int(year), int(month), int(day), int(hour), int(minute), int(second))
user_id = g.user[0]
if response["privacy"] == "public":
privacy = 1
else:
privacy = 0
data = [date_created, user_id, response["name"], response["description"], privacy]
db.execute("INSERT INTO member (created,user_id, member_name, bio,public) VALUES (?, ?, ?, ?, ?)",(data[0], data[1], data[2], data[3], data[4]))
db.commit()
import_member(response)
last = db.execute('SELECT last_insert_rowid()').fetchone()
mid = last[0]
else:
@@ -254,6 +236,81 @@ def remove_home(mid,location):
else:
return redirect(url_for('home.full_list'))
def import_groups(groups):
db = get_db()
for group in groups:
gid = group["id"]
name = group["name"]
description = group["description"]
if group["privacy"] == "public":
privacy = 1
else:
privacy = 0
db.execute("INSERT INTO groups (id, group_name, group_description, public) VALUES (?, ?, ?, ?)", (gid, name, description, privacy))
db.commit()
def import_member(member):
db = get_db()
date_raw = member["date-created"].split(",")
date = date_raw[0]
day,month,year = date.split("/")
time = date_raw[1]
hour,minute,second = time.split(":")
date_created = datetime.datetime(int(year), int(month), int(day), int(hour), int(minute), int(second))
name = member["name"]
subtitle = member["subtitle"]
description = member["description"]
if member["privacy"] == "public":
privacy = 1
else:
privacy = 0
theme = member["theme"]
#db.execute("INSERT INTO member (created,user_id, member_name, bio,public) VALUES (?, ?, ?, ?, ?)",(data[0], data[1], data[2], data[3], data[4]))
#db.commit()
@bp.route("/admin", methods=("GET", "POST"))
@login_required
def admin():
db = get_db()
if request.method == "POST":
if "json" in request.files:
file = request.files["json"].read()
file_json = json.loads(file)
groups = file_json["groups"]
import_groups(groups)
members = file_json["members"]
for member in members:
import_member(member)
return "<a href='/'>go home</a>"
elif "zip" in request.files:
return "upload zip"
users = db.execute("SELECT * FROM user").fetchall()
return render_template("manage/admin.html", users=users)
# DATA EXPORTS
def generate_json(mid):
@@ -295,6 +352,7 @@ def generate_json(mid):
data = {
"id":mid,
"date-created":date_created,
"date-format":"d/m/Y, H:M:S",
"name":member[3],
@@ -438,11 +496,10 @@ def export_system():
groups_r = db.execute("SELECT * FROM groups").fetchall()
data = {}
count = 0
data["members"] = []
for member in members:
d = generate_json(member[0])
data[count] = d
count+=1
data["members"].append(d)
groups = generate_json_groups()
data["groups"] = groups
@@ -464,11 +521,10 @@ def export_system_full():
stamps = db.execute("SELECT stamp_location FROM stamps").fetchall()
data = {}
count = 0
data["members"] = []
for member in members:
d = generate_json(member[0])
data[count] = d
count+=1
data["members"].append(d)
groups = generate_json_groups()
data["groups"] = groups
@@ -495,6 +551,8 @@ def export_system_full():
return send_file("static/tmp/"+zip_name, as_attachment=True)
# ASSETS
@@ -617,10 +675,7 @@ def group_delete(gid):
return redirect(url_for("manage.groups"))
@bp.route("/admin")
@login_required
def admin():
db = get_db()
users = db.execute("SELECT * FROM user").fetchall()
return render_template("manage/admin.html", users=users)

View File

@@ -12,8 +12,21 @@
<hr>
<a>Import system from JSON</a><br>
<a>Import system from ZIP</a>
<div class="heading">Import system from JSON</div>
<p>You must only run full system imports on a fresh database</p>
<form method="post" enctype="multipart/form-data" id="json">
<input type="file" name="json">
<input type="submit" value="Upload JSON">
</form>
<hr>
<div class="heading">Import system from ZIP</div>
<p>You must only run full system imports on a fresh database</p>
<form method="post" enctype="multipart/form-data" id="zip">
<input type="file" name="zip">
<input type="submit" value="Upload ZIP">
</form>
<hr>