Fix serializer index errors issue #1313 - #1314

Closed
joereg4 wants to merge 8 commits into
PokeAPI:masterfrom
joereg4:fix-serializer-index-errors
Closed

Fix serializer index errors issue #1313 #1314
joereg4 wants to merge 8 commits into
PokeAPI:masterfrom
joereg4:fix-serializer-index-errors

Conversation

@joereg4

Copy link
Copy Markdown
Contributor

Issue 1: IndexError in test_location_area_api

#1313

Problem

The test_location_area_api test was failing with an IndexError: list index out of range error in the get_encounters method of LocationAreaDetailSerializer.

Root Cause

The serializer was trying to access version data using array indexing (version_data[ver["version"] - 1]), but the version_data array was not ordered by ID. The code assumed that version IDs were sequential and that array index i corresponded to version ID i+1, but this wasn't guaranteed.

Error Details

File "/code/pokemon_v2/serializers.py", line 1221, in get_encounters
version_detail["version"] = version_data[ver["version"] - 1]
IndexError: list index out of range

Solution

  • Modified get_encounters method to order Version objects by ID
  • Created a mapping dictionary from version ID to serialized data
  • Changed array access to use the mapping: version_data_map[ver["version"]]

Code Changes

# Beforeversion_objects=Version.objects.all()
version_data=VersionSummarySerializer(version_objects, many=True, context=self.context).dataversion_detail["version"] =version_data[ver["version"] -1]
# After version_objects=Version.objects.all().order_by('id')
version_data=VersionSummarySerializer(version_objects, many=True, context=self.context).dataversion_data_map= {version_objects[i].id: version_data[i] foriinrange(len(version_objects))}
version_detail["version"] =version_data_map[ver["version"]]

Issue 2: IndexError in test_pokemon_api

Problem

The test_pokemon_api test was failing with an IndexError: list index out of range error in the get_pokemon_moves method of PokemonDetailSerializer.

Root Cause

Similar to Issue 1, the serializer was trying to access version group and method data using array indexing (version_data[move["version_group"] - 1] and method_data[move["move_learn_method"] - 1]), but the arrays were not ordered by ID.

Error Details

File "/code/pokemon_v2/serializers.py", line 4745, in get_pokemon_moves
version_detail["version_group"] = version_data[move["version_group"] - 1]
IndexError: list index out of range

Solution

  • Modified get_pokemon_moves method to order VersionGroup and MoveLearnMethod objects by ID
  • Created mapping dictionaries from ID to serialized data for both version groups and methods
  • Changed array access to use the mappings

Code Changes

# Beforeversion_objects=VersionGroup.objects.all()
version_data=VersionGroupSummarySerializer(version_objects, many=True, context=self.context).datamethod_objects=MoveLearnMethod.objects.all()
method_data=MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).dataversion_detail["version_group"] =version_data[move["version_group"] -1]
version_detail["move_learn_method"] =method_data[move["move_learn_method"] -1]
# Afterversion_objects=VersionGroup.objects.all().order_by('id')
version_data=VersionGroupSummarySerializer(version_objects, many=True, context=self.context).dataversion_data_map= {version_objects[i].id: version_data[i] foriinrange(len(version_objects))}
method_objects=MoveLearnMethod.objects.all().order_by('id')
method_data=MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).datamethod_data_map= {method_objects[i].id: method_data[i] foriinrange(len(method_objects))}
version_detail["version_group"] =version_data_map[move["version_group"]]
version_detail["move_learn_method"] =method_data_map[move["move_learn_method"]]

Impact

These fixes resolve two critical test failures that were preventing the test suite from passing. The changes ensure that:

  1. Version data is properly mapped by ID rather than relying on array position
  2. Version group and method data are properly mapped by ID
  3. The serializers work correctly regardless of database query ordering
  4. All 51 tests now pass successfully

Files Modified

  • pokemon_v2/serializers.py - Fixed array indexing issues in get_encounters and get_pokemon_moves methods

joereg4and others added 4 commits October 2, 2025 19:11
Fix: Removed regional restrictions so Rattata can evolve into Raticate in any region
- Updated `LocationAreaDetailSerializer` and `PokemonDetailSerializer` to order version and method objects by ID.
- Created mappings from version and method IDs to their serialized data for improved clarity and efficiency in data access.
@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim This is simply to fix the issue with two tests and think it should go before the PR for the evolution chain metadata addition of locked regions.

@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim I'm sure you are busy, are there other maintainers?

@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim, this PR is now ready for merge. I have fast-forwarded the branch with the latest master changes, and all tests are passing.

The two broken tests that were originally failing have been resolved. The changes are minimal and focused specifically on the serializer index error fixes.

Could you please review and merge when convenient?

Comment threadpokemon_v2/serializers.py
@Naramsim

Copy link
Copy Markdown
Member

Hi! I don't have the time to dig into the Python code at the moment. @phalt, be sure to thoroughly review to these AI-generated PR, in the past @joereg4 opened some other AI-PRs and although they were very convincing we found out they had basic errors in them.

@joereg4

Copy link
Copy Markdown
ContributorAuthor

Yes, @Naramsim there were issues with the regional pokemon evolutions, but that was my lack of understanding the build process and the limitations where regional variants aren't included in the evolution chain because they are not their own species. Those errors are on me.

joereg4and others added 3 commits October 21, 2025 07:16
…ion IDs
- Implemented `test_location_area_api_with_non_sequential_version_ids` to ensure the location area API handles non-sequential version IDs correctly, addressing the IndexError from issue #1313.
- Added `test_pokemon_api_with_non_sequential_ids` to verify the pokemon API functions properly with non-sequential version group and method IDs, also related to issue #1313.
@joereg4

Copy link
Copy Markdown
ContributorAuthor

Closing due to a lack of interest

@joereg4joereg4 closed this Oct 26, 2025
Naramsim added a commit that referenced this pull request Jul 18, 2026
Same issue as #1567 / PR #1603 (previously fixed in
get_pokemon_moves): LocationAreaDetailSerializer.get_encounters looked
up Version summaries by list position (id - 1), assuming ids form a
contiguous 1-indexed sequence. Any gap in the Version table (e.g. a
deleted row) causes the wrong version to be returned, or an
IndexError.
This is the same root cause reported in #1313 and previously
attempted in PR #1314 (closed, unmerged).
Co-authored-by: Alessandro Pezzè <igougi.ui@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@joereg4@Naramsim@phalt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Fix serializer index errors issue #1313 - #1314

