Browse Source

- Added a pass to set up gender relevance depening on form or evolution

feature-new-db-implementation
Dan 1 year ago
parent
commit
69466079f0
  1. 50
      database/db_controller.py
  2. 9
      ui/main_window_controller.py
  3. 4
      ui/main_window_view.py

50
database/db_controller.py

@ -316,4 +316,52 @@ class DBController:
traverse_predecessors(start_node, [], True) traverse_predecessors(start_node, [], True)
traverse_successors(start_node, [], True) traverse_successors(start_node, [], True)
return full_paths return full_paths
def propagate_gender_relevance(self, gender_relevant_nodes):
"""
Propagate gender relevance through the evolution graph and update the SQLite database.
:param db_path: Path to the SQLite database file.
:param gender_relevant_nodes: A set of nodes that are initially marked as gender-relevant.
"""
# Traverse from each gender-relevant end node backward to propagate relevance
for node in gender_relevant_nodes:
# Use breadth-first search or depth-first search to traverse backward
visited = set()
stack = [node]
while stack:
current_node = stack.pop()
if current_node not in visited:
visited.add(current_node)
# Update the gender_relevant flag in the database
self.update_pokemon_field(current_node, "gender_relevant", True)
# Add predecessors to the stack to keep traversing backward
if self.graph.has_node(current_node):
predecessors = list(self.graph.predecessors(current_node))
stack.extend(predecessors)
self.save_changes()
def get_gender_specific_evolutions(self):
"""
Get a list of nodes that have evolution methods indicating gender relevance (i.e., '(male)' or '(female)').
:return: A list of nodes involved in gender-specific evolutions.
"""
gender_specific_nodes = []
for from_node, to_node, edge_data in self.graph.edges(data=True):
method = edge_data.get("method", "")
if method and ("(male)" in method.lower() or "(female)" in method.lower()):
# Add both nodes involved in this gender-specific evolution
gender_specific_nodes.extend([from_node, to_node])
return list(set(gender_specific_nodes)) # Return unique nodes
def get_gender_relevant_pokemon(self):
self.cursor.execute(f"SELECT PFIC FROM pokemon_forms WHERE JSON_EXTRACT(data, '$.gender_relevant') = true")
results = self.cursor.fetchall()
return [row['PFIC'] for row in results]

9
ui/main_window_controller.py

@ -127,6 +127,15 @@ class MainWindowController:
print("Works Done!") print("Works Done!")
db.update_evolution_graph(data) db.update_evolution_graph(data)
def adjust_gender_relevancy(self):
list = db.get_gender_specific_evolutions()
second_list = db.get_gender_relevant_pokemon()
print(list)
print(second_list)
db.propagate_gender_relevance(list)
db.propagate_gender_relevance(second_list)
pass
def reinitialize_database(self): def reinitialize_database(self):
pass pass

4
ui/main_window_view.py

@ -152,6 +152,10 @@ class PokemonUI(QWidget):
gather_evolutions_btn.clicked.connect(self.controller.gather_evolution_info) gather_evolutions_btn.clicked.connect(self.controller.gather_evolution_info)
db_tab_layout.addWidget(gather_evolutions_btn) db_tab_layout.addWidget(gather_evolutions_btn)
gather_evolutions_btn = QPushButton("Adjust Gender Relevant Information")
gather_evolutions_btn.clicked.connect(self.controller.adjust_gender_relevancy)
db_tab_layout.addWidget(gather_evolutions_btn)
gather_encounters_btn = QPushButton("Gather Encounter Information") gather_encounters_btn = QPushButton("Gather Encounter Information")
gather_encounters_btn.clicked.connect(self.controller.gather_encounter_info) gather_encounters_btn.clicked.connect(self.controller.gather_encounter_info)
db_tab_layout.addWidget(gather_encounters_btn) db_tab_layout.addWidget(gather_encounters_btn)

Loading…
Cancel
Save