Fix more foreing key usages
All checks were successful
ci/woodpecker/manual/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/manual/woodpecker Pipeline was successful
Also refactors user info to class
This commit is contained in:
@@ -11,7 +11,7 @@ from wtforms.form import Form
|
||||
from wtforms.validators import Length
|
||||
|
||||
import const
|
||||
from common import CustomForm, build_query, flatten, format_name, spam
|
||||
from common import CustomForm, build_query, flatten, format_name, spam, users_lookup
|
||||
from oidc import page_oidc, login_required, read_user, do_login
|
||||
|
||||
page_inventory = Blueprint("inventory", __name__)
|
||||
@@ -29,16 +29,10 @@ def view_inventory_view(item_id):
|
||||
photo_url = "%s/kspace-inventory/%s" % (base_url, item_id)
|
||||
return render_template(template , **locals())
|
||||
|
||||
def fetch_members_select(existing_id=None):
|
||||
q = [{"enabled": True}]
|
||||
if existing_id:
|
||||
q.append({"_id": ObjectId(existing_id)})
|
||||
objs = db.member.find(filter = { "$or": q }, projection = {
|
||||
"full_name": 1
|
||||
}).sort("full_name", 1)
|
||||
def fetch_members_select():
|
||||
choices = [(None, None)]
|
||||
for obj in objs:
|
||||
choices.append((obj["_id"], obj["full_name"]))
|
||||
for username, user in users_lookup.items():
|
||||
choices.append((username, user.display_name or username))
|
||||
choices = list(set(choices))
|
||||
return choices
|
||||
|
||||
@@ -54,10 +48,10 @@ def setup_user_select(select_field, name_fields):
|
||||
existing_id = None
|
||||
if select_field.data and select_field.data != 'None':
|
||||
existing_id = select_field.data
|
||||
select_field.choices = fetch_members_select(existing_id)
|
||||
select_field.choices = fetch_members_select()
|
||||
if existing_id:
|
||||
values = dict(select_field.choices)
|
||||
value = values.get(ObjectId(existing_id))
|
||||
value = values.get(existing_id)
|
||||
for name_field in name_fields:
|
||||
name_field.data = value
|
||||
|
||||
@@ -73,18 +67,18 @@ def setup_default_owner(select_field):
|
||||
def member_select_coerce(x):
|
||||
x = str(x)
|
||||
if x and x != "None":
|
||||
return ObjectId(x)
|
||||
return x
|
||||
else:
|
||||
return None
|
||||
|
||||
class MemberForm(Form):
|
||||
label = None
|
||||
foreign_id = SelectField(choices=[], coerce=member_select_coerce)
|
||||
username = SelectField(choices=[], coerce=member_select_coerce)
|
||||
display_name = StringField()
|
||||
def __init__(self, label=None, *args, **kwargs):
|
||||
super(MemberForm, self).__init__(*args, **kwargs)
|
||||
self.label = label
|
||||
setup_user_select(self.foreign_id, [self.display_name])
|
||||
setup_user_select(self.username, [self.display_name])
|
||||
|
||||
class InventoryForm(Form):
|
||||
owner = FormField(MemberForm, label="Owner")
|
||||
@@ -112,7 +106,7 @@ class InventoryItemForm(CustomForm):
|
||||
_description_placeholder = "Insert Markdown here."
|
||||
description = TextAreaField('Description', [validators.optional(), validators.length(max=3000)], render_kw={"placeholder": _description_placeholder})
|
||||
def setup_defaults_add(self):
|
||||
setup_default_owner(self.inventory.form.owner.form.foreign_id)
|
||||
setup_default_owner(self.inventory.form.owner.form.username)
|
||||
self.inventory.form.public.render_kw = {"checked": "checked"}
|
||||
self.inventory.form.public.data = "y"
|
||||
|
||||
@@ -190,10 +184,10 @@ def save_inventory_item(item_id=None, **_):
|
||||
if not d["shortener"]["slug"]:
|
||||
d.pop("shortener")
|
||||
if "user" in d["inventory"]:
|
||||
if not d["inventory"]["user"]["foreign_id"]:
|
||||
if not d["inventory"]["user"]["username"]:
|
||||
d["inventory"].pop("user")
|
||||
if "owner" in d["inventory"]:
|
||||
if not d["inventory"]["owner"]["foreign_id"]:
|
||||
if not d["inventory"]["owner"]["username"]:
|
||||
d["inventory"].pop("owner")
|
||||
item_id = db.inventory.insert_one(d).inserted_id
|
||||
except pymongo.errors.DuplicateKeyError:
|
||||
@@ -402,7 +396,7 @@ def view_inventory_claim(item_id):
|
||||
user = read_user()
|
||||
db.inventory.update_one({
|
||||
"_id": ObjectId(item_id),
|
||||
"inventory.owner.foreign_id": None
|
||||
"inventory.owner.username": None
|
||||
}, {
|
||||
"$set": {
|
||||
"inventory.owner.username": user["username"],
|
||||
@@ -419,7 +413,7 @@ def view_inventory_use(item_id):
|
||||
item = db.inventory.find_one({
|
||||
"_id": ObjectId(item_id),
|
||||
"inventory.usable": True,
|
||||
"inventory.user.foreign_id": None
|
||||
"inventory.user.username": None
|
||||
})
|
||||
if not item:
|
||||
return abort(404)
|
||||
|
Reference in New Issue
Block a user