Closed
joereg4 wants to merge 8 commits into
PokeAPI:masterfrom
joereg4:fix-serializer-index-errors
Closed

Fix serializer index errors issue #1313 #1314
joereg4 wants to merge 8 commits into
PokeAPI:masterfrom
joereg4:fix-serializer-index-errors

Conversation

@joereg4

Copy link
Copy Markdown
Contributor

Issue 1: IndexError in test_location_area_api

#1313

Problem

The test_location_area_api test was failing with an IndexError: list index out of range error in the get_encounters method of LocationAreaDetailSerializer.

Root Cause

The serializer was trying to access version data using array indexing (version_data[ver["version"] - 1]), but the version_data array was not ordered by ID. The code assumed that version IDs were sequential and that array index i corresponded to version ID i+1, but this wasn't guaranteed.

Error Details

File "/code/pokemon_v2/serializers.py", line 1221, in get_encounters
version_detail["version"] = version_data[ver["version"] - 1]
IndexError: list index out of range

Solution

  • Modified get_encounters method to order Version objects by ID
  • Created a mapping dictionary from version ID to serialized data
  • Changed array access to use the mapping: version_data_map[ver["version"]]

Code Changes

# Beforeversion_objects=Version.objects.all()
version_data=VersionSummarySerializer(version_objects, many=True, context=self.context).dataversion_detail["version"] =version_data[ver["version"] -1]
# After version_objects=Version.objects.all().order_by('id')
version_data=VersionSummarySerializer(version_objects, many=True, context=self.context).dataversion_data_map= {version_objects[i].id: version_data[i] foriinrange(len(version_objects))}
version_detail["version"] =version_data_map[ver["version"]]

Issue 2: IndexError in test_pokemon_api

Problem

The test_pokemon_api test was failing with an IndexError: list index out of range error in the get_pokemon_moves method of PokemonDetailSerializer.

Root Cause

Similar to Issue 1, the serializer was trying to access version group and method data using array indexing (version_data[move["version_group"] - 1] and method_data[move["move_learn_method"] - 1]), but the arrays were not ordered by ID.

Error Details

File "/code/pokemon_v2/serializers.py", line 4745, in get_pokemon_moves
version_detail["version_group"] = version_data[move["version_group"] - 1]
IndexError: list index out of range

Solution

  • Modified get_pokemon_moves method to order VersionGroup and MoveLearnMethod objects by ID
  • Created mapping dictionaries from ID to serialized data for both version groups and methods
  • Changed array access to use the mappings

Code Changes

# Beforeversion_objects=VersionGroup.objects.all()
version_data=VersionGroupSummarySerializer(version_objects, many=True, context=self.context).datamethod_objects=MoveLearnMethod.objects.all()
method_data=MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).dataversion_detail["version_group"] =version_data[move["version_group"] -1]
version_detail["move_learn_method"] =method_data[move["move_learn_method"] -1]
# Afterversion_objects=VersionGroup.objects.all().order_by('id')
version_data=VersionGroupSummarySerializer(version_objects, many=True, context=self.context).dataversion_data_map= {version_objects[i].id: version_data[i] foriinrange(len(version_objects))}
method_objects=MoveLearnMethod.objects.all().order_by('id')
method_data=MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).datamethod_data_map= {method_objects[i].id: method_data[i] foriinrange(len(method_objects))}
version_detail["version_group"] =version_data_map[move["version_group"]]
version_detail["move_learn_method"] =method_data_map[move["move_learn_method"]]

Impact

These fixes resolve two critical test failures that were preventing the test suite from passing. The changes ensure that:

  1. Version data is properly mapped by ID rather than relying on array position
  2. Version group and method data are properly mapped by ID
  3. The serializers work correctly regardless of database query ordering
  4. All 51 tests now pass successfully

Files Modified

  • pokemon_v2/serializers.py - Fixed array indexing issues in get_encounters and get_pokemon_moves methods

joereg4and others added 4 commits October 2, 2025 19:11
Fix: Removed regional restrictions so Rattata can evolve into Raticate in any region
- Updated `LocationAreaDetailSerializer` and `PokemonDetailSerializer` to order version and method objects by ID.
- Created mappings from version and method IDs to their serialized data for improved clarity and efficiency in data access.
@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim This is simply to fix the issue with two tests and think it should go before the PR for the evolution chain metadata addition of locked regions.

@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim I'm sure you are busy, are there other maintainers?

@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim, this PR is now ready for merge. I have fast-forwarded the branch with the latest master changes, and all tests are passing.

The two broken tests that were originally failing have been resolved. The changes are minimal and focused specifically on the serializer index error fixes.

Could you please review and merge when convenient?

Comment threadpokemon_v2/serializers.py
@Naramsim

Copy link
Copy Markdown
Member

Hi! I don't have the time to dig into the Python code at the moment. @phalt, be sure to thoroughly review to these AI-generated PR, in the past @joereg4 opened some other AI-PRs and although they were very convincing we found out they had basic errors in them.

@joereg4

Copy link
Copy Markdown
ContributorAuthor

Yes, @Naramsim there were issues with the regional pokemon evolutions, but that was my lack of understanding the build process and the limitations where regional variants aren't included in the evolution chain because they are not their own species. Those errors are on me.

joereg4and others added 3 commits October 21, 2025 07:16
…ion IDs
- Implemented `test_location_area_api_with_non_sequential_version_ids` to ensure the location area API handles non-sequential version IDs correctly, addressing the IndexError from issue #1313.
- Added `test_pokemon_api_with_non_sequential_ids` to verify the pokemon API functions properly with non-sequential version group and method IDs, also related to issue #1313.
@joereg4

Copy link
Copy Markdown
ContributorAuthor

Closing due to a lack of interest

@joereg4joereg4 closed this Oct 26, 2025
Naramsim added a commit that referenced this pull request Jul 18, 2026
Same issue as #1567 / PR #1603 (previously fixed in
get_pokemon_moves): LocationAreaDetailSerializer.get_encounters looked
up Version summaries by list position (id - 1), assuming ids form a
contiguous 1-indexed sequence. Any gap in the Version table (e.g. a
deleted row) causes the wrong version to be returned, or an
IndexError.
This is the same root cause reported in #1313 and previously
attempted in PR #1314 (closed, unmerged).
Co-authored-by: Alessandro Pezzè <igougi.ui@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@joereg4@Naramsim@phalt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix serializer index errors issue #1313 - #1314

