Browse Source

remove the autocomplete callback nonsense

Daniel Sheffield 2 years ago
parent
commit
ef106a2d34
2 changed files with 22 additions and 27 deletions
  1. 20 16
      app/activities/RecipeEditor.py
  2. 2 11
      recipe.py

+ 20 - 16
app/activities/RecipeEditor.py

@@ -44,7 +44,12 @@ def to_numbered_field(x):
 
     return (name, int(idx)), x[1]
 
-def in_same_row(row):
+def to_unnumbered_field(x):
+    return x[0][0], x[1]
+
+def in_same_row(name):
+    if len(name.split('#', 1)) > 1:
+        _, row = name.split('#', 1)
     return lambda x: x[0][1] == int(row)
 
 class RecipeEditor(FocusWidget):
@@ -65,10 +70,9 @@ class RecipeEditor(FocusWidget):
 
     def apply_choice(self, name, value):
         self.apply_changes(name, value)
-        if len(name.split('#', 1)) > 1:
-            _, row = name.split('#', 1)
+
         data = dict(filter(
-            in_same_row(row),
+            in_same_row(name),
             map(to_numbered_field, self.data.items())
         ))
         
@@ -120,9 +124,6 @@ class RecipeEditor(FocusWidget):
     def __init__(self,
         activity_manager: ActivityManager,
         query_manager: QueryManager,
-        autocomplete_cb: Callable[[
-            Union[AutoCompleteEdit, AutoCompleteFloatEdit], str, dict
-        ], None],
     ):
         self.buttons = {
           'clear': Button(('streak', 'Clear')),
@@ -142,22 +143,25 @@ class RecipeEditor(FocusWidget):
         ]
 
         self.query_manager = query_manager
+        self.autocomplete_options = lambda name, data: self.query_manager.unique_suggestions(name.split('#', 1)[0], **data)
+        self.autocomplete_callback = lambda widget, options: len(options) > 0 and widget._emit('open', options)
         connect_signal(self.organic, 'postchange', lambda _,v: self.update())
 
         # todo: call this when adding new ingredient
         for idx, widget in enumerate(self.ingredients):
             connect_signal(widget[0], 'postchange', lambda _,v: self.update())
-            connect_signal(widget[0], 'apply', lambda w, name: autocomplete_cb(
-                w, name.split('#', 1)[0], dict(map(lambda x: (x[0][0], x[1]), filter(
-                    in_same_row(name.split('#', 1)[1]), map(to_numbered_field, self.data.items())
-                )))
+            connect_signal(widget[0], 'apply', lambda w, name: self.autocomplete_callback(
+                w, self.autocomplete_options(name, dict(map(
+                    to_unnumbered_field,
+                    filter(in_same_row(name), map(to_numbered_field, self.data.items())
+                ))))
             ))
             connect_signal(widget[1], 'postchange', lambda _,v: self.update())
-            connect_signal(widget[1], 'apply', lambda w, name: autocomplete_cb(
-                w, name.split('#', 1)[0], dict(map(lambda x: (x[0][0], x[1]), filter(
-                    in_same_row(name.split('#', 1)[1]),
-                    map(to_numbered_field, self.data.items())
-                )))
+            connect_signal(widget[1], 'apply', lambda w, name: self.autocomplete_callback(
+                w, self.autocomplete_options(name, dict(map(
+                    to_unnumbered_field,
+                    filter(in_same_row(name), map(to_numbered_field, self.data.items())
+                ))))
             ))
 
         connect_signal(self.buttons['clear'], 'click', lambda x: self.clear().update())

+ 2 - 11
recipe.py

@@ -36,15 +36,6 @@ except:
     exit(1)
     #from mock import *
 
-def _autocomplete_callback(
-    query_manager: QueryManager,
-    widget: Union[AutoCompleteEdit, AutoCompleteFloatEdit],
-    name: str, data: dict
-):
-    options = query_manager.unique_suggestions(name, **data)
-    if len(options) > 0:
-        widget._emit('open', options)
-
 class Recipe(urwid.WidgetPlaceholder):
     def __init__(self, activity_manager):
         super().__init__(urwid.SolidFill(u'/'))
@@ -59,9 +50,9 @@ cur.execute("BEGIN")
 activity_manager = ActivityManager()
 query_manager = QueryManager(cur, display_mapper)
 
-activity_manager.create(RecipeEditor, 'recipe_editor',
+activity_manager.create(RecipeEditor,
+    'recipe_editor',
     activity_manager, query_manager,
-    lambda widget, name, data: _autocomplete_callback(query_manager, widget, name, data),
 )
 
 app = Recipe(activity_manager)