Как использовать функции из файла конфигурации в python? - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть файл конфигурации yaml, который выглядит следующим образом:

---

tables:

  - table: my_table
    db: my_user
    checks:
      - type: my_check
        column: [col1, col2, col3, col4, col5]

Я читаю этот файл конфигурации и запускаю проверки на основе раздела check в yaml.

скажем, у меня есть класс, который выглядит следующим образом:

class MasterCheck(object):

    def my_check(self, over_view_table, columns, label):
        if columns is None:
            null_check = set(over_view_table[(over_view_table['null_share'] > 0) | (
                over_view_table['empty_string_share'] > 0)].column_)
        else:
            null_check = set(over_view_table[(over_view_table['null_share'] > 0) | (
                over_view_table['empty_string_share'] > 0)].column_).intersection(set(columns))
        if len(null_check) > 0:
            self.alert = '{0}: NULLs in {1}'.format(label, null_check)
        else:
            self.alert = ""

Я могу выполнить эту проверку, используя следующий метод:

my_check = checks['type'][0]['type']
getattr(MasterCheck(), my_check)(table_summary, column, table)

Идея это запускать проверки автоматически на основе того, что указано в файле конфигурации. Однако может быть несколько проверок, предоставленных из файла конфигурации для каждой таблицы, и я не знаю заранее, является ли строка в файле конфигурации атрибутом класса. Есть ли какой-либо рекомендуемый способ, где я могу создать свои проверки из файла конфигурации, не зная, к какому классу относится этот атрибут. Любые идеи на этот счет будут полезны.

1 Ответ

1 голос
/ 01 апреля 2020

В вашем конфигурационном файле написано:

  - type: my_check
  1. Вместо этого вы можете явно указать «type: MasterCheck.my_check».
  2. You может создать список классов (или созданных экземпляров объектов) и запустить getattr поиск l oop по всем из них, пока не найдете my_check.
  3. Вы можете сделать то же самое с помощью в шаблоне, где MasterCheck наследуется от нескольких классов, каждый из которых предоставляет функции с уникальными именами.

Например:

class MasterCheck(NullCheck, FkCheck, SpellCheck):

, где каждый из этих классов предлагает один или несколько функции, такие как my_check, которые могут появиться в вашем файле конфигурации. (Если вы не оставите имена функций уникальными для всех классов, mro python, Order Resolution Order, выберет победителя.)

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