Closed
joereg4 wants to merge 8 commits into
PokeAPI:masterfrom
joereg4:fix-serializer-index-errors
Closed

Fix serializer index errors issue #1313 #1314
joereg4 wants to merge 8 commits into
PokeAPI:masterfrom
joereg4:fix-serializer-index-errors

Conversation

@joereg4

Copy link
Copy Markdown
Contributor

Issue 1: IndexError in test_location_area_api

#1313

Problem

The test_location_area_api test was failing with an IndexError: list index out of range error in the get_encounters method of LocationAreaDetailSerializer.

Root Cause

The serializer was trying to access version data using array indexing (version_data[ver["version"] - 1]), but the version_data array was not ordered by ID. The code assumed that version IDs were sequential and that array index i corresponded to version ID i+1, but this wasn't guaranteed.

Error Details

File "/code/pokemon_v2/serializers.py", line 1221, in get_encounters
version_detail["version"] = version_data[ver["version"] - 1]
IndexError: list index out of range

Solution

  • Modified get_encounters method to order Version objects by ID
  • Created a mapping dictionary from version ID to serialized data
  • Changed array access to use the mapping: version_data_map[ver["version"]]

Code Changes

# Beforeversion_objects=Version.objects.all()
version_data=VersionSummarySerializer(version_objects, many=True, context=self.context).dataversion_detail["version"] =version_data[ver["version"] -1]
# After version_objects=Version.objects.all().order_by('id')
version_data=VersionSummarySerializer(version_objects, many=True, context=self.context).dataversion_data_map= {version_objects[i].id: version_data[i] foriinrange(len(version_objects))}
version_detail["version"] =version_data_map[ver["version"]]

Issue 2: IndexError in test_pokemon_api

Problem

The test_pokemon_api test was failing with an IndexError: list index out of range error in the get_pokemon_moves method of PokemonDetailSerializer.

Root Cause

Similar to Issue 1, the serializer was trying to access version group and method data using array indexing (version_data[move["version_group"] - 1] and method_data[move["move_learn_method"] - 1]), but the arrays were not ordered by ID.

Error Details

File "/code/pokemon_v2/serializers.py", line 4745, in get_pokemon_moves
version_detail["version_group"] = version_data[move["version_group"] - 1]
IndexError: list index out of range

Solution

  • Modified get_pokemon_moves method to order VersionGroup and MoveLearnMethod objects by ID
  • Created mapping dictionaries from ID to serialized data for both version groups and methods
  • Changed array access to use the mappings

Code Changes

# Beforeversion_objects=VersionGroup.objects.all()
version_data=VersionGroupSummarySerializer(version_objects, many=True, context=self.context).datamethod_objects=MoveLearnMethod.objects.all()
method_data=MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).dataversion_detail["version_group"] =version_data[move["version_group"] -1]
version_detail["move_learn_method"] =method_data[move["move_learn_method"] -1]
# Afterversion_objects=VersionGroup.objects.all().order_by('id')
version_data=VersionGroupSummarySerializer(version_objects, many=True, context=self.context).dataversion_data_map= {version_objects[i].id: version_data[i] foriinrange(len(version_objects))}
method_objects=MoveLearnMethod.objects.all().order_by('id')
method_data=MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).datamethod_data_map= {method_objects[i].id: method_data[i] foriinrange(len(method_objects))}
version_detail["version_group"] =version_data_map[move["version_group"]]
version_detail["move_learn_method"] =method_data_map[move["move_learn_method"]]

Impact

These fixes resolve two critical test failures that were preventing the test suite from passing. The changes ensure that:

  1. Version data is properly mapped by ID rather than relying on array position
  2. Version group and method data are properly mapped by ID
  3. The serializers work correctly regardless of database query ordering
  4. All 51 tests now pass successfully

Files Modified

  • pokemon_v2/serializers.py - Fixed array indexing issues in get_encounters and get_pokemon_moves methods

joereg4and others added 4 commits October 2, 2025 19:11
Fix: Removed regional restrictions so Rattata can evolve into Raticate in any region
- Updated `LocationAreaDetailSerializer` and `PokemonDetailSerializer` to order version and method objects by ID.
- Created mappings from version and method IDs to their serialized data for improved clarity and efficiency in data access.
@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim This is simply to fix the issue with two tests and think it should go before the PR for the evolution chain metadata addition of locked regions.

@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim I'm sure you are busy, are there other maintainers?

@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim, this PR is now ready for merge. I have fast-forwarded the branch with the latest master changes, and all tests are passing.

The two broken tests that were originally failing have been resolved. The changes are minimal and focused specifically on the serializer index error fixes.

Could you please review and merge when convenient?

Comment threadpokemon_v2/serializers.py
@Naramsim

Copy link
Copy Markdown
Member

Hi! I don't have the time to dig into the Python code at the moment. @phalt, be sure to thoroughly review to these AI-generated PR, in the past @joereg4 opened some other AI-PRs and although they were very convincing we found out they had basic errors in them.

@joereg4

Copy link
Copy Markdown
ContributorAuthor

Yes, @Naramsim there were issues with the regional pokemon evolutions, but that was my lack of understanding the build process and the limitations where regional variants aren't included in the evolution chain because they are not their own species. Those errors are on me.

joereg4and others added 3 commits October 21, 2025 07:16
…ion IDs
- Implemented `test_location_area_api_with_non_sequential_version_ids` to ensure the location area API handles non-sequential version IDs correctly, addressing the IndexError from issue #1313.
- Added `test_pokemon_api_with_non_sequential_ids` to verify the pokemon API functions properly with non-sequential version group and method IDs, also related to issue #1313.
@joereg4

Copy link
Copy Markdown
ContributorAuthor

Closing due to a lack of interest

@joereg4joereg4 closed this Oct 26, 2025
Naramsim added a commit that referenced this pull request Jul 18, 2026
Same issue as #1567 / PR #1603 (previously fixed in
get_pokemon_moves): LocationAreaDetailSerializer.get_encounters looked
up Version summaries by list position (id - 1), assuming ids form a
contiguous 1-indexed sequence. Any gap in the Version table (e.g. a
deleted row) causes the wrong version to be returned, or an
IndexError.
This is the same root cause reported in #1313 and previously
attempted in PR #1314 (closed, unmerged).
Co-authored-by: Alessandro Pezzè <igougi.ui@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@joereg4@Naramsim@phalt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix serializer index errors issue #1313 - #1314

