aenir 0.0.post1.dev1377__tar.gz → 0.0.post1.dev1379__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/PKG-INFO +1 -1
  2. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/morph.py +3 -0
  3. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir.egg-info/PKG-INFO +1 -1
  4. aenir-0.0.post1.dev1379/src/aenir.egg-info/scm_version.json +8 -0
  5. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/tests/test_morph.py +23 -0
  6. aenir-0.0.post1.dev1377/src/aenir.egg-info/scm_version.json +0 -8
  7. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/.coveragerc +0 -0
  8. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/.gitignore +0 -0
  9. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/.readthedocs.yml +0 -0
  10. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/AUTHORS.md +0 -0
  11. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/CHANGELOG.md +0 -0
  12. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/CONTRIBUTING.md +0 -0
  13. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/LICENSE.txt +0 -0
  14. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/MANIFEST.in +0 -0
  15. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/README.md +0 -0
  16. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/TODO.md +0 -0
  17. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/docs/Makefile +0 -0
  18. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/docs/_static/.gitignore +0 -0
  19. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/docs/authors.md +0 -0
  20. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/docs/changelog.md +0 -0
  21. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/docs/conf.py +0 -0
  22. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/docs/contributing.md +0 -0
  23. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/docs/index.md +0 -0
  24. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/docs/license.md +0 -0
  25. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/docs/readme.md +0 -0
  26. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/docs/requirements.txt +0 -0
  27. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/logo.png +0 -0
  28. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/pyproject.toml +0 -0
  29. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/requirements-dev.txt +0 -0
  30. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/requirements.txt +0 -0
  31. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/setup.cfg +0 -0
  32. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/setup.py +0 -0
  33. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/.create_table_from_csv.py +0 -0
  34. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/__init__.py +0 -0
  35. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/_archive/__init__.py +0 -0
  36. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/_archive/_base.py +0 -0
  37. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/_archive/_basemorph.py +0 -0
  38. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/_archive/cleaner.py +0 -0
  39. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/_archive/morph.py +0 -0
  40. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/_archive/scraper.py +0 -0
  41. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/_archive/shortcuts.py +0 -0
  42. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/_archive/transcriber.py +0 -0
  43. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/_exceptions.py +0 -0
  44. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/_logging.py +0 -0
  45. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/games.py +0 -0
  46. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/skeleton.py +0 -0
  47. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/static/binding-blade/cleaned_stats.db +0 -0
  48. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/static/blazing-sword/cleaned_stats.db +0 -0
  49. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/static/genealogy-of-the-holy-war/cleaned_stats.db +0 -0
  50. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/static/path-of-radiance/cleaned_stats.db +0 -0
  51. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/static/the-sacred-stones/cleaned_stats.db +0 -0
  52. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/static/thracia-776/cleaned_stats.db +0 -0
  53. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir/stats.py +0 -0
  54. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir.egg-info/SOURCES.txt +0 -0
  55. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir.egg-info/dependency_links.txt +0 -0
  56. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir.egg-info/not-zip-safe +0 -0
  57. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir.egg-info/requires.txt +0 -0
  58. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir.egg-info/scm_file_list.json +0 -0
  59. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/src/aenir.egg-info/top_level.txt +0 -0
  60. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/tests/conftest.py +0 -0
  61. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/tests/test_games.py +0 -0
  62. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/tests/test_skeleton.py +0 -0
  63. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/tests/test_stats.py +0 -0
  64. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/tests/weapon.py +0 -0
  65. {aenir-0.0.post1.dev1377 → aenir-0.0.post1.dev1379}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aenir
3
- Version: 0.0.post1.dev1377
3
+ Version: 0.0.post1.dev1379
4
4
  Summary: Stat calculator for Fire Emblem
5
5
  Home-page: https://github.com/gchang12/aenir/
6
6
  Author: gchang12
@@ -403,10 +403,13 @@ class Morph(BaseMorph):
403
403
  self._set_min_promo_level()
404
404
  if self.current_lv < self.min_promo_level:
405
405
  # Wishful: Tell user what morph should promote to
406
+ #print(query_kwargs)
407
+ resultset = self.query_db(**query_kwargs).fetchall()
406
408
  raise PromotionError(
407
409
  f"{self.name} must be at least level {self.min_promo_level} to promote. Current level: {self.current_lv}.",
408
410
  reason=PromotionError.Reason.LEVEL_TOO_LOW,
409
411
  min_promo_level=self.min_promo_level,
412
+ promotion_list=[result["Promotion"] for result in resultset],
410
413
  )
411
414
  # get promotion data
412
415
  resultset = self.query_db(**query_kwargs).fetchall()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aenir
3
- Version: 0.0.post1.dev1377
3
+ Version: 0.0.post1.dev1379
4
4
  Summary: Stat calculator for Fire Emblem
5
5
  Home-page: https://github.com/gchang12/aenir/
6
6
  Author: gchang12
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.0",
3
+ "distance": 1379,
4
+ "node": "g846db4a027de7862c1d961ce4b63ec93f7703397",
5
+ "dirty": false,
6
+ "branch": "main",
7
+ "node_date": "2026-09-22"
8
+ }
@@ -1107,6 +1107,8 @@ class FE6RutgerProtoMorph(unittest.TestCase):
1107
1107
  actual = err.min_promo_level
1108
1108
  expected = rutger.min_promo_level
1109
1109
  self.assertEqual(actual, expected)
1110
+ actual = err.promotion_list
1111
+ expected = ["Swordmaster (M)"]
1110
1112
  self.assertListEqual(
1111
1113
  rutger.history,
1112
1114
  [],
@@ -4784,6 +4786,27 @@ class FE8Ross(Morph8TestCase):
4784
4786
  name = "Ross"
4785
4787
  self._test_get_promotion_list__trainee(name)
4786
4788
 
4789
+ def test_promote__level_too_low(self):
4790
+ """
4791
+ What happens when it's not time to promote your unit.
4792
+ """
4793
+ rutger = get_morph(8, "Ross")
4794
+ with self.assertRaises(PromotionError) as exc_ctx:
4795
+ rutger.promote()
4796
+ err = exc_ctx.exception
4797
+ actual = err.reason
4798
+ expected = PromotionError.Reason.LEVEL_TOO_LOW
4799
+ self.assertEqual(actual, expected)
4800
+ actual = err.min_promo_level
4801
+ expected = rutger.min_promo_level
4802
+ self.assertEqual(actual, expected)
4803
+ actual = err.promotion_list
4804
+ expected = ["Fighter", "Pirate", "Journeyman (M)"]
4805
+ self.assertListEqual(
4806
+ rutger.history,
4807
+ [],
4808
+ )
4809
+
4787
4810
  def test_ross(self):
4788
4811
  """
4789
4812
  Runs Ross through a series of level-ups and promotions.
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "0.0",
3
- "distance": 1377,
4
- "node": "g680fd2101e3b019567d9ac654bd0abb1cbb8eda2",
5
- "dirty": false,
6
- "branch": "main",
7
- "node_date": "2026-09-20"
8
- }