Browse Source

Merge branch 'countrylist-linksearch'

develop
Jonathan Golder 9 years ago
parent
commit
55afe94a4e
  1. 84
      countrylist.py

84
countrylist.py

@ -244,7 +244,11 @@ missing!" )
if not self._titel_raw: if not self._titel_raw:
self.get_titel_value() self.get_titel_value()
self.titel = self._titel_raw # Try to find a wikilink for Titel on countrylist
if "[[" not in self._titel_raw:
self.titel = self._search_links( str(self._titel_raw) )
else:
self.titel = self._titel_raw
def get_titel_value( self ): def get_titel_value( self ):
""" """
@ -298,31 +302,10 @@ missing!" )
parts.append( word ) parts.append( word )
parts.append( " " ) parts.append( " " )
# If we have indexes with out links, search for links # If we have indexes without links, search for links
if indexes: if indexes:
# Iterate over wikilinks of refpage and try to find related links parts = self._search_links( parts, indexes )
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
# Join the collected links # Join the collected links
sep = " " sep = " "
@ -343,6 +326,59 @@ missing!" )
raise CountryListEntryError( "Template Parameter 'Interpret' is \ raise CountryListEntryError( "Template Parameter 'Interpret' is \
missing!" ) 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 = list(range( len( keywords ) ))
# 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 str(keywords[0])
class CountryListError( Exception ): class CountryListError( Exception ):
""" """

Loading…
Cancel
Save