Closed
joereg4 wants to merge 8 commits into
PokeAPI:masterfrom
joereg4:fix-serializer-index-errors
Closed

Fix serializer index errors issue #1313 #1314
joereg4 wants to merge 8 commits into
PokeAPI:masterfrom
joereg4:fix-serializer-index-errors

Conversation

@joereg4

Copy link
Copy Markdown
Contributor

Issue 1: IndexError in test_location_area_api

#1313

Problem

The test_location_area_api test was failing with an IndexError: list index out of range error in the get_encounters method of LocationAreaDetailSerializer.

Root Cause

The serializer was trying to access version data using array indexing (version_data[ver["version"] - 1]), but the version_data array was not ordered by ID. The code assumed that version IDs were sequential and that array index i corresponded to version ID i+1, but this wasn't guaranteed.

Error Details

File "/code/pokemon_v2/serializers.py", line 1221, in get_encounters
version_detail["version"] = version_data[ver["version"] - 1]
IndexError: list index out of range

Solution

  • Modified get_encounters method to order Version objects by ID
  • Created a mapping dictionary from version ID to serialized data
  • Changed array access to use the mapping: version_data_map[ver["version"]]

Code Changes

# Beforeversion_objects=Version.objects.all()
version_data=VersionSummarySerializer(version_objects, many=True, context=self.context).dataversion_detail["version"] =version_data[ver["version"] -1]
# After version_objects=Version.objects.all().order_by('id')
version_data=VersionSummarySerializer(version_objects, many=True, context=self.context).dataversion_data_map= {version_objects[i].id: version_data[i] foriinrange(len(version_objects))}
version_detail["version"] =version_data_map[ver["version"]]

Issue 2: IndexError in test_pokemon_api

Problem

The test_pokemon_api test was failing with an IndexError: list index out of range error in the get_pokemon_moves method of PokemonDetailSerializer.

Root Cause

Similar to Issue 1, the serializer was trying to access version group and method data using array indexing (version_data[move["version_group"] - 1] and method_data[move["move_learn_method"] - 1]), but the arrays were not ordered by ID.

Error Details

File "/code/pokemon_v2/serializers.py", line 4745, in get_pokemon_moves
version_detail["version_group"] = version_data[move["version_group"] - 1]
IndexError: list index out of range

Solution

  • Modified get_pokemon_moves method to order VersionGroup and MoveLearnMethod objects by ID
  • Created mapping dictionaries from ID to serialized data for both version groups and methods
  • Changed array access to use the mappings

Code Changes

# Beforeversion_objects=VersionGroup.objects.all()
version_data=VersionGroupSummarySerializer(version_objects, many=True, context=self.context).datamethod_objects=MoveLearnMethod.objects.all()
method_data=MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).dataversion_detail["version_group"] =version_data[move["version_group"] -1]
version_detail["move_learn_method"] =method_data[move["move_learn_method"] -1]
# Afterversion_objects=VersionGroup.objects.all().order_by('id')
version_data=VersionGroupSummarySerializer(version_objects, many=True, context=self.context).dataversion_data_map= {version_objects[i].id: version_data[i] foriinrange(len(version_objects))}
method_objects=MoveLearnMethod.objects.all().order_by('id')
method_data=MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).datamethod_data_map= {method_objects[i].id: method_data[i] foriinrange(len(method_objects))}
version_detail["version_group"] =version_data_map[move["version_group"]]
version_detail["move_learn_method"] =method_data_map[move["move_learn_method"]]

Impact

These fixes resolve two critical test failures that were preventing the test suite from passing. The changes ensure that:

  1. Version data is properly mapped by ID rather than relying on array position
  2. Version group and method data are properly mapped by ID
  3. The serializers work correctly regardless of database query ordering
  4. All 51 tests now pass successfully

Files Modified

  • pokemon_v2/serializers.py - Fixed array indexing issues in get_encounters and get_pokemon_moves methods

joereg4and others added 4 commits October 2, 2025 19:11
Fix: Removed regional restrictions so Rattata can evolve into Raticate in any region
- Updated `LocationAreaDetailSerializer` and `PokemonDetailSerializer` to order version and method objects by ID.
- Created mappings from version and method IDs to their serialized data for improved clarity and efficiency in data access.
@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim This is simply to fix the issue with two tests and think it should go before the PR for the evolution chain metadata addition of locked regions.

@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim I'm sure you are busy, are there other maintainers?

@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim, this PR is now ready for merge. I have fast-forwarded the branch with the latest master changes, and all tests are passing.

The two broken tests that were originally failing have been resolved. The changes are minimal and focused specifically on the serializer index error fixes.

Could you please review and merge when convenient?

Comment threadpokemon_v2/serializers.py
@Naramsim

Copy link
Copy Markdown
Member

Hi! I don't have the time to dig into the Python code at the moment. @phalt, be sure to thoroughly review to these AI-generated PR, in the past @joereg4 opened some other AI-PRs and although they were very convincing we found out they had basic errors in them.

@joereg4

Copy link
Copy Markdown
ContributorAuthor

Yes, @Naramsim there were issues with the regional pokemon evolutions, but that was my lack of understanding the build process and the limitations where regional variants aren't included in the evolution chain because they are not their own species. Those errors are on me.

joereg4and others added 3 commits October 21, 2025 07:16
…ion IDs
- Implemented `test_location_area_api_with_non_sequential_version_ids` to ensure the location area API handles non-sequential version IDs correctly, addressing the IndexError from issue #1313.
- Added `test_pokemon_api_with_non_sequential_ids` to verify the pokemon API functions properly with non-sequential version group and method IDs, also related to issue #1313.
@joereg4

Copy link
Copy Markdown
ContributorAuthor

Closing due to a lack of interest

@joereg4joereg4 closed this Oct 26, 2025
Naramsim added a commit that referenced this pull request Jul 18, 2026
Same issue as #1567 / PR #1603 (previously fixed in
get_pokemon_moves): LocationAreaDetailSerializer.get_encounters looked
up Version summaries by list position (id - 1), assuming ids form a
contiguous 1-indexed sequence. Any gap in the Version table (e.g. a
deleted row) causes the wrong version to be returned, or an
IndexError.
This is the same root cause reported in #1313 and previously
attempted in PR #1314 (closed, unmerged).
Co-authored-by: Alessandro Pezzè <igougi.ui@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@joereg4@Naramsim@phalt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Fix serializer index errors issue #1313 - #1314

