apify-client-python icon indicating copy to clipboard operation
apify-client-python copied to clipboard

fix: aborting of last Actor/task run

Open vdusek opened this issue 9 months ago • 0 comments

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:
# 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)   
# 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:
# 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)

# 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 https://github.com/apify/apify-client-python/issues/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):
# 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):
# 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.

vdusek avatar May 17 '24 12:05 vdusek