Example #1
0
    def handle(self, *args, **options):
        # Инициализация клиента ElasticSearch
        self.es = Elasticsearch(settings.ELASTIC_HOST,
                                timeout=settings.ELASTIC_TIMEOUT)

        # Объекты для добавления в API
        apps = OpenData.objects.filter(data_docs__isnull=True).values(
            'app_id', 'obj_type_id')

        c = apps.count()
        i = 0

        # Добавление/обновление данных
        for app in apps:
            i += 1
            print(f"{i}/{c} - {app['app_id']}")

            # Получение данных с ElasticSearch
            data = Search(using=self.es,
                          index=settings.ELASTIC_INDEX_NAME).query(
                              "match", _id=app['app_id']).execute()
            if data:
                data = data[0].to_dict()
                try:
                    data_docs = None
                    # Патенты на изобретения, Патенты на полезные модели, Свидетельства на топографии инт. микросхем
                    if app['obj_type_id'] in (1, 2, 3):
                        data_docs = data.get('DOCFLOW', {}).get('DOCUMENTS')

                    # Свидетельства на знаки для товаров и услуг
                    elif app['obj_type_id'] == 4:
                        data_docs = data['TradeMark'].get('DocFlow',
                                                          {}).get('Documents')

                    # Патенты на пром. образцы
                    elif app['obj_type_id'] == 6:
                        data_docs = data['Design'].get('DocFlow',
                                                       {}).get('Documents')

                except KeyError as e:
                    self.stdout.write(
                        self.style.ERROR(
                            f"Can't get app data (idAPPNumber={app['app_id']}, error text:{e})"
                        ))
                else:
                    # Сохраннение данных
                    OpenData.objects.filter(app_id=app['app_id']).update(
                        data_docs=json.dumps(data_docs))

        self.stdout.write(self.style.SUCCESS(f'Finished'))