Skip to content

Commit 9edc07a

Browse files
committed
consolidate getting child models
1 parent 1be546d commit 9edc07a

19 files changed

Lines changed: 337 additions & 155 deletions

mkdocs/intro.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,11 @@ The following is an example of an article being obtained from the database.
6969
```python
7070
import tibiawikisql
7171
import sqlite3
72+
7273
# Path to the previously generated database
7374
conn = sqlite3.connect("tibiawiki.db")
7475
# creature now contains all the parsed information, including loot statistics.
75-
creature = Creature.get_by_field(conn, "title", "Demon")
76+
creature = Creature.get_one_by_field(conn, "title", "Demon")
7677
# This would return a list of Item objects.
7778
# Note that when multiple objects are obtained, their child rows are not fetched.
7879
swords = Item.search(conn, "type", "Sword Weapons")

tests/models/test_achievement.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,14 @@ def test_achievement_insert(self):
4848
achievement.insert(self.conn)
4949

5050
def test_achievement_get_by_field_no_results(self):
51-
achievement = Achievement.get_by_field(self.conn, "achievement_id", 57)
51+
achievement = Achievement.get_one_by_field(self.conn, "achievement_id", 57)
5252

5353
self.assertIsNone(achievement)
5454

5555
def test_achievement_get_by_field_with_result(self):
5656
ACHIEVEMENT_ANNIHILATOR.insert(self.conn)
5757

58-
db_achievement = Achievement.get_by_field(self.conn, "achievement_id", 57)
58+
db_achievement = Achievement.get_one_by_field(self.conn, "achievement_id", 57)
5959

6060
self.assertIsInstance(db_achievement, Achievement)
6161
self.assertEqual(ACHIEVEMENT_ANNIHILATOR.timestamp, db_achievement.timestamp)

tests/models/test_book.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from polyfactory.factories.pydantic_factory import ModelFactory
55

66
from tibiawikisql.models import Book, Item, ItemStoreOffer
7-
from tibiawikisql.models.item import ItemSound
87
from tibiawikisql.schema import BookTable, ItemAttributeTable, ItemSoundTable, ItemStoreOfferTable, ItemTable
98

109

@@ -44,6 +43,6 @@ def test_book_insert(self):
4443
item.insert(self.conn)
4544

4645
book.insert(self.conn)
47-
inserted_book = book.table.get_by_field(self.conn, "article_id", book.article_id)
46+
inserted_book = book.table.get_one_by_field(self.conn, "article_id", book.article_id)
4847

4948
self.assertEqual(item.article_id, inserted_book["article_id"])

tests/models/test_npc.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22
import sqlite3
33
import unittest
44

5-
from tibiawikisql.models import Npc
6-
from tibiawikisql.schema import NpcJobTable, NpcRaceTable, NpcSpellTable, NpcTable, SpellTable
5+
from tibiawikisql.models import Npc, NpcDestination, NpcOffer
6+
from tibiawikisql.schema import ItemTable, NpcBuyingTable, NpcDestinationTable, NpcJobTable, NpcRaceTable, \
7+
NpcSellingTable, NpcSpellTable, \
8+
NpcTable, \
9+
SpellTable
710

811

912
class TestNpc(unittest.TestCase):
@@ -13,6 +16,10 @@ def setUp(self):
1316
self.conn.executescript(NpcSpellTable.get_create_table_statement())
1417
self.conn.executescript(NpcJobTable.get_create_table_statement())
1518
self.conn.executescript(NpcRaceTable.get_create_table_statement())
19+
self.conn.executescript(NpcBuyingTable.get_create_table_statement())
20+
self.conn.executescript(NpcSellingTable.get_create_table_statement())
21+
self.conn.executescript(ItemTable.get_create_table_statement())
22+
self.conn.executescript(NpcDestinationTable.get_create_table_statement())
1623

1724
def test_npc_with_spells(self):
1825
# Arrange
@@ -59,10 +66,10 @@ def test_npc_with_spells(self):
5966
)
6067
NpcSpellTable.insert(self.conn, npc_id=1, spell_id=1, druid=True)
6168

62-
npc = Npc.get_by_field(self.conn, "name", "Azalea")
69+
npc = Npc.get_one_by_field(self.conn, "name", "Azalea")
6370

6471
self.assertIsInstance(npc, Npc)
6572
self.assertEqual(5, len(npc.jobs))
6673
self.assertEqual("Human", npc.race)
6774
self.assertEqual(1, len(npc.teaches))
68-
self.assertEqual("Food (Spell)", npc.teaches[0].spell)
75+
self.assertEqual("Food (Spell)", npc.teaches[0].spell_title)

tests/tests_models.py

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ def test_achievement(self):
2020
self.assertIsInstance(achievement, models.Achievement)
2121

2222
achievement.insert(self.conn)
23-
db_achievement = models.Achievement.get_by_field(self.conn, "article_id", 1)
23+
db_achievement = models.Achievement.get_one_by_field(self.conn, "article_id", 1)
2424

2525
self.assertIsInstance(db_achievement, models.Achievement)
2626
self.assertEqual(db_achievement.name, achievement.name)
2727

28-
db_achievement = models.Achievement.get_by_field(self.conn, "name", "demonic barkeeper", use_like=True)
28+
db_achievement = models.Achievement.get_one_by_field(self.conn, "name", "demonic barkeeper", use_like=True)
2929
self.assertIsInstance(db_achievement, models.Achievement)
3030

3131
def test_creature(self):
@@ -35,7 +35,7 @@ def test_creature(self):
3535
self.assertIsInstance(creature, models.Creature)
3636

3737
creature.insert(self.conn)
38-
db_creature: models.Creature = models.Creature.get_by_field(self.conn, "article_id", 1)
38+
db_creature: models.Creature = models.Creature.get_one_by_field(self.conn, "article_id", 1)
3939

4040
self.assertIsInstance(db_creature, models.Creature)
4141
self.assertEqual(db_creature.name, creature.name)
@@ -52,7 +52,7 @@ def test_creature(self):
5252
self.assertEqual(50, db_creature.charm_points)
5353
self.assertIsNotNone(db_creature.max_damage)
5454

55-
db_creature = models.Creature.get_by_field(self.conn, "name", "demon", use_like=True)
55+
db_creature = models.Creature.get_one_by_field(self.conn, "name", "demon", use_like=True)
5656
self.assertIsInstance(db_creature, models.Creature)
5757

5858
def test_house(self):
@@ -62,12 +62,12 @@ def test_house(self):
6262
self.assertIsInstance(house, models.House)
6363

6464
house.insert(self.conn)
65-
db_house = models.House.get_by_field(self.conn, "article_id", 1)
65+
db_house = models.House.get_one_by_field(self.conn, "article_id", 1)
6666

6767
self.assertIsInstance(db_house, models.House)
6868
self.assertEqual(db_house.name, house.name)
6969

70-
models.House.get_by_field(self.conn, "house_id", 55302)
70+
models.House.get_one_by_field(self.conn, "house_id", 55302)
7171
self.assertIsInstance(db_house, models.House)
7272

7373
def test_imbuement(self):
@@ -77,14 +77,14 @@ def test_imbuement(self):
7777
self.assertIsInstance(imbuement, models.Imbuement)
7878

7979
imbuement.insert(self.conn)
80-
db_imbuement = models.Imbuement.get_by_field(self.conn, "article_id", 1)
80+
db_imbuement = models.Imbuement.get_one_by_field(self.conn, "article_id", 1)
8181

8282
self.assertIsInstance(db_imbuement, models.Imbuement)
8383
self.assertEqual(db_imbuement.name, imbuement.name)
8484
self.assertEqual(db_imbuement.tier, imbuement.tier)
8585
self.assertGreater(len(db_imbuement.materials), 0)
8686

87-
db_imbuement = models.Imbuement.get_by_field(self.conn, "name", "powerful strike", use_like=True)
87+
db_imbuement = models.Imbuement.get_one_by_field(self.conn, "name", "powerful strike", use_like=True)
8888
self.assertIsInstance(db_imbuement, models.Imbuement)
8989

9090
def test_item(self):
@@ -94,7 +94,7 @@ def test_item(self):
9494
self.assertIsInstance(item, models.Item)
9595

9696
item.insert(self.conn)
97-
db_item = models.Item.get_by_field(self.conn, "article_id", 1)
97+
db_item = models.Item.get_one_by_field(self.conn, "article_id", 1)
9898

9999
self.assertIsInstance(db_item, models.Item)
100100
self.assertEqual(db_item.name, item.name)
@@ -108,7 +108,7 @@ def test_item(self):
108108
"The blade is a magic flame.")
109109
self.assertEqual(fire_sword_look_text, item.look_text)
110110

111-
db_item = models.Item.get_by_field(self.conn, "name", "fire sword", use_like=True)
111+
db_item = models.Item.get_one_by_field(self.conn, "name", "fire sword", use_like=True)
112112
self.assertIsInstance(db_item, models.Item)
113113

114114
def test_item_resist(self):
@@ -127,13 +127,13 @@ def test_item_resist(self):
127127
self.assertEqual(item.resistances["energy"], 10)
128128

129129
item.insert(self.conn)
130-
db_item = models.Item.get_by_field(self.conn, "article_id", 1)
130+
db_item = models.Item.get_one_by_field(self.conn, "article_id", 1)
131131

132132
self.assertIsInstance(db_item, models.Item)
133133
self.assertEqual(db_item.name, item.name)
134134
self.assertGreater(len(db_item.attributes), 0)
135135

136-
db_item = models.Item.get_by_field(self.conn, "name", "dream shroud", use_like=True)
136+
db_item = models.Item.get_one_by_field(self.conn, "name", "dream shroud", use_like=True)
137137
self.assertIsInstance(db_item, models.Item)
138138

139139
def test_item_sounds(self):
@@ -144,12 +144,12 @@ def test_item_sounds(self):
144144
self.assertEqual(len(item.sounds), 5)
145145

146146
item.insert(self.conn)
147-
db_item = models.Item.get_by_field(self.conn, "article_id", 1)
147+
db_item = models.Item.get_one_by_field(self.conn, "article_id", 1)
148148

149149
self.assertIsInstance(db_item, models.Item)
150150
self.assertEqual(db_item.name, item.name)
151151

152-
db_item = models.Item.get_by_field(self.conn, "name", "mini nabbot", use_like=True)
152+
db_item = models.Item.get_one_by_field(self.conn, "name", "mini nabbot", use_like=True)
153153
self.assertEqual(len(item.sounds), len(db_item.sounds))
154154
self.assertIsInstance(db_item, models.Item)
155155

@@ -176,12 +176,12 @@ def test_key(self):
176176
self.assertIsInstance(key, models.Key)
177177

178178
key.insert(self.conn)
179-
db_key = models.Key.get_by_field(self.conn, "article_id", 1)
179+
db_key = models.Key.get_one_by_field(self.conn, "article_id", 1)
180180

181181
self.assertIsInstance(db_key, models.Key)
182182
self.assertEqual(db_key.name, key.name)
183183

184-
db_key = models.Key.get_by_field(self.conn, "number", 3940)
184+
db_key = models.Key.get_one_by_field(self.conn, "number", 3940)
185185
self.assertIsInstance(db_key, models.Key)
186186

187187
def test_book(self):
@@ -191,7 +191,7 @@ def test_book(self):
191191
self.assertIsInstance(book, models.Book)
192192

193193
book.insert(self.conn)
194-
db_book = models.Book.get_by_field(self.conn, "article_id", 1)
194+
db_book = models.Book.get_one_by_field(self.conn, "article_id", 1)
195195

196196
self.assertIsInstance(db_book, models.Book)
197197
self.assertEqual(db_book.name, book.name)
@@ -208,7 +208,7 @@ def test_npc(self):
208208
self.assertIsInstance(npc, models.Npc)
209209

210210
npc.insert(self.conn)
211-
db_npc = models.Npc.get_by_field(self.conn, "article_id", 1)
211+
db_npc = models.Npc.get_one_by_field(self.conn, "article_id", 1)
212212

213213
self.assertIsInstance(db_npc, models.Npc)
214214
self.assertEqual(db_npc.name, npc.name)
@@ -231,7 +231,7 @@ def test_quest(self):
231231
self.assertIsInstance(quest, models.Quest)
232232

233233
quest.insert(self.conn)
234-
db_quest = models.Quest.get_by_field(self.conn, "article_id", 1)
234+
db_quest = models.Quest.get_one_by_field(self.conn, "article_id", 1)
235235

236236
self.assertIsInstance(db_quest, models.Quest)
237237
self.assertEqual(db_quest.name, quest.name)
@@ -243,7 +243,7 @@ def test_spell(self):
243243
self.assertIsInstance(spell, models.Spell)
244244

245245
spell.insert(self.conn)
246-
db_spell = models.Spell.get_by_field(self.conn, "article_id", 1)
246+
db_spell = models.Spell.get_one_by_field(self.conn, "article_id", 1)
247247

248248
self.assertIsInstance(db_spell, models.Spell)
249249
self.assertEqual(db_spell.name, spell.name)
@@ -256,7 +256,7 @@ def test_world(self):
256256
self.assertIsInstance(world.trade_board, int)
257257

258258
world.insert(self.conn)
259-
db_world = models.World.get_by_field(self.conn, "article_id", 1)
259+
db_world = models.World.get_one_by_field(self.conn, "article_id", 1)
260260

261261
self.assertIsInstance(db_world, models.World)
262262
self.assertEqual(db_world.name, world.name)
@@ -271,7 +271,7 @@ def test_mount(self):
271271
self.assertIsInstance(mount.buyable, int)
272272

273273
mount.insert(self.conn)
274-
db_mount = models.Mount.get_by_field(self.conn, "article_id", 1)
274+
db_mount = models.Mount.get_one_by_field(self.conn, "article_id", 1)
275275

276276
self.assertIsInstance(db_mount, models.Mount)
277277
self.assertEqual(db_mount.name, mount.name)
@@ -287,7 +287,7 @@ def test_charm(self):
287287
self.assertEqual("11.50.6055", charm.version)
288288

289289
charm.insert(self.conn)
290-
db_charm = models.Charm.get_by_field(self.conn, "article_id", 1)
290+
db_charm = models.Charm.get_one_by_field(self.conn, "article_id", 1)
291291

292292
self.assertIsInstance(db_charm, models.Charm)
293293
self.assertEqual(db_charm.name, charm.name)
@@ -301,7 +301,7 @@ def test_outfit(self):
301301
self.assertEqual(outfit.achievement, "Brutal Politeness")
302302

303303
outfit.insert(self.conn)
304-
db_outfit = models.Outfit.get_by_field(self.conn, "article_id", 1)
304+
db_outfit = models.Outfit.get_one_by_field(self.conn, "article_id", 1)
305305

306306
self.assertIsInstance(db_outfit, models.Outfit)
307307
self.assertEqual(db_outfit.name, outfit.name)

tests/tests_schema.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,20 +51,20 @@ def test_achievement_table_insert_wrong_type(self):
5151

5252
def test_achievement_table_get_by_field_wrong_column(self):
5353
with self.assertRaises(ValueError):
54-
AchievementTable.get_by_field(self.conn, "unknown", True)
54+
AchievementTable.get_one_by_field(self.conn, "unknown", True)
5555

5656
def test_achievement_table_get_by_field_no_results(self):
5757
self.conn.executescript(AchievementTable.get_create_table_statement())
5858

59-
result = AchievementTable.get_by_field(self.conn, "title", "Annihilator")
59+
result = AchievementTable.get_one_by_field(self.conn, "title", "Annihilator")
6060

6161
self.assertIsNone(result)
6262

6363
def test_achievement_table_get_by_field_get_results(self):
6464
self.conn.executescript(AchievementTable.get_create_table_statement())
6565
AchievementTable.insert(self.conn, **SAMPLE_ACHIEVEMENT_ROW)
6666

67-
result = AchievementTable.get_by_field(self.conn, "title", "Annihilator")
67+
result = AchievementTable.get_one_by_field(self.conn, "title", "Annihilator")
6868

6969
self.assertIsNotNone(result)
7070
self.assertEqual(5, result["points"])

tibiawikisql/api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def __eq__(self, other: object) -> bool:
4040
@property
4141
def url(self) -> str:
4242
"""The URL to the article's display page."""
43-
return f"{BASE_URL}/wiki/{urllib.parse.quote(self.title)}"
43+
return f"{BASE_URL}/wiki/{urllib.parse.quote(self.title.replace(" ","_"))}"
4444

4545

4646
class Article(WikiEntry):

0 commit comments

Comments
 (0)