Сбой проверки строки Python 2 в Unicode - PullRequest
0 голосов
/ 25 июня 2018

В настоящее время я пытаюсь заставить библиотеку python работать на моем компьютере, но по какой-то причине способ написания выглядит некорректным.

Библиотека принимает два файла json в качестве входных данных, один из которых называется library.json, в library.json выполняется несколько проверок, которые выглядят следующим образом:

def name(self, n):
        if n and isinstance(n, str):
            if re.search(r'[^a-zA-Z0-9_.]+', n):
                raise ValueError("Name can only contain alphanumeric   characters, underscores and periods. Name is: {}".format(n))
            if re.match(r'^\d', n):
                raise ValueError("Name cannot start with a number. The name is: {}".format(n))
            self._name = n
        else:
            raise ValueError('Name must be a non-empty string')

Я использую простой library.json, извлеченный прямо из документации:

{
    "word_launching_powershell": {"datetime_field": "datetime",
                                  "weight": 10,
                                  "indicators": [{"field": "process", "value": "powershell.exe"},
                                             {"field": "parent_process", "value": "winword.exe"}]

                             }
 }

И простой тестовый файл, снова взятый прямо из документации:

from electus import Electus

# Create some sample data
events = [{
           "process": "winword.exe",
           "parent_process": "explorer.exe",
           "datetime": "2017-10-16T17:15:47.030114"
           },
          {"process": "powershell.exe",
           "parent_process": "winword.exe",
           "datetime": "2017-10-16T17:15:48.030123"
          }]

# The library.json file stores the indicator definitions
# The combinations of indicators are defined in jobs.json
e = Electus(library_conf='library.json', job_conf='jobs.json')

for event in events:
    alerts = e.evaluate_event(event)
    if alerts:
        print(alerts)

Итак, когда я запускаю этот тестовый скрипт, я получаю следующее:

Traceback (most recent call last):
  File "test_config.py", line 16, in <module>
    lib_def = LibraryDefinition(name='word_launching_powershell', definition=definition)
  File "/home/user/.local/lib/python2.7/site-packages/electus/library.py", line 17, in __init__
    self.name = name
  File "/home/user/.local/lib/python2.7/site-packages/electus/library.py", line 47, in name
    raise ValueError('Name must be a non-empty string')
ValueError: Name must be a non-empty string

Выполнение небольшой отладкиЯ вижу, что он умирает здесь:

n = {unicode}u'word_launching_powershell'

Так что это выглядит для меня проблемой кодирования, я не понимаю, почему вся библиотека будет написана с этими isinstance проверяет, будут ли они всегда работать с файлами json?Есть ли способ исправить кодировку?

1 Ответ

0 голосов
/ 25 июня 2018

Итак, я переключил все ссылки с isinstance(n, str) на isinstance(n, basestring), и все заработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...