You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
## Problem description
### Aborting the last Actor run does not work
- Resulting in:
```
apify_client._errors.ApifyApiError: We have bad news: there is no API endpoint at this URL.
Did you specify it correctly?
```
- Code to reproduce it:
```python
# sync version
from apify_client import ApifyClient
TOKEN = '...'
ACTOR_ID = '...'
def actor_run_abort(apify_client: ApifyClient, actor_id: str) -> None:
actor_client = apify_client.actor(actor_id)
actor_client.call(wait_secs=1)
last_run = actor_client.last_run(status='RUNNING', origin='API')
aborted_info = last_run.abort()
print(f'aborted_info: {aborted_info}')
if __name__ == '__main__':
apify_client = ApifyClient(TOKEN)
actor_run_abort(apify_client, ACTOR_ID)
```
```python
# async version
import asyncio
from apify_client import ApifyClientAsync
TOKEN = '...'
ACTOR_ID = '...'
async def actor_run_abort_async(apify_client: ApifyClientAsync, actor_id: str) -> None:
actor_client = apify_client.actor(actor_id)
await actor_client.call(wait_secs=1)
last_run = await actor_client.last_run(status='RUNNING', origin='API')
aborted_info = await last_run.abort()
print(f'aborted_info: {aborted_info}')
if __name__ == '__main__':
apify_client = ApifyClientAsync(TOKEN)
asyncio.run(actor_run_abort_async(apify_client, ACTOR_ID))
```
### Aborting of the last task run does not work
- Resulting in:
```
apify_client._errors.ApifyApiError: We have bad news: there is no API endpoint at this URL.
Did you specify it correctly?
```
- Code to reproduce it:
```python
# sync version
from apify_client import ApifyClient
TOKEN = '...'
TASK_ID = '...'
def task_run_abort(apify_client: ApifyClient, task_id: str) -> None:
task_client = apify_client.task(task_id)
task_client.call(wait_secs=1)
last_run = task_client.last_run(status='RUNNING', origin='API')
aborted_info = last_run.abort()
print(f'aborted_info: {aborted_info}')
if __name__ == '__main__':
apify_client = ApifyClient(TOKEN)
task_run_abort(apify_client, TASK_ID)
```
```python
# async version
import asyncio
from apify_client import ApifyClientAsync
TOKEN = '...'
TASK_ID = '...'
async def task_run_abort_async(apify_client: ApifyClientAsync, task_id: str) -> None:
task_client = apify_client.task(task_id)
await task_client.call(wait_secs=1)
last_run = await task_client.last_run(status='RUNNING', origin='API')
aborted_info = await last_run.abort()
print(f'aborted_info: {aborted_info}')
if __name__ == '__main__':
apify_client = ApifyClientAsync(TOKEN)
asyncio.run(task_run_abort_async(apify_client, TASK_ID))
```
### Related issues
- The aborting of the last task run was reported in
#190. The aborting of
the last Actor run does not work as well as was described above.
### Solution
- Using additional API call to be able to call
`https://api.apify.com/v2/acts/{actorId}/runs/{runId}/abort` in both
cases.
- In the async version it results in `last_run` method being `async`
(should not be released as patch version).
- Copied from source code (Actor run):
```python
# Note:
# The API does not provide a direct endpoint for aborting the last Actor run using a URL like:
# https://api.apify.com/v2/acts/{actor_id}/runs/last/abort
# To achieve this, we need to implement a workaround using the following URL format:
# https://api.apify.com/v2/acts/{actorId}/runs/{runId}/abort
```
- Copied from source code (task run):
```python
# Note:
# The API does not provide a direct endpoint for aborting the last task run using a URL like:
# https://api.apify.com/v2/actor-tasks/{task_id}/runs/last/abort
# To achieve this, we need to implement a workaround using the following URL format:
# https://api.apify.com/v2/acts/{actorId}/runs/{runId}/abort
```
### Testing
- As we do not have a proper testing framework here, it was tested just
manually with the code examples provided at the beginning.
0 commit comments