Closed
joereg4 wants to merge 8 commits into
PokeAPI:masterfrom
joereg4:fix-serializer-index-errors
Closed

Fix serializer index errors issue #1313 #1314
joereg4 wants to merge 8 commits into
PokeAPI:masterfrom
joereg4:fix-serializer-index-errors

Conversation

@joereg4

Copy link
Copy Markdown
Contributor

Issue 1: IndexError in test_location_area_api

#1313

Problem

The test_location_area_api test was failing with an IndexError: list index out of range error in the get_encounters method of LocationAreaDetailSerializer.

Root Cause

The serializer was trying to access version data using array indexing (version_data[ver["version"] - 1]), but the version_data array was not ordered by ID. The code assumed that version IDs were sequential and that array index i corresponded to version ID i+1, but this wasn't guaranteed.

Error Details

File "/code/pokemon_v2/serializers.py", line 1221, in get_encounters
version_detail["version"] = version_data[ver["version"] - 1]
IndexError: list index out of range

Solution

  • Modified get_encounters method to order Version objects by ID
  • Created a mapping dictionary from version ID to serialized data
  • Changed array access to use the mapping: version_data_map[ver["version"]]

Code Changes

# Beforeversion_objects=Version.objects.all()
version_data=VersionSummarySerializer(version_objects, many=True, context=self.context).dataversion_detail["version"] =version_data[ver["version"] -1]
# After version_objects=Version.objects.all().order_by('id')
version_data=VersionSummarySerializer(version_objects, many=True, context=self.context).dataversion_data_map= {version_objects[i].id: version_data[i] foriinrange(len(version_objects))}
version_detail["version"] =version_data_map[ver["version"]]

Issue 2: IndexError in test_pokemon_api

Problem

The test_pokemon_api test was failing with an IndexError: list index out of range error in the get_pokemon_moves method of PokemonDetailSerializer.

Root Cause

Similar to Issue 1, the serializer was trying to access version group and method data using array indexing (version_data[move["version_group"] - 1] and method_data[move["move_learn_method"] - 1]), but the arrays were not ordered by ID.

Error Details

File "/code/pokemon_v2/serializers.py", line 4745, in get_pokemon_moves
version_detail["version_group"] = version_data[move["version_group"] - 1]
IndexError: list index out of range

Solution

  • Modified get_pokemon_moves method to order VersionGroup and MoveLearnMethod objects by ID
  • Created mapping dictionaries from ID to serialized data for both version groups and methods
  • Changed array access to use the mappings

Code Changes

# Beforeversion_objects=VersionGroup.objects.all()
version_data=VersionGroupSummarySerializer(version_objects, many=True, context=self.context).datamethod_objects=MoveLearnMethod.objects.all()
method_data=MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).dataversion_detail["version_group"] =version_data[move["version_group"] -1]
version_detail["move_learn_method"] =method_data[move["move_learn_method"] -1]
# Afterversion_objects=VersionGroup.objects.all().order_by('id')
version_data=VersionGroupSummarySerializer(version_objects, many=True, context=self.context).dataversion_data_map= {version_objects[i].id: version_data[i] foriinrange(len(version_objects))}
method_objects=MoveLearnMethod.objects.all().order_by('id')
method_data=MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).datamethod_data_map= {method_objects[i].id: method_data[i] foriinrange(len(method_objects))}
version_detail["version_group"] =version_data_map[move["version_group"]]
version_detail["move_learn_method"] =method_data_map[move["move_learn_method"]]

Impact

These fixes resolve two critical test failures that were preventing the test suite from passing. The changes ensure that:

  1. Version data is properly mapped by ID rather than relying on array position
  2. Version group and method data are properly mapped by ID
  3. The serializers work correctly regardless of database query ordering
  4. All 51 tests now pass successfully

Files Modified

  • pokemon_v2/serializers.py - Fixed array indexing issues in get_encounters and get_pokemon_moves methods

joereg4and others added 4 commits October 2, 2025 19:11
Fix: Removed regional restrictions so Rattata can evolve into Raticate in any region
- Updated `LocationAreaDetailSerializer` and `PokemonDetailSerializer` to order version and method objects by ID.
- Created mappings from version and method IDs to their serialized data for improved clarity and efficiency in data access.
@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim This is simply to fix the issue with two tests and think it should go before the PR for the evolution chain metadata addition of locked regions.

@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim I'm sure you are busy, are there other maintainers?

@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim, this PR is now ready for merge. I have fast-forwarded the branch with the latest master changes, and all tests are passing.

The two broken tests that were originally failing have been resolved. The changes are minimal and focused specifically on the serializer index error fixes.

Could you please review and merge when convenient?

Comment threadpokemon_v2/serializers.py
@Naramsim

Copy link
Copy Markdown
Member

Hi! I don't have the time to dig into the Python code at the moment. @phalt, be sure to thoroughly review to these AI-generated PR, in the past @joereg4 opened some other AI-PRs and although they were very convincing we found out they had basic errors in them.

@joereg4

Copy link
Copy Markdown
ContributorAuthor

Yes, @Naramsim there were issues with the regional pokemon evolutions, but that was my lack of understanding the build process and the limitations where regional variants aren't included in the evolution chain because they are not their own species. Those errors are on me.

joereg4and others added 3 commits October 21, 2025 07:16
…ion IDs
- Implemented `test_location_area_api_with_non_sequential_version_ids` to ensure the location area API handles non-sequential version IDs correctly, addressing the IndexError from issue #1313.
- Added `test_pokemon_api_with_non_sequential_ids` to verify the pokemon API functions properly with non-sequential version group and method IDs, also related to issue #1313.
@joereg4

Copy link
Copy Markdown
ContributorAuthor

Closing due to a lack of interest

@joereg4joereg4 closed this Oct 26, 2025
Naramsim added a commit that referenced this pull request Jul 18, 2026
Same issue as #1567 / PR #1603 (previously fixed in
get_pokemon_moves): LocationAreaDetailSerializer.get_encounters looked
up Version summaries by list position (id - 1), assuming ids form a
contiguous 1-indexed sequence. Any gap in the Version table (e.g. a
deleted row) causes the wrong version to be returned, or an
IndexError.
This is the same root cause reported in #1313 and previously
attempted in PR #1314 (closed, unmerged).
Co-authored-by: Alessandro Pezzè <igougi.ui@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@joereg4@Naramsim@phalt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix serializer index errors issue #1313 - #1314

