From 9d9207c175e435f40ae90a8db463e15fb9e09f10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?GOLDERWEB=20=E2=80=93=20Jonathan=20Golder?= Date: Thu, 10 Dec 2015 23:13:45 +0100 Subject: [PATCH] CountryList-module: Put linksearching algorithm in separate function for simple reuse for Titel value --- countrylist.py | 78 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 55 insertions(+), 23 deletions(-) diff --git a/countrylist.py b/countrylist.py index 38e5c9b..b94ac75 100644 --- a/countrylist.py +++ b/countrylist.py @@ -298,31 +298,10 @@ missing!" ) parts.append( word ) parts.append( " " ) - # If we have indexes with out links, search for links + # If we have indexes without links, search for links if indexes: - # Iterate over wikilinks of refpage and try to find related links - for wikilink in self.wikicode.ifilter_wikilinks(): - - # Iterate over interpret names - for index in indexes: - - # Check wether wikilink matches - if( parts[index] == wikilink.text or - parts[index] == wikilink.title ): - - # Overwrite name with complete wikilink - parts[index] = str( wikilink ) - - # Remove index from worklist - indexes.remove( index ) - - # Other indexes won't also match - break - - # If worklist is empty, stop iterating over wikilinks - if not indexes: - break + parts = self._search_links( parts, indexes ) # Join the collected links sep = " " @@ -343,6 +322,59 @@ missing!" ) raise CountryListEntryError( "Template Parameter 'Interpret' is \ missing!" ) + def _search_links( self, keywords, indexes=None ): + """ + Search matching wikilinks for keyword(s) in CountryList's wikicode + + @param keywords: One or more keywords to search for + @type keywords: str, list + @param indexes: List with numeric indexes for items of keywords to work + on only + @type indexes: list of ints + @return: List or String with replaced keywords + @return type: str, list + """ + + # Maybe convert keywords string to list + if( isinstance( keywords, str ) ): + keywords = [ keywords, ] + string = True + else: + string = False + + # If indexes worklist was not provided, work on all elements + if not indexes: + indexes = range( len( keywords ) - 1 ) + + # Iterate over wikilinks of refpage and try to find related links + for wikilink in self.wikicode.ifilter_wikilinks(): + + # Iterate over interpret names + for index in indexes: + + # Check wether wikilink matches + if( keywords[index] == wikilink.text or + keywords[index] == wikilink.title ): + + # Overwrite name with complete wikilink + keywords[index] = str( wikilink ) + + # Remove index from worklist + indexes.remove( index ) + + # Other indexes won't also match + break + + # If worklist is empty, stop iterating over wikilinks + if not indexes: + break + + # Choose wether return list or string based on input type + if not string: + return keywords + else: + return keywords[0] + class CountryListError( Exception ): """