twschum / mix-mind Goto Github PK
View Code? Open in Web Editor NEWDynamic menu generator and order manager for home bars
Home Page: https://schubar.org
License: Apache License 2.0
Dynamic menu generator and order manager for home bars
Home Page: https://schubar.org
License: Apache License 2.0
Some sort of permissions control so customers get read-only access
there's a ::marker
added that prepends a bullet to li
tag items in Firefox but not Chrome. Seen when looking at a details page for a drink.
Happens on csv upload
INFO:werkzeug:127.0.0.1 - - [09/Jan/2020 17:12:47] "POST /manage/ingredients HTTP/1.1" 500 -
Traceback (most recent call last):
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/app.py", line 2309, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/app.py", line 2295, in wsgi_app
response = self.handle_exception(e)
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/app.py", line 1741, in handle_exception
reraise(exc_type, exc_value, tb)
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask_login/utils.py", line 261, in decorated_view
return func(*args, **kwargs)
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask_security/decorators.py", line 216, in decorated_view
return fn(*args, **kwargs)
File "/Users/tim/mix-mind/mixmind/views.py", line 386, in decorated_function
return f(*args, **kwargs)
File "/Users/tim/mix-mind/mixmind/views.py", line 487, in ingredient_stock
replace_existing=upload_form.replace_existing.data)
File "/Users/tim/mix-mind/mixmind/barstock.py", line 80, in load_from_csv
for row in reader:
File "/Users/tim/mix-mind/mixmind/util.py", line 379, in __next__
row = next(super(UnicodeDictReader, self))
TypeError: 'super' object is not an iterator
Admin should have an API option to delete a user
2020-03-25 21:18:49,694: Exception on / [GET]
Traceback (most recent call last):
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/sqlalchemy/engine/result.py", line 726, in _getter
getter = self._metadata._getter
AttributeError: 'NoneType' object has no attribute '_getter'
**NO MATCH**
During handling of the above exception, another exception occurred:
**NO MATCH**
Traceback (most recent call last):
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/twschum/mix-mind/mixmind/views.py", line 131, in browse
to_html=True, order_link=True, convert_to=current_bar.convert, condense_ingredients=current_bar.summarize)
File "/home/twschum/mix-mind/mixmind/views.py", line 69, in recipes_from_options
recipes, excluded = filter_recipes(mms.processed_recipes(current_bar), filter_options, union_results=bool(filter_options.search))
File "/home/twschum/mix-mind/mixmind/configuration_management.py", line 74, in processed_recipes
self.generate_recipes(bar)
File "/home/twschum/mix-mind/mixmind/configuration_management.py", line 88, in generate_recipes
for name, recipe in list(self.base_recipes.items())]
File "/home/twschum/mix-mind/mixmind/configuration_management.py", line 88, in <listcomp>
for name, recipe in list(self.base_recipes.items())]
File "/home/twschum/mix-mind/mixmind/recipe.py", line 103, in generate_examples
example_kinds = barstock.get_all_kind_combinations((i.specifier for i in ingredients))
File "/home/twschum/mix-mind/mixmind/barstock.py", line 119, in get_all_kind_combinations
kind_lists = [[b.Kind for b in self.slice_on_type(i)] for i in specifiers]
File "/home/twschum/mix-mind/mixmind/barstock.py", line 119, in <listcomp>
kind_lists = [[b.Kind for b in self.slice_on_type(i)] for i in specifiers]
File "/home/twschum/mix-mind/mixmind/barstock.py", line 169, in slice_on_type
return Ingredient.query.filter(filter_).all()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3161, in all
return list(self)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/sqlalchemy/orm/loading.py", line 105, in instances
util.raise_from_cause(err)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 383, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 129, in reraise
raise value
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/sqlalchemy/orm/loading.py", line 65, in instances
for query_entity in query._entities
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/sqlalchemy/orm/loading.py", line 65, in <listcomp>
for query_entity in query._entities
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 4182, in row_processor
polymorphic_discriminator=self._polymorphic_discriminator,
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/sqlalchemy/orm/loading.py", line 405, in _instance_processor
getter = result._getter(col, False)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/sqlalchemy/engine/result.py", line 728, in _getter
return self._non_result(None)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/sqlalchemy/engine/result.py", line 1170, in _non_result
"This result object does not return rows. "
sqlalchemy.exc.ResourceClosedError: This result object does not return rows. It has been closed automatically.
2020-03-25 21:18:49,730: OSError: write error
Add OAuth integration
Apply suggestions for a given bar to see what three ingredients would make the most drinks.
2020-01-09 18:45:33,333: Exception on /user [GET]
Traceback (most recent call last):
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask_login/utils.py", line 261, in decorated_view
return func(*args, **kwargs)
File "/home/twschum/mix-mind/mixmind/views.py", line 349, in user_profile
timestamp=mms.timestamp_formatter)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/templating.py", line 135, in render_template
context, ctx.app)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/templating.py", line 117, in _render
rv = template.render(context)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/jinja2/asyncsupport.py", line 76, in render
return original_render(self, *args, **kwargs)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/jinja2/environment.py", line 1008, in render
return self.environment.handle_exception(exc_info, True)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/jinja2/environment.py", line 780, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/jinja2/_compat.py", line 37, in reraise
raise value.with_traceback(tb)
File "/home/twschum/mix-mind/mixmind/templates/user_profile.html", line 3, in top-level template code
{% from "_macros.html" import show_flashed, render_field %}
File "/home/twschum/mix-mind/mixmind/templates/form_base.html", line 2, in top-level template code
{% extends "base.html" %}
File "/home/twschum/mix-mind/mixmind/templates/base.html", line 147, in top-level template code
{% block body %}
File "/home/twschum/mix-mind/mixmind/templates/form_base.html", line 6, in block "body"
{% block formblock %}
File "/home/twschum/mix-mind/mixmind/templates/user_profile.html", line 75, in block "formblock"
<td>{{ human_timediff(order.confirmed) }}</td>
File "/home/twschum/mix-mind/mixmind/util.py", line 371, in to_human_diff
return pendulum.instance(dt).diff_for_humans() if dt else '-'
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/datetime.py", line 743, in diff_for_humans
other = self.now()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/datetime.py", line 76, in now
return pendulum.now(tz)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/__init__.py", line 207, in now
dt = _datetime.datetime.now(local_timezone())
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/__init__.py", line 59, in local_timezone
return get_local_timezone()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/local_timezone.py", line 31, in get_local_timezone
tz = _get_system_timezone()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/local_timezone.py", line 59, in _get_system_timezone
return _get_unix_timezone()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/local_timezone.py", line 174, in _get_unix_timezone
return Timezone(etctz.replace(' ', '_'))
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/timezone.py", line 30, in __init__
tz = read(name, extend=extended)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/zoneinfo/__init__.py", line 9, in read
return Reader(extend=extend).read_for(name)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/zoneinfo/reader.py", line 52, in read_for
return self.read(file_path)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/zoneinfo/reader.py", line 64, in read
return self._parse(fd)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/zoneinfo/reader.py", line 115, in _parse
type_idx = self._parse_type_idx(fd, hdr.transitions)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/zoneinfo/reader.py", line 198, in _parse_type_idx
buff = self._check_read(fd, n)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/zoneinfo/reader.py", line 77, in _check_read
nbytes, fd.name, len(result) if result else 0
pendulum.tz.zoneinfo.exceptions.InvalidZoneinfoFile: Expected 0 bytes reading /home/twschum/mix-mind/venv/lib/python3.6/site-packages/pytzdata/zoneinfo/Etc/UTC, but got 0
2020-01-09 18:45:33,546: Request finalizing failed with an error while handling an error
Traceback (most recent call last):
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask_login/utils.py", line 261, in decorated_view
return func(*args, **kwargs)
File "/home/twschum/mix-mind/mixmind/views.py", line 349, in user_profile
timestamp=mms.timestamp_formatter)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/templating.py", line 135, in render_template
context, ctx.app)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/templating.py", line 117, in _render
rv = template.render(context)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/jinja2/asyncsupport.py", line 76, in render
return original_render(self, *args, **kwargs)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/jinja2/environment.py", line 1008, in render
return self.environment.handle_exception(exc_info, True)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/jinja2/environment.py", line 780, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/jinja2/_compat.py", line 37, in reraise
raise value.with_traceback(tb)
File "/home/twschum/mix-mind/mixmind/templates/user_profile.html", line 3, in top-level template code
{% from "_macros.html" import show_flashed, render_field %}
File "/home/twschum/mix-mind/mixmind/templates/form_base.html", line 2, in top-level template code
{% extends "base.html" %}
File "/home/twschum/mix-mind/mixmind/templates/base.html", line 147, in top-level template code
{% block body %}
File "/home/twschum/mix-mind/mixmind/templates/form_base.html", line 6, in block "body"
{% block formblock %}
File "/home/twschum/mix-mind/mixmind/templates/user_profile.html", line 75, in block "formblock"
<td>{{ human_timediff(order.confirmed) }}</td>
File "/home/twschum/mix-mind/mixmind/util.py", line 371, in to_human_diff
return pendulum.instance(dt).diff_for_humans() if dt else '-'
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/datetime.py", line 743, in diff_for_humans
other = self.now()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/datetime.py", line 76, in now
return pendulum.now(tz)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/__init__.py", line 207, in now
dt = _datetime.datetime.now(local_timezone())
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/__init__.py", line 59, in local_timezone
return get_local_timezone()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/local_timezone.py", line 31, in get_local_timezone
tz = _get_system_timezone()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/local_timezone.py", line 59, in _get_system_timezone
return _get_unix_timezone()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/local_timezone.py", line 174, in _get_unix_timezone
return Timezone(etctz.replace(' ', '_'))
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/timezone.py", line 30, in __init__
tz = read(name, extend=extended)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/zoneinfo/__init__.py", line 9, in read
return Reader(extend=extend).read_for(name)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/zoneinfo/reader.py", line 52, in read_for
return self.read(file_path)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/zoneinfo/reader.py", line 64, in read
return self._parse(fd)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/zoneinfo/reader.py", line 115, in _parse
type_idx = self._parse_type_idx(fd, hdr.transitions)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/zoneinfo/reader.py", line 198, in _parse_type_idx
buff = self._check_read(fd, n)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/pendulum/tz/zoneinfo/reader.py", line 77, in _check_read
nbytes, fd.name, len(result) if result else 0
pendulum.tz.zoneinfo.exceptions.InvalidZoneinfoFile: Expected 0 bytes reading /home/twschum/mix-mind/venv/lib/python3.6/site-packages/pytzdata/zoneinfo/Etc/UTC, but got 0
**NO MATCH**
During handling of the above exception, another exception occurred:
**NO MATCH**
Traceback (most recent call last):
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1833, in finalize_request
response = self.process_response(response)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 2114, in process_response
self.session_interface.save_session(self, ctx.session, response)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/sessions.py", line 375, in save_session
val = self.get_signing_serializer(app).dumps(dict(session))
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/itsdangerous.py", line 565, in dumps
payload = want_bytes(self.dump_payload(obj))
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/itsdangerous.py", line 847, in dump_payload
json = super(URLSafeSerializerMixin, self).dump_payload(obj)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/itsdangerous.py", line 550, in dump_payload
return want_bytes(self.serializer.dumps(obj))
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/json/tag.py", line 296, in dumps
return dumps(self.tag(value), separators=(',', ':'))
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/json/__init__.py", line 179, in dumps
rv = _json.dumps(obj, **kwargs)
File "/usr/lib/python3.6/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/usr/lib/python3.6/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python3.6/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/json/__init__.py", line 81, in default
return _json.JSONEncoder.default(self, o)
File "/usr/lib/python3.6/json/encoder.py", line 180, in default
o.__class__.__name__)
TypeError: Object of type 'InvalidZoneinfoFile' is not JSON serializable
After the confirm delete modal is used once, subsequent uses of it get a js reference to the row that's been orphaned and can't act on the table.
See configuration_management.py
On mobile, logged in bar-owner users will select nav to go to their settings, but it insteads sends them to the admin dashboard
With #15 merged, there exists backend support for multiple bars, and the tools to edit and manage ingredient.
Required features
2019-09-04 14:05:50,243: Exception on / [HEAD]
Traceback (most recent call last):
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/twschum/mix-mind/mixmind/views.py", line 130, in browse
to_html=True, order_link=True, convert_to=current_bar.convert, condense_ingredients=current_bar.summarize)
File "/home/twschum/mix-mind/mixmind/views.py", line 68, in recipes_from_options
recipes, excluded = filter_recipes(mms.processed_recipes(current_bar), filter_options, union_results=bool(filter_options.search))
File "/home/twschum/mix-mind/mixmind/util.py", line 60, in filter_recipes
include_list = [i.lower() for i in filter_options.include]
TypeError: 'NoneType' object is not iterable
INFO:werkzeug:127.0.0.1 - - [25/Mar/2020 10:41:21] "POST /manage/ingredients HTTP/1.1" 500 -
Traceback (most recent call last):
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/app.py", line 2309, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/app.py", line 2295, in wsgi_app
response = self.handle_exception(e)
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/app.py", line 1741, in handle_exception
reraise(exc_type, exc_value, tb)
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask_login/utils.py", line 261, in decorated_view
return func(*args, **kwargs)
File "/Users/tim/mix-mind/venv/lib/python3.7/site-packages/flask_security/decorators.py", line 216, in decorated_view
return fn(*args, **kwargs)
File "/Users/tim/mix-mind/mixmind/views.py", line 386, in decorated_function
return f(*args, **kwargs)
File "/Users/tim/mix-mind/mixmind/views.py", line 487, in ingredient_stock
replace_existing=upload_form.replace_existing.data)
File "/Users/tim/mix-mind/mixmind/barstock.py", line 80, in load_from_csv
for row in reader:
File "/Users/tim/mix-mind/mixmind/util.py", line 379, in __next__
row = next(super(UnicodeDictReader, self))
TypeError: 'super' object is not an iterator
Admin should be able to:
Should check this in validation, not be a traceback for the server.
2021-05-13 15:52:31,049: Traceback (most recent call last):
2021-05-13 15:52:31,050: File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 2446, in wsgi_app
2021-05-13 15:52:31,050: response = self.full_dispatch_request()
2021-05-13 15:52:31,050: File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1951, in full_dispatch_request
2021-05-13 15:52:31,050: rv = self.handle_user_exception(e)
2021-05-13 15:52:31,050: File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1820, in handle_user_exception
2021-05-13 15:52:31,050: reraise(exc_type, exc_value, tb)
2021-05-13 15:52:31,051: File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise
2021-05-13 15:52:31,051: raise value
2021-05-13 15:52:31,051: File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1949, in full_dispatch_request
2021-05-13 15:52:31,051: rv = self.dispatch_request()
2021-05-13 15:52:31,051: File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1935, in dispatch_request
2021-05-13 15:52:31,052: return self.view_functions[rule.endpoint](**req.view_args)
2021-05-13 15:52:31,052: File "/home/twschum/mix-mind/mixmind/views.py", line 131, in browse
2021-05-13 15:52:31,052: to_html=True, order_link=True, convert_to=current_bar.convert, condense_ingredients=current_bar.summarize)
2021-05-13 15:52:31,052: File "/home/twschum/mix-mind/mixmind/views.py", line 69, in recipes_from_options
2021-05-13 15:52:31,052: recipes, excluded = filter_recipes(mms.processed_recipes(current_bar), filter_options, union_results=bool(filter_options.search))
2021-05-13 15:52:31,052: File "/home/twschum/mix-mind/mixmind/configuration_management.py", line 74, in processed_recipes
2021-05-13 15:52:31,053: self.generate_recipes(bar)
2021-05-13 15:52:31,053: File "/home/twschum/mix-mind/mixmind/configuration_management.py", line 88, in generate_recipes
2021-05-13 15:52:31,053: for name, recipe in list(self.base_recipes.items())]
2021-05-13 15:52:31,053: File "/home/twschum/mix-mind/mixmind/configuration_management.py", line 88, in <listcomp>
2021-05-13 15:52:31,053: for name, recipe in list(self.base_recipes.items())]
2021-05-13 15:52:31,054: File "/home/twschum/mix-mind/mixmind/recipe.py", line 114, in generate_examples
2021-05-13 15:52:31,054: example.cost += ingredient.get_cost(kind, barstock)
2021-05-13 15:52:31,054: File "/home/twschum/mix-mind/mixmind/recipe.py", line 348, in get_cost
2021-05-13 15:52:31,054: return barstock.cost_by_kind_and_volume(util.IngredientSpecifier(self.specifier.ingredient, kind), amount, self.recipe_unit)
2021-05-13 15:52:31,054: File "/home/twschum/mix-mind/mixmind/barstock.py", line 130, in cost_by_kind_and_volume
2021-05-13 15:52:31,054: per_unit = self.get_kind_field(ingredient, 'Cost_per_{}'.format(unit))
2021-05-13 15:52:31,055: File "/home/twschum/mix-mind/mixmind/barstock.py", line 136, in get_kind_field
2021-05-13 15:52:31,055: return self.get_ingredient_row(ingredient)[field]
2021-05-13 15:52:31,055: File "/home/twschum/mix-mind/mixmind/barstock.py", line 143, in get_ingredient_row
2021-05-13 15:52:31,055: raise ValueError('{} has multiple entries in the input data!'.format(ingredient.__repr__()))
2021-05-13 15:52:31,055: ValueError: any spirit:St. Remy V.S.O.P. has multiple entries in the input data!
2020-02-11 00:21:48,901: Exception on / [HEAD]
Traceback (most recent call last):
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/twschum/mix-mind/mixmind/views.py", line 130, in browse
to_html=True, order_link=True, convert_to=current_bar.convert, condense_ingredients=current_bar.summarize)
File "/home/twschum/mix-mind/mixmind/views.py", line 68, in recipes_from_options
recipes, excluded = filter_recipes(mms.processed_recipes(current_bar), filter_options, union_results=bool(filter_options.search))
File "/home/twschum/mix-mind/mixmind/util.py", line 60, in filter_recipes
include_list = [i.lower() for i in filter_options.include]
TypeError: 'NoneType' object is not iterable
https://black.readthedocs.io/en/stable/
Black format integration:
To support growing bar usage, a bar's owner should be able to manage who is allowed to visit and order there. Those people would be "regulars" at a bar.
First pass may simply be that users can friend each other.
[ ] Searchable users page
[ ] Can make friend requests
[ ] User can see friend requests on page
[ ] Alert badges on user page icon
[ ] User pages have a "public" view available to others
Another layer is that a bar should have different visibility modes
[ ] Default bar? How to handle non-logged-in users
[ ] Any user (public to anyone logged-in)
[ ] Regulars only (bar owner's friends)
[ ] Hidden (this exists, make it more obvious)
[ ] Self-service create-your-bar
[ ] Multiple bars per user? Should be limited
Exception on / [GET]
Traceback (most recent call last):
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "/home/twschum/mix-mind/venv/lib/python3.6/site-packages/flask/app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/twschum/mix-mind/mixmind/views.py", line 131, in browse
to_html=True, order_link=True, convert_to=current_bar.convert, condense_ingredients=current_bar.summarize)
File "/home/twschum/mix-mind/mixmind/views.py", line 69, in recipes_from_options
recipes, excluded = filter_recipes(mms.processed_recipes(current_bar), filter_options, union_results=bool(filter_options.search))
File "/home/twschum/mix-mind/mixmind/configuration_management.py", line 74, in processed_recipes
self.generate_recipes(bar)
File "/home/twschum/mix-mind/mixmind/configuration_management.py", line 88, in generate_recipes
for name, recipe in list(self.base_recipes.items())]
File "/home/twschum/mix-mind/mixmind/configuration_management.py", line 88, in <listcomp>
for name, recipe in list(self.base_recipes.items())]
File "/home/twschum/mix-mind/mixmind/recipe.py", line 113, in generate_examples
example.std_drinks += ingredient.get_std_drinks(kind, barstock)
File "/home/twschum/mix-mind/mixmind/recipe.py", line 346, in get_std_drinks
abv = barstock.get_kind_abv(util.IngredientSpecifier(self.specifier.ingredient, kind))
File "/home/twschum/mix-mind/mixmind/barstock.py", line 124, in get_kind_abv
return self.get_kind_field(ingredient, 'ABV')
File "/home/twschum/mix-mind/mixmind/barstock.py", line 136, in get_kind_field
return self.get_ingredient_row(ingredient)[field]
File "/home/twschum/mix-mind/mixmind/barstock.py", line 143, in get_ingredient_row
raise ValueError('{} has multiple entries in the input data!'.format(ingredient.__repr__()))
ValueError: Scotch whisky:Laphroaig 10 CS Batch #10 has multiple entries in the input data!
Need a proper recipe library interface.
Extra:
Global vs per bar
Considerations
Happens when an anon user tries to order, at least with a honey flannel. Unable to order
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.