Closed
joereg4 wants to merge 8 commits into
PokeAPI:masterfrom
joereg4:fix-serializer-index-errors
Closed

Fix serializer index errors issue #1313 #1314
joereg4 wants to merge 8 commits into
PokeAPI:masterfrom
joereg4:fix-serializer-index-errors

Conversation

@joereg4

Copy link
Copy Markdown
Contributor

Issue 1: IndexError in test_location_area_api

#1313

Problem

The test_location_area_api test was failing with an IndexError: list index out of range error in the get_encounters method of LocationAreaDetailSerializer.

Root Cause

The serializer was trying to access version data using array indexing (version_data[ver["version"] - 1]), but the version_data array was not ordered by ID. The code assumed that version IDs were sequential and that array index i corresponded to version ID i+1, but this wasn't guaranteed.

Error Details

File "/code/pokemon_v2/serializers.py", line 1221, in get_encounters
version_detail["version"] = version_data[ver["version"] - 1]
IndexError: list index out of range

Solution

  • Modified get_encounters method to order Version objects by ID
  • Created a mapping dictionary from version ID to serialized data
  • Changed array access to use the mapping: version_data_map[ver["version"]]

Code Changes

# Beforeversion_objects=Version.objects.all()
version_data=VersionSummarySerializer(version_objects, many=True, context=self.context).dataversion_detail["version"] =version_data[ver["version"] -1]
# After version_objects=Version.objects.all().order_by('id')
version_data=VersionSummarySerializer(version_objects, many=True, context=self.context).dataversion_data_map= {version_objects[i].id: version_data[i] foriinrange(len(version_objects))}
version_detail["version"] =version_data_map[ver["version"]]

Issue 2: IndexError in test_pokemon_api

Problem

The test_pokemon_api test was failing with an IndexError: list index out of range error in the get_pokemon_moves method of PokemonDetailSerializer.

Root Cause

Similar to Issue 1, the serializer was trying to access version group and method data using array indexing (version_data[move["version_group"] - 1] and method_data[move["move_learn_method"] - 1]), but the arrays were not ordered by ID.

Error Details

File "/code/pokemon_v2/serializers.py", line 4745, in get_pokemon_moves
version_detail["version_group"] = version_data[move["version_group"] - 1]
IndexError: list index out of range

Solution

  • Modified get_pokemon_moves method to order VersionGroup and MoveLearnMethod objects by ID
  • Created mapping dictionaries from ID to serialized data for both version groups and methods
  • Changed array access to use the mappings

Code Changes

# Beforeversion_objects=VersionGroup.objects.all()
version_data=VersionGroupSummarySerializer(version_objects, many=True, context=self.context).datamethod_objects=MoveLearnMethod.objects.all()
method_data=MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).dataversion_detail["version_group"] =version_data[move["version_group"] -1]
version_detail["move_learn_method"] =method_data[move["move_learn_method"] -1]
# Afterversion_objects=VersionGroup.objects.all().order_by('id')
version_data=VersionGroupSummarySerializer(version_objects, many=True, context=self.context).dataversion_data_map= {version_objects[i].id: version_data[i] foriinrange(len(version_objects))}
method_objects=MoveLearnMethod.objects.all().order_by('id')
method_data=MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).datamethod_data_map= {method_objects[i].id: method_data[i] foriinrange(len(method_objects))}
version_detail["version_group"] =version_data_map[move["version_group"]]
version_detail["move_learn_method"] =method_data_map[move["move_learn_method"]]

Impact

These fixes resolve two critical test failures that were preventing the test suite from passing. The changes ensure that:

  1. Version data is properly mapped by ID rather than relying on array position
  2. Version group and method data are properly mapped by ID
  3. The serializers work correctly regardless of database query ordering
  4. All 51 tests now pass successfully

Files Modified

  • pokemon_v2/serializers.py - Fixed array indexing issues in get_encounters and get_pokemon_moves methods

joereg4and others added 4 commits October 2, 2025 19:11
Fix: Removed regional restrictions so Rattata can evolve into Raticate in any region
- Updated `LocationAreaDetailSerializer` and `PokemonDetailSerializer` to order version and method objects by ID.
- Created mappings from version and method IDs to their serialized data for improved clarity and efficiency in data access.
@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim This is simply to fix the issue with two tests and think it should go before the PR for the evolution chain metadata addition of locked regions.

@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim I'm sure you are busy, are there other maintainers?

@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim, this PR is now ready for merge. I have fast-forwarded the branch with the latest master changes, and all tests are passing.

The two broken tests that were originally failing have been resolved. The changes are minimal and focused specifically on the serializer index error fixes.

Could you please review and merge when convenient?

Comment threadpokemon_v2/serializers.py
@Naramsim

Copy link
Copy Markdown
Member

Hi! I don't have the time to dig into the Python code at the moment. @phalt, be sure to thoroughly review to these AI-generated PR, in the past @joereg4 opened some other AI-PRs and although they were very convincing we found out they had basic errors in them.

@joereg4

Copy link
Copy Markdown
ContributorAuthor

Yes, @Naramsim there were issues with the regional pokemon evolutions, but that was my lack of understanding the build process and the limitations where regional variants aren't included in the evolution chain because they are not their own species. Those errors are on me.

joereg4and others added 3 commits October 21, 2025 07:16
…ion IDs
- Implemented `test_location_area_api_with_non_sequential_version_ids` to ensure the location area API handles non-sequential version IDs correctly, addressing the IndexError from issue #1313.
- Added `test_pokemon_api_with_non_sequential_ids` to verify the pokemon API functions properly with non-sequential version group and method IDs, also related to issue #1313.
@joereg4

Copy link
Copy Markdown
ContributorAuthor

Closing due to a lack of interest

@joereg4joereg4 closed this Oct 26, 2025
Naramsim added a commit that referenced this pull request Jul 18, 2026
Same issue as #1567 / PR #1603 (previously fixed in
get_pokemon_moves): LocationAreaDetailSerializer.get_encounters looked
up Version summaries by list position (id - 1), assuming ids form a
contiguous 1-indexed sequence. Any gap in the Version table (e.g. a
deleted row) causes the wrong version to be returned, or an
IndexError.
This is the same root cause reported in #1313 and previously
attempted in PR #1314 (closed, unmerged).
Co-authored-by: Alessandro Pezzè <igougi.ui@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@joereg4@Naramsim@phalt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix serializer index errors issue #1313 - #1314

