from time import sleep import pytest from facefusion.jobs.job_helper import get_step_output_path from facefusion.jobs.job_manager import add_step, clear_jobs, count_step_total, create_job, delete_job, delete_jobs, find_job_ids, get_steps, init_jobs, insert_step, move_job_file, remix_step, remove_step, set_step_status, set_steps_status, submit_job, submit_jobs from .helper import get_test_jobs_directory @pytest.fixture(scope = 'function', autouse = True) def before_each() -> None: clear_jobs(get_test_jobs_directory()) init_jobs(get_test_jobs_directory()) def test_create_job() -> None: args_1 =\ { 'source_path': 'source-1.jpg', 'target_path': 'target-1.jpg', 'output_path': 'output-1.jpg' } assert create_job('job-test-create-job') is True assert create_job('job-test-create-job') is False add_step('job-test-submit-job', args_1) submit_job('job-test-create-job') assert create_job('job-test-create-job') is False def test_submit_job() -> None: args_1 =\ { 'source_path': 'source-1.jpg', 'target_path': 'target-1.jpg', 'output_path': 'output-1.jpg' } assert submit_job('job-invalid') is False create_job('job-test-submit-job') assert submit_job('job-test-submit-job') is False add_step('job-test-submit-job', args_1) assert submit_job('job-test-submit-job') is True assert submit_job('job-test-submit-job') is False def test_submit_jobs() -> None: args_1 =\ { 'source_path': 'source-1.jpg', 'target_path': 'target-1.jpg', 'output_path': 'output-1.jpg' } args_2 =\ { 'source_path': 'source-2.jpg', 'target_path': 'target-2.jpg', 'output_path': 'output-2.jpg' } assert submit_jobs() is False create_job('job-test-submit-jobs-1') create_job('job-test-submit-jobs-2') assert submit_jobs() is False add_step('job-test-submit-jobs-1', args_1) add_step('job-test-submit-jobs-2', args_2) assert submit_jobs() is True assert submit_jobs() is False def test_delete_job() -> None: assert delete_job('job-invalid') is False create_job('job-test-delete-job') assert delete_job('job-test-delete-job') is True assert delete_job('job-test-delete-job') is False def test_delete_jobs() -> None: assert delete_jobs() is False create_job('job-test-delete-jobs-1') create_job('job-test-delete-jobs-2') assert delete_jobs() is True @pytest.mark.skip() def test_find_jobs() -> None: pass def test_find_job_ids() -> None: create_job('job-test-find-job-ids-1') sleep(0.5) create_job('job-test-find-job-ids-2') sleep(0.5) create_job('job-test-find-job-ids-3') assert find_job_ids('drafted') == [ 'job-test-find-job-ids-1', 'job-test-find-job-ids-2', 'job-test-find-job-ids-3' ] assert find_job_ids('queued') == [] assert find_job_ids('completed') == [] assert find_job_ids('failed') == [] move_job_file('job-test-find-job-ids-1', 'queued') move_job_file('job-test-find-job-ids-2', 'queued') move_job_file('job-test-find-job-ids-3', 'queued') assert find_job_ids('drafted') == [] assert find_job_ids('queued') == [ 'job-test-find-job-ids-1', 'job-test-find-job-ids-2', 'job-test-find-job-ids-3' ] assert find_job_ids('completed') == [] assert find_job_ids('failed') == [] move_job_file('job-test-find-job-ids-1', 'completed') assert find_job_ids('drafted') == [] assert find_job_ids('queued') == [ 'job-test-find-job-ids-2', 'job-test-find-job-ids-3' ] assert find_job_ids('completed') == [ 'job-test-find-job-ids-1' ] assert find_job_ids('failed') == [] move_job_file('job-test-find-job-ids-2', 'failed') assert find_job_ids('drafted') == [] assert find_job_ids('queued') == [ 'job-test-find-job-ids-3' ] assert find_job_ids('completed') == [ 'job-test-find-job-ids-1' ] assert find_job_ids('failed') == [ 'job-test-find-job-ids-2' ] move_job_file('job-test-find-job-ids-3', 'completed') assert find_job_ids('drafted') == [] assert find_job_ids('queued') == [] assert find_job_ids('completed') == [ 'job-test-find-job-ids-1', 'job-test-find-job-ids-3' ] assert find_job_ids('failed') == [ 'job-test-find-job-ids-2' ] def test_add_step() -> None: args_1 =\ { 'source_path': 'source-1.jpg', 'target_path': 'target-1.jpg', 'output_path': 'output-1.jpg' } args_2 =\ { 'source_path': 'source-2.jpg', 'target_path': 'target-2.jpg', 'output_path': 'output-2.jpg' } assert add_step('job-invalid', args_1) is False create_job('job-test-add-step') assert add_step('job-test-add-step', args_1) is True assert add_step('job-test-add-step', args_2) is True steps = get_steps('job-test-add-step') assert steps[0].get('args') == args_1 assert steps[1].get('args') == args_2 assert count_step_total('job-test-add-step') == 2 def test_remix_step() -> None: args_1 =\ { 'source_path': 'source-1.jpg', 'target_path': 'target-1.jpg', 'output_path': 'output-1.jpg' } args_2 =\ { 'source_path': 'source-2.jpg', 'target_path': 'target-2.jpg', 'output_path': 'output-2.jpg' } assert remix_step('job-invalid', 0, args_1) is False create_job('job-test-remix-step') add_step('job-test-remix-step', args_1) add_step('job-test-remix-step', args_2) assert remix_step('job-test-remix-step', 99, args_1) is False assert remix_step('job-test-remix-step', 0, args_2) is True assert remix_step('job-test-remix-step', -1, args_2) is True steps = get_steps('job-test-remix-step') assert steps[0].get('args') == args_1 assert steps[1].get('args') == args_2 assert steps[2].get('args').get('source_path') == args_2.get('source_path') assert steps[2].get('args').get('target_path') == get_step_output_path('job-test-remix-step', 0, args_1.get('output_path')) assert steps[2].get('args').get('output_path') == args_2.get('output_path') assert steps[3].get('args').get('source_path') == args_2.get('source_path') assert steps[3].get('args').get('target_path') == get_step_output_path('job-test-remix-step', 2, args_2.get('output_path')) assert steps[3].get('args').get('output_path') == args_2.get('output_path') assert count_step_total('job-test-remix-step') == 4 def test_insert_step() -> None: args_1 =\ { 'source_path': 'source-1.jpg', 'target_path': 'target-1.jpg', 'output_path': 'output-1.jpg' } args_2 =\ { 'source_path': 'source-2.jpg', 'target_path': 'target-2.jpg', 'output_path': 'output-2.jpg' } args_3 =\ { 'source_path': 'source-3.jpg', 'target_path': 'target-3.jpg', 'output_path': 'output-3.jpg' } assert insert_step('job-invalid', 0, args_1) is False create_job('job-test-insert-step') add_step('job-test-insert-step', args_1) add_step('job-test-insert-step', args_1) assert insert_step('job-test-insert-step', 99, args_1) is False assert insert_step('job-test-insert-step', 0, args_2) is True assert insert_step('job-test-insert-step', -1, args_3) is True steps = get_steps('job-test-insert-step') assert steps[0].get('args') == args_2 assert steps[1].get('args') == args_1 assert steps[2].get('args') == args_3 assert steps[3].get('args') == args_1 assert count_step_total('job-test-insert-step') == 4 def test_remove_step() -> None: args_1 =\ { 'source_path': 'source-1.jpg', 'target_path': 'target-1.jpg', 'output_path': 'output-1.jpg' } args_2 =\ { 'source_path': 'source-2.jpg', 'target_path': 'target-2.jpg', 'output_path': 'output-2.jpg' } args_3 =\ { 'source_path': 'source-3.jpg', 'target_path': 'target-3.jpg', 'output_path': 'output-3.jpg' } assert remove_step('job-invalid', 0) is False create_job('job-test-remove-step') add_step('job-test-remove-step', args_1) add_step('job-test-remove-step', args_2) add_step('job-test-remove-step', args_1) add_step('job-test-remove-step', args_3) assert remove_step('job-test-remove-step', 99) is False assert remove_step('job-test-remove-step', 0) is True assert remove_step('job-test-remove-step', -1) is True steps = get_steps('job-test-remove-step') assert steps[0].get('args') == args_2 assert steps[1].get('args') == args_1 assert count_step_total('job-test-remove-step') == 2 def test_get_steps() -> None: args_1 =\ { 'source_path': 'source-1.jpg', 'target_path': 'target-1.jpg', 'output_path': 'output-1.jpg' } args_2 =\ { 'source_path': 'source-2.jpg', 'target_path': 'target-2.jpg', 'output_path': 'output-2.jpg' } assert get_steps('job-invalid') == [] create_job('job-test-get-steps') add_step('job-test-get-steps', args_1) add_step('job-test-get-steps', args_2) steps = get_steps('job-test-get-steps') assert steps[0].get('args') == args_1 assert steps[1].get('args') == args_2 assert count_step_total('job-test-get-steps') == 2 def test_set_step_status() -> None: args_1 =\ { 'source_path': 'source-1.jpg', 'target_path': 'target-1.jpg', 'output_path': 'output-1.jpg' } args_2 =\ { 'source_path': 'source-2.jpg', 'target_path': 'target-2.jpg', 'output_path': 'output-2.jpg' } assert set_step_status('job-invalid', 0, 'completed') is False create_job('job-test-set-step-status') add_step('job-test-set-step-status', args_1) add_step('job-test-set-step-status', args_2) assert set_step_status('job-test-set-step-status', 99, 'completed') is False assert set_step_status('job-test-set-step-status', 0, 'completed') is True assert set_step_status('job-test-set-step-status', 1, 'failed') is True steps = get_steps('job-test-set-step-status') assert steps[0].get('status') == 'completed' assert steps[1].get('status') == 'failed' assert count_step_total('job-test-set-step-status') == 2 def test_set_steps_status() -> None: args_1 =\ { 'source_path': 'source-1.jpg', 'target_path': 'target-1.jpg', 'output_path': 'output-1.jpg' } args_2 =\ { 'source_path': 'source-2.jpg', 'target_path': 'target-2.jpg', 'output_path': 'output-2.jpg' } assert set_steps_status('job-invalid', 'queued') is False create_job('job-test-set-steps-status') add_step('job-test-set-steps-status', args_1) add_step('job-test-set-steps-status', args_2) assert set_steps_status('job-test-set-steps-status', 'queued') is True steps = get_steps('job-test-set-steps-status') assert steps[0].get('status') == 'queued' assert steps[1].get('status') == 'queued' assert count_step_total('job-test-set-steps-status') == 2