Ich entwickle gerade mit einer 3rd party library (spotipy). Diese hat eine Funktion `prompt_for_user_token()`, in der eine weitere Funktion aufgerufen wird, allerdings mit einem geringen Anteil an hartcodierter Vorgabe. Ich habe den relevanten Teil mal ausgeschnitten:
Code: Alles auswählen
def prompt_for_user_token(username, scope=None, client_id = None,
client_secret = None, redirect_uri = None, cache_path = None):
sp_oauth = oauth2.SpotifyOAuth(client_id, client_secret, redirect_uri,
scope=scope, cache_path=".cache-" + username)
token_info = sp_oauth.get_cached_token()
code = sp_oauth.parse_response_code(response)
token_info = sp_oauth.get_access_token(code)
# Auth'ed API request
if token_info:
return token_info['access_token']
Da es sich um eine 3rd party Library handelt, möchte ich ungern den Quellcode verändern, damit man nicht das altbekannte Update- und Partabilitäts-Problem hat.
Nun handelt es sich bei der Funktion um eine recht simple, welche man ohne weiteres kopieren, verändern und stattdessen verwenden könnte, allerdings schafft man so code-Redundanz.
Ich habe mich gefragt ob man sowas nicht mit einer mir bisher unbekannten Technik nicht eleganter lösen kann. Korrigiert mich wenn ich falsch liege, aber mit Decoratorn z.B. "wrapped" man ja nur die ganze Funktion und kann nicht irgendwas aus der Mitte heraus anders machen, oder?