Closed
joereg4 wants to merge 8 commits into
PokeAPI:masterfrom
joereg4:fix-serializer-index-errors
Closed

Fix serializer index errors issue #1313 #1314
joereg4 wants to merge 8 commits into
PokeAPI:masterfrom
joereg4:fix-serializer-index-errors

Conversation

@joereg4

Copy link
Copy Markdown
Contributor

Issue 1: IndexError in test_location_area_api

#1313

Problem

The test_location_area_api test was failing with an IndexError: list index out of range error in the get_encounters method of LocationAreaDetailSerializer.

Root Cause

The serializer was trying to access version data using array indexing (version_data[ver["version"] - 1]), but the version_data array was not ordered by ID. The code assumed that version IDs were sequential and that array index i corresponded to version ID i+1, but this wasn't guaranteed.

Error Details

File "/code/pokemon_v2/serializers.py", line 1221, in get_encounters
version_detail["version"] = version_data[ver["version"] - 1]
IndexError: list index out of range

Solution

  • Modified get_encounters method to order Version objects by ID
  • Created a mapping dictionary from version ID to serialized data
  • Changed array access to use the mapping: version_data_map[ver["version"]]

Code Changes

# Beforeversion_objects=Version.objects.all()
version_data=VersionSummarySerializer(version_objects, many=True, context=self.context).dataversion_detail["version"] =version_data[ver["version"] -1]
# After version_objects=Version.objects.all().order_by('id')
version_data=VersionSummarySerializer(version_objects, many=True, context=self.context).dataversion_data_map= {version_objects[i].id: version_data[i] foriinrange(len(version_objects))}
version_detail["version"] =version_data_map[ver["version"]]

Issue 2: IndexError in test_pokemon_api

Problem

The test_pokemon_api test was failing with an IndexError: list index out of range error in the get_pokemon_moves method of PokemonDetailSerializer.

Root Cause

Similar to Issue 1, the serializer was trying to access version group and method data using array indexing (version_data[move["version_group"] - 1] and method_data[move["move_learn_method"] - 1]), but the arrays were not ordered by ID.

Error Details

File "/code/pokemon_v2/serializers.py", line 4745, in get_pokemon_moves
version_detail["version_group"] = version_data[move["version_group"] - 1]
IndexError: list index out of range

Solution

  • Modified get_pokemon_moves method to order VersionGroup and MoveLearnMethod objects by ID
  • Created mapping dictionaries from ID to serialized data for both version groups and methods
  • Changed array access to use the mappings

Code Changes

# Beforeversion_objects=VersionGroup.objects.all()
version_data=VersionGroupSummarySerializer(version_objects, many=True, context=self.context).datamethod_objects=MoveLearnMethod.objects.all()
method_data=MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).dataversion_detail["version_group"] =version_data[move["version_group"] -1]
version_detail["move_learn_method"] =method_data[move["move_learn_method"] -1]
# Afterversion_objects=VersionGroup.objects.all().order_by('id')
version_data=VersionGroupSummarySerializer(version_objects, many=True, context=self.context).dataversion_data_map= {version_objects[i].id: version_data[i] foriinrange(len(version_objects))}
method_objects=MoveLearnMethod.objects.all().order_by('id')
method_data=MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).datamethod_data_map= {method_objects[i].id: method_data[i] foriinrange(len(method_objects))}
version_detail["version_group"] =version_data_map[move["version_group"]]
version_detail["move_learn_method"] =method_data_map[move["move_learn_method"]]

Impact

These fixes resolve two critical test failures that were preventing the test suite from passing. The changes ensure that:

  1. Version data is properly mapped by ID rather than relying on array position
  2. Version group and method data are properly mapped by ID
  3. The serializers work correctly regardless of database query ordering
  4. All 51 tests now pass successfully

Files Modified

  • pokemon_v2/serializers.py - Fixed array indexing issues in get_encounters and get_pokemon_moves methods

joereg4and others added 4 commits October 2, 2025 19:11
Fix: Removed regional restrictions so Rattata can evolve into Raticate in any region
- Updated `LocationAreaDetailSerializer` and `PokemonDetailSerializer` to order version and method objects by ID.
- Created mappings from version and method IDs to their serialized data for improved clarity and efficiency in data access.
@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim This is simply to fix the issue with two tests and think it should go before the PR for the evolution chain metadata addition of locked regions.

@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim I'm sure you are busy, are there other maintainers?

@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim, this PR is now ready for merge. I have fast-forwarded the branch with the latest master changes, and all tests are passing.

The two broken tests that were originally failing have been resolved. The changes are minimal and focused specifically on the serializer index error fixes.

Could you please review and merge when convenient?

Comment threadpokemon_v2/serializers.py
@Naramsim

Copy link
Copy Markdown
Member

Hi! I don't have the time to dig into the Python code at the moment. @phalt, be sure to thoroughly review to these AI-generated PR, in the past @joereg4 opened some other AI-PRs and although they were very convincing we found out they had basic errors in them.

@joereg4

Copy link
Copy Markdown
ContributorAuthor

Yes, @Naramsim there were issues with the regional pokemon evolutions, but that was my lack of understanding the build process and the limitations where regional variants aren't included in the evolution chain because they are not their own species. Those errors are on me.

joereg4and others added 3 commits October 21, 2025 07:16
…ion IDs
- Implemented `test_location_area_api_with_non_sequential_version_ids` to ensure the location area API handles non-sequential version IDs correctly, addressing the IndexError from issue #1313.
- Added `test_pokemon_api_with_non_sequential_ids` to verify the pokemon API functions properly with non-sequential version group and method IDs, also related to issue #1313.
@joereg4

Copy link
Copy Markdown
ContributorAuthor

Closing due to a lack of interest

@joereg4joereg4 closed this Oct 26, 2025
Naramsim added a commit that referenced this pull request Jul 18, 2026
Same issue as #1567 / PR #1603 (previously fixed in
get_pokemon_moves): LocationAreaDetailSerializer.get_encounters looked
up Version summaries by list position (id - 1), assuming ids form a
contiguous 1-indexed sequence. Any gap in the Version table (e.g. a
deleted row) causes the wrong version to be returned, or an
IndexError.
This is the same root cause reported in #1313 and previously
attempted in PR #1314 (closed, unmerged).
Co-authored-by: Alessandro Pezzè <igougi.ui@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@joereg4@Naramsim@phalt
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Fix serializer index errors issue #1313 - #1314

