From e247a547d203a08296271008e0e4a227e97bf7ca Mon Sep 17 00:00:00 2001 From: drejmanMacopedia Date: Mon, 5 Jun 2023 14:10:15 +0200 Subject: [PATCH] Translate attributes of one produt at once. Refactor translation process --- .../TranslateAttributes.php | 53 +++++++++++++++++++ .../TranslateAttributes.php | 43 +++++++++++++++ .../Tasklet/ValidateOpenAiKeyTasklet.php | 27 ++++++++++ .../Resources/config/connector.yml | 29 +++++++--- 4 files changed, 145 insertions(+), 7 deletions(-) create mode 100644 src/Macopedia/OpenAiTranslator/Connector/Job/JobParameters/ConstraintCollectionProvider/TranslateAttributes.php create mode 100644 src/Macopedia/OpenAiTranslator/Connector/Job/JobParameters/DefaultValueProvider/TranslateAttributes.php create mode 100644 src/Macopedia/OpenAiTranslator/Connector/Tasklet/ValidateOpenAiKeyTasklet.php diff --git a/src/Macopedia/OpenAiTranslator/Connector/Job/JobParameters/ConstraintCollectionProvider/TranslateAttributes.php b/src/Macopedia/OpenAiTranslator/Connector/Job/JobParameters/ConstraintCollectionProvider/TranslateAttributes.php new file mode 100644 index 0000000..e247486 --- /dev/null +++ b/src/Macopedia/OpenAiTranslator/Connector/Job/JobParameters/ConstraintCollectionProvider/TranslateAttributes.php @@ -0,0 +1,53 @@ + $supportedJobNames + */ + public function __construct( + private array $supportedJobNames, + ) { + } + + /** + * {@inheritdoc} + */ + public function getConstraintCollection(): Collection + { + return new Collection( + [ + 'fields' => [ + 'filters' => new NotNull(), + 'actions' => new NotNull(), + 'realTimeVersioning' => new Type('bool'), + 'users_to_notify' => [ + new Type('array'), + new All(new Type('string')), + ], + 'is_user_authenticated' => new Type('bool'), + 'open_ai_key' => new NotNull(), + ] + ] + ); + } + + /** + * {@inheritdoc} + */ + public function supports(JobInterface $job): bool + { + return in_array($job->getName(), $this->supportedJobNames); + } +} \ No newline at end of file diff --git a/src/Macopedia/OpenAiTranslator/Connector/Job/JobParameters/DefaultValueProvider/TranslateAttributes.php b/src/Macopedia/OpenAiTranslator/Connector/Job/JobParameters/DefaultValueProvider/TranslateAttributes.php new file mode 100644 index 0000000..4cf2dc1 --- /dev/null +++ b/src/Macopedia/OpenAiTranslator/Connector/Job/JobParameters/DefaultValueProvider/TranslateAttributes.php @@ -0,0 +1,43 @@ + $supportedJobNames + */ + public function __construct( + private array $supportedJobNames, + private ?string $openAiKey + ) { + } + + /** + * {@inheritdoc} + */ + public function getDefaultValues(): array + { + return [ + 'filters' => [], + 'actions' => [], + 'realTimeVersioning' => true, + 'users_to_notify' => [], + 'is_user_authenticated' => false, + 'open_ai_key' => $this->openAiKey ?? '' + ]; + } + + /** + * {@inheritdoc} + */ + public function supports(JobInterface $job): bool + { + return in_array($job->getName(), $this->supportedJobNames); + } +} \ No newline at end of file diff --git a/src/Macopedia/OpenAiTranslator/Connector/Tasklet/ValidateOpenAiKeyTasklet.php b/src/Macopedia/OpenAiTranslator/Connector/Tasklet/ValidateOpenAiKeyTasklet.php new file mode 100644 index 0000000..2dd67ca --- /dev/null +++ b/src/Macopedia/OpenAiTranslator/Connector/Tasklet/ValidateOpenAiKeyTasklet.php @@ -0,0 +1,27 @@ +stepExecution->getJobParameters()->get('open_ai_key'))) { + $this->stepExecution->addFailureException(new \Exception('OpenAI key is not set')); + $this->stepExecution->setStatus(new BatchStatus(BatchStatus::FAILED)); + } + } + + public function setStepExecution(StepExecution $stepExecution): void + { + $this->stepExecution = $stepExecution; + } +} diff --git a/src/Macopedia/OpenAiTranslator/Resources/config/connector.yml b/src/Macopedia/OpenAiTranslator/Resources/config/connector.yml index ab7b1b2..fd09db8 100644 --- a/src/Macopedia/OpenAiTranslator/Resources/config/connector.yml +++ b/src/Macopedia/OpenAiTranslator/Resources/config/connector.yml @@ -1,3 +1,5 @@ +parameters: + maco.open_ai_translator.job: 'update_product_translations' services: Macopedia\OpenAiTranslator\Connector\Processor\MassEdit\TranslateAttributesProcessor: arguments: @@ -6,24 +8,27 @@ services: macopedia.job.update_product_translations: class: '%pim_connector.job.simple_job.class%' arguments: - - 'update_product_translations' + - '%maco.open_ai_translator.job%' - '@event_dispatcher' - '@akeneo_batch.job_repository' - - [ '@macopedia.step.update_product_translations.mass_edit' ] + - + - '@macopedia.step.validate_openai_key_tasklet' + - '@macopedia.step.update_product_translations.mass_edit' tags: - { name: akeneo_batch.job, connector: 'Macopedia OpenAi Connector', type: '%pim_enrich.job.mass_edit_type%' } macopedia.job.default_values_provider.translate_product: - class: Akeneo\Pim\Enrichment\Component\Product\Connector\Job\JobParameters\DefaultValueProvider\ProductMassEdit + class: Macopedia\OpenAiTranslator\Connector\Job\JobParameters\DefaultValueProvider\TranslateAttributes arguments: - - [ 'update_product_translations' ] + - [ '%maco.open_ai_translator.job%' ] + - '%open_ai_key%' tags: - { name: akeneo_batch.job.job_parameters.default_values_provider } macopedia.job.constraint_collection_provider.translate_product: - class: 'Akeneo\Pim\Enrichment\Component\Product\Connector\Job\JobParameters\ConstraintCollectionProvider\ProductMassEdit' + class: Macopedia\OpenAiTranslator\Connector\Job\JobParameters\ConstraintCollectionProvider\TranslateAttributes arguments: - - [ 'update_product_translations' ] + - [ '%maco.open_ai_translator.job%' ] tags: - { name: akeneo_batch.job.job_parameters.constraint_collection_provider } @@ -36,4 +41,14 @@ services: - '@pim_enrich.reader.database.product_and_product_model' - '@Macopedia\OpenAiTranslator\Connector\Processor\MassEdit\TranslateAttributesProcessor' - '@pim_enrich.writer.database.product_and_product_model_writer' - - '%pim_job_product_batch_size%' \ No newline at end of file + - '%pim_job_product_batch_size%' + + Macopedia\OpenAiTranslator\Connector\Tasklet\ValidateOpenAiKeyTasklet: ~ + + macopedia.step.validate_openai_key_tasklet: + class: '%pim_connector.step.tasklet.class%' + arguments: + - 'validate_openai_key' + - '@event_dispatcher' + - '@akeneo_batch.job_repository' + - '@Macopedia\OpenAiTranslator\Connector\Tasklet\ValidateOpenAiKeyTasklet' \ No newline at end of file