In decorator an bestimmtes Argument der Funktion kommen
Verfasst: Mittwoch 23. August 2017, 17:39
Ich schreibe in python 3.4
Ich würde gerne dieses ratelimit Skript für verschiedene Webseiten verwenden, um das API Call Limit nicht zu überschreiten.
https://github.com/tomasbasham/ratelimi ... _init__.py
So wie es aktuell aussieht, kann ich es nur für eine einzelne Seite verwenden.
Da ich das Skript ohnehin noch stark überarbeiten werde (aktuell funktioniert es ja mit frequency, aber das ist nicht zweckmäßig), dachte ich mir, ich bau das skript so um, dass mehrere Websiten mit derselben ratelimit Instanz möglich sind.
In meinem Hauptskript, welches die API Calls organisiert, sehen die Funktionen ungefähr so aus:
usw.
Das einfachste wäre nun also, wenn ich das "last_called" im ratelimit skript in ein dictionary umwandle, welches last_called je nach website ändert.
Meine Idee war jetzt, direkt in der ratelimit "wrapper" Funktion die Argumente/Parameter von "func" auszulesen um so darauf zu kommen, was "website" ist.
Dafür habe ich bisher keine andere Möglichkeit gefunden als:
Mir "args" und "kwargs" anzucken und zusätzlich "list(inspect.signature(func).parameters)". Eben um rauszufinden welchen wert "website" hat.
Das scheint mir doch ziemlich umständlich. Deswegen möchte ich hier fragen, ob es da einen besseren Weg gibt?
edit:
mir fällt grad auf, dass es so nicht wirklich funktioniert, wenn die websiten alle ein anderes api rate limit haben, das muss ja auch irgendwie übergeben werden... hmmm
Ich würde gerne dieses ratelimit Skript für verschiedene Webseiten verwenden, um das API Call Limit nicht zu überschreiten.
https://github.com/tomasbasham/ratelimi ... _init__.py
So wie es aktuell aussieht, kann ich es nur für eine einzelne Seite verwenden.
Da ich das Skript ohnehin noch stark überarbeiten werde (aktuell funktioniert es ja mit frequency, aber das ist nicht zweckmäßig), dachte ich mir, ich bau das skript so um, dass mehrere Websiten mit derselben ratelimit Instanz möglich sind.
In meinem Hauptskript, welches die API Calls organisiert, sehen die Funktionen ungefähr so aus:
Code: Alles auswählen
def machcall_A(self,website,param1,param2...):
...
def machcall_B(self,website,param1,param2...):
Das einfachste wäre nun also, wenn ich das "last_called" im ratelimit skript in ein dictionary umwandle, welches last_called je nach website ändert.
Meine Idee war jetzt, direkt in der ratelimit "wrapper" Funktion die Argumente/Parameter von "func" auszulesen um so darauf zu kommen, was "website" ist.
Dafür habe ich bisher keine andere Möglichkeit gefunden als:
Mir "args" und "kwargs" anzucken und zusätzlich "list(inspect.signature(func).parameters)". Eben um rauszufinden welchen wert "website" hat.
Das scheint mir doch ziemlich umständlich. Deswegen möchte ich hier fragen, ob es da einen besseren Weg gibt?
edit:
mir fällt grad auf, dass es so nicht wirklich funktioniert, wenn die websiten alle ein anderes api rate limit haben, das muss ja auch irgendwie übergeben werden... hmmm