'positional argument error in sheduling task in python
I got a positional argument error when i tried running my code and the do() passes extra arguments to the job function
import schedule
from schedule import Scheduler
import threading
import warnings
import time
def paystack_webhookS (request):
user = request.user
remail = payload.customer.email
rfirst_name = payload.customer.first_name
amount = payload.data.amount
first_name = user.first_name
last_name = user.last_name
email = user.email
with transaction.atomic():
account = Account.objects.select_for_update().get(email = remail)
account.balance += amount
asof = account.modified
account.save(update_fields=[
'balance',
'modified',
])
return HttpResponse(status=200)
schedule.every(10).seconds.do(paystack_webhookS)
schedule.every(10).minutes.do(paystack_webhookS)
schedule.every().hour.do(paystack_webhookS)
while True:
schedule.run_pending()
time.sleep(1)
i got this error
schedule.run_pending()
return view_func(*args, **kwargs)
TypeError: inner() missing 1 required positional argument: 'request'
this error is gotten when trying to execute
while True:
schedule.run_pending()
time.sleep(1)
Solution 1:[1]
The function you pass to the schedule (you named it "paystack_webhookS") must be defined without any arguments.
def paystack_webhookS():
...
Your code doesn't tell where the "request" variable is coming from. But if it is not global but already defined when the schedule tasks are initialized, you could work with a wrapper function creating your actual schedule function:
def createScheduleFunction(requestParameter):
def __func():
user = requestParameter.user
...
return func
And then:
schedule.every(10).seconds.do(createScheduleFunction(request))
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | crystalAhmet |