Stubbing out a lookup function. #15
authorEevee <git@veekun.com>
Tue, 21 Jul 2009 07:12:25 +0000 (00:12 -0700)
committerEevee <git@veekun.com>
Tue, 21 Jul 2009 07:12:25 +0000 (00:12 -0700)
pokedex/lookup.py [new file with mode: 0644]

diff --git a/pokedex/lookup.py b/pokedex/lookup.py
new file mode 100644 (file)
index 0000000..90fb3d3
--- /dev/null
@@ -0,0 +1,31 @@
+# encoding: utf8
+from sqlalchemy.sql import func
+
+import pokedex.db.tables as tables
+
+def lookup(session, name):
+    """Attempts to find some sort of object, given a database session and name.
+
+    Returns a list of (object, matchiness) tuples.  Matchiness is 1 for exact
+    matches.  It is possible to get multiple exact matches; for example,
+    'Metronome' will match both the move and the item.  In these cases, the
+    results are returned in rough order of "importance", e.g., Pokémon come
+    before moves come before types.
+
+    This function does fuzzy matching iff there are no exact matches.
+
+    Formes are not returned; "Shaymin" will return only grass Shaymin.
+    
+    Currently recognizes:
+    - Pokémon names: "Eevee"
+    """
+
+    q = session.query(tables.Pokemon) \
+               .filter(func.lower(tables.Pokemon.name) == name.lower()) \
+               .filter_by(forme_base_pokemon_id=None)
+
+    try:
+        result = q.one()
+        return [ (result, 1) ]
+    except:
+        return []