def test_manager_get_plugin_configuration(plugin_configuration): plugins = [ "tests.plugins.sample_plugins.PluginSample", "tests.plugins.sample_plugins.PluginInactive", ] manager = PluginsManager(plugins=plugins) plugin = manager.get_plugin("PluginSample") configuration_from_db = PluginConfiguration.objects.get(name="PluginSample") assert plugin.DEFAULT_CONFIGURATION == configuration_from_db.configuration
def test_manager_get_plugin_configuration(plugin_configuration): plugins = [ "saleor.plugins.tests.sample_plugins.PluginSample", "saleor.plugins.tests.sample_plugins.PluginInactive", ] manager = PluginsManager(plugins=plugins) plugin = manager.get_plugin(PluginSample.PLUGIN_ID) configuration_from_db = PluginConfiguration.objects.get( identifier=PluginSample.PLUGIN_ID ) assert plugin.DEFAULT_CONFIGURATION == configuration_from_db.configuration
def synchronize_allegro_offers_task(): manage = PluginsManager(plugins=["saleor.plugins.allegro.plugin.AllegroPlugin"]) plugin_configs = manage.get_plugin(AllegroPlugin.PLUGIN_ID) conf = {item["name"]: item["value"] for item in plugin_configs.configuration} token = conf.get('token_value') env = conf.get('env') allegro_api = AllegroAPI(token, env) params = {'publication.status': ['ACTIVE'], 'limit': '1', 'offset': 0} response = allegro_api.get_request('sale/offers', params) total_count = json.loads(response.text).get('totalCount') if total_count is None: return limit = 1000 errors = [] updated_amount = 0 for i in range(int(int(total_count) / limit) + 1): offset = i * limit params = {'publication.status': ['ACTIVE'], 'limit': limit, 'offset': offset} response = allegro_api.get_request('sale/offers', params) logger.info( f'Fetching 1000 offers status: {response.status_code}, offset: {offset}') offers = json.loads(response.text).get('offers') if offers: skus = [offer.get('external').get('id') for offer in offers] product_variants = list( ProductVariant.objects.select_related('product').filter(sku__in=skus)) products_to_update = [] for offer in offers: product_errors = [] sku = offer.get('external').get('id') offer_id = offer.get('id') variant = next((x for x in product_variants if x.sku == sku), None) if variant: product = variant.product product_errors = valid_product(product) if product.private_metadata.get('publish.allegro.id') != offer_id: product.private_metadata['publish.allegro.id'] = offer_id products_to_update.append(product) else: product_errors.append('nie znaleziono produktu o podanym SKU') if product_errors: errors.append({'sku': sku, 'errors': product_errors}) if products_to_update: Product.objects.bulk_update(products_to_update, ['private_metadata']) updated_amount += len(products_to_update) html_errors_list = plugin_configs.create_table(errors) send_mail(html_errors_list, updated_amount)
def test_plugin_add_new_configuration( new_config, new_config_structure, monkeypatch, ): monkeypatch.setattr(PluginInactive, "DEFAULT_ACTIVE", True) monkeypatch.setattr( PluginInactive, "DEFAULT_CONFIGURATION", [new_config], ) config_structure = {"Foo": new_config_structure} monkeypatch.setattr(PluginInactive, "CONFIG_STRUCTURE", config_structure) manager = PluginsManager(plugins=["tests.plugins.sample_plugins.PluginInactive"]) plugin = manager.get_plugin("PluginInactive") assert len(plugin.configuration) == 1 assert plugin.configuration[0] == {**new_config, **new_config_structure}
def test_plugin_updates_configuration_shape( new_config, new_config_structure, plugin_configuration, monkeypatch, ): config_structure = PluginSample.CONFIG_STRUCTURE.copy() config_structure["Foo"] = new_config_structure monkeypatch.setattr(PluginSample, "CONFIG_STRUCTURE", config_structure) monkeypatch.setattr( PluginSample, "DEFAULT_CONFIGURATION", plugin_configuration.configuration + [new_config], ) manager = PluginsManager(plugins=["tests.plugins.sample_plugins.PluginSample"]) plugin = manager.get_plugin("PluginSample") assert len(plugin.configuration) == 5 assert plugin.configuration[-1] == {**new_config, **new_config_structure}
def handle(self, *args, **options): manage = PluginsManager( plugins=["saleor.plugins.allegroSync.plugin.AllegroSyncPlugin"]) plugin = manage.get_plugin(AllegroSyncPlugin.PLUGIN_ID) plugin.type = options['type'] plugin.synchronize_allegro_offers()
def remove_null_values_from_allegro_offers(self, options): manage = PluginsManager( plugins=["saleor.plugins.allegro.plugin.AllegroPlugin"]) plugin_configs = manage.get_plugin(AllegroPlugin.PLUGIN_ID) conf = { item["name"]: item["value"] for item in plugin_configs.configuration } token = conf.get('token_value') self.allegro_api = AllegroAPI(token) data = self.read_csv(options['path']) skus = data['sku'] product_variants = list(ProductVariant.objects.filter(sku__in=skus)) sku_errors = [] for product_variant in product_variants: self.product = {} errors = [] if product_variant: saleor_product = product_variant.product allegro_id = saleor_product.private_metadata.get( 'publish.allegro.id') if allegro_id is not None: category_id = saleor_product.product_type.metadata.get( 'allegro.mapping.categoryId') require_parameters = self.allegro_api.get_require_parameters( category_id) parameters_mapper = ParametersMapperFactory().get_mapper() parameters = parameters_mapper.set_product( saleor_product).set_require_parameters( require_parameters).run_mapper() product_mapper = ProductMapperFactory().get_mapper() try: product = product_mapper.set_saleor_product(saleor_product) \ .set_saleor_images(self.allegro_api.upload_images(saleor_product)) \ .set_saleor_parameters(parameters).set_category( category_id).set_obj_publication_starting_at('2020-10-10 10:10').\ set_offer_type('AUCTION').run_mapper() except: pass offer = self.allegro_api.update_allegro_offer( allegro_product=product, allegro_id=allegro_id) if 'error' in offer: errors.append(offer.get('error_description')) elif 'errors' in offer: errors += offer['errors'] elif offer['validation'].get('errors') is not None: if len(offer['validation'].get('errors')) > 0: for error in offer['validation'].get('errors'): errors.append(error['message']) else: errors.append('produkt nie ma allegro id') sku_errors.append({ 'sku': product_variant.sku, 'errors': errors }) html_errors_list = plugin_configs.create_table(sku_errors) return self.send_mail(html_errors_list, options)