Closed
joereg4 wants to merge 8 commits into
PokeAPI:masterfrom
joereg4:fix-serializer-index-errors
Closed

Fix serializer index errors issue #1313 #1314
joereg4 wants to merge 8 commits into
PokeAPI:masterfrom
joereg4:fix-serializer-index-errors

Conversation

@joereg4

Copy link
Copy Markdown
Contributor

Issue 1: IndexError in test_location_area_api

#1313

Problem

The test_location_area_api test was failing with an IndexError: list index out of range error in the get_encounters method of LocationAreaDetailSerializer.

Root Cause

The serializer was trying to access version data using array indexing (version_data[ver["version"] - 1]), but the version_data array was not ordered by ID. The code assumed that version IDs were sequential and that array index i corresponded to version ID i+1, but this wasn't guaranteed.

Error Details

File "/code/pokemon_v2/serializers.py", line 1221, in get_encounters
version_detail["version"] = version_data[ver["version"] - 1]
IndexError: list index out of range

Solution

  • Modified get_encounters method to order Version objects by ID
  • Created a mapping dictionary from version ID to serialized data
  • Changed array access to use the mapping: version_data_map[ver["version"]]

Code Changes

# Beforeversion_objects=Version.objects.all()
version_data=VersionSummarySerializer(version_objects, many=True, context=self.context).dataversion_detail["version"] =version_data[ver["version"] -1]
# After version_objects=Version.objects.all().order_by('id')
version_data=VersionSummarySerializer(version_objects, many=True, context=self.context).dataversion_data_map= {version_objects[i].id: version_data[i] foriinrange(len(version_objects))}
version_detail["version"] =version_data_map[ver["version"]]

Issue 2: IndexError in test_pokemon_api

Problem

The test_pokemon_api test was failing with an IndexError: list index out of range error in the get_pokemon_moves method of PokemonDetailSerializer.

Root Cause

Similar to Issue 1, the serializer was trying to access version group and method data using array indexing (version_data[move["version_group"] - 1] and method_data[move["move_learn_method"] - 1]), but the arrays were not ordered by ID.

Error Details

File "/code/pokemon_v2/serializers.py", line 4745, in get_pokemon_moves
version_detail["version_group"] = version_data[move["version_group"] - 1]
IndexError: list index out of range

Solution

  • Modified get_pokemon_moves method to order VersionGroup and MoveLearnMethod objects by ID
  • Created mapping dictionaries from ID to serialized data for both version groups and methods
  • Changed array access to use the mappings

Code Changes

# Beforeversion_objects=VersionGroup.objects.all()
version_data=VersionGroupSummarySerializer(version_objects, many=True, context=self.context).datamethod_objects=MoveLearnMethod.objects.all()
method_data=MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).dataversion_detail["version_group"] =version_data[move["version_group"] -1]
version_detail["move_learn_method"] =method_data[move["move_learn_method"] -1]
# Afterversion_objects=VersionGroup.objects.all().order_by('id')
version_data=VersionGroupSummarySerializer(version_objects, many=True, context=self.context).dataversion_data_map= {version_objects[i].id: version_data[i] foriinrange(len(version_objects))}
method_objects=MoveLearnMethod.objects.all().order_by('id')
method_data=MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).datamethod_data_map= {method_objects[i].id: method_data[i] foriinrange(len(method_objects))}
version_detail["version_group"] =version_data_map[move["version_group"]]
version_detail["move_learn_method"] =method_data_map[move["move_learn_method"]]

Impact

These fixes resolve two critical test failures that were preventing the test suite from passing. The changes ensure that:

  1. Version data is properly mapped by ID rather than relying on array position
  2. Version group and method data are properly mapped by ID
  3. The serializers work correctly regardless of database query ordering
  4. All 51 tests now pass successfully

Files Modified

  • pokemon_v2/serializers.py - Fixed array indexing issues in get_encounters and get_pokemon_moves methods

joereg4and others added 4 commits October 2, 2025 19:11
Fix: Removed regional restrictions so Rattata can evolve into Raticate in any region
- Updated `LocationAreaDetailSerializer` and `PokemonDetailSerializer` to order version and method objects by ID.
- Created mappings from version and method IDs to their serialized data for improved clarity and efficiency in data access.
@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim This is simply to fix the issue with two tests and think it should go before the PR for the evolution chain metadata addition of locked regions.

@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim I'm sure you are busy, are there other maintainers?

@joereg4

Copy link
Copy Markdown
ContributorAuthor

@Naramsim, this PR is now ready for merge. I have fast-forwarded the branch with the latest master changes, and all tests are passing.

The two broken tests that were originally failing have been resolved. The changes are minimal and focused specifically on the serializer index error fixes.

Could you please review and merge when convenient?

Comment threadpokemon_v2/serializers.py
@Naramsim

Copy link
Copy Markdown
Member

Hi! I don't have the time to dig into the Python code at the moment. @phalt, be sure to thoroughly review to these AI-generated PR, in the past @joereg4 opened some other AI-PRs and although they were very convincing we found out they had basic errors in them.

@joereg4

Copy link
Copy Markdown
ContributorAuthor

Yes, @Naramsim there were issues with the regional pokemon evolutions, but that was my lack of understanding the build process and the limitations where regional variants aren't included in the evolution chain because they are not their own species. Those errors are on me.

joereg4and others added 3 commits October 21, 2025 07:16
…ion IDs
- Implemented `test_location_area_api_with_non_sequential_version_ids` to ensure the location area API handles non-sequential version IDs correctly, addressing the IndexError from issue #1313.
- Added `test_pokemon_api_with_non_sequential_ids` to verify the pokemon API functions properly with non-sequential version group and method IDs, also related to issue #1313.
@joereg4

Copy link
Copy Markdown
ContributorAuthor

Closing due to a lack of interest

@joereg4joereg4 closed this Oct 26, 2025
Naramsim added a commit that referenced this pull request Jul 18, 2026
Same issue as #1567 / PR #1603 (previously fixed in
get_pokemon_moves): LocationAreaDetailSerializer.get_encounters looked
up Version summaries by list position (id - 1), assuming ids form a
contiguous 1-indexed sequence. Any gap in the Version table (e.g. a
deleted row) causes the wrong version to be returned, or an
IndexError.
This is the same root cause reported in #1313 and previously
attempted in PR #1314 (closed, unmerged).
Co-authored-by: Alessandro Pezzè <igougi.ui@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@joereg4@Naramsim@phalt