• Что такое Mixins?

    @o5a
    class a:
        def __init__(self, x):
            self.x = x
    
    class b:
        def out(self):
            print(f"*** {self.x} ***")
    
    class e(a, b):
        pass
    
    # у класса e появился метод out из mixin
    x = e(5)
    x.out()
    Ответ написан
    Комментировать
  • Как избавиться от дублирования заголовков?

    0xD34F
    @0xD34F Куратор тега Vue.js
    computed: {
      columns() {
        return Object.keys(this.fedresurs.find(n => n.items.length)?.items[0] ?? {});
      },
    },

    <table v-for="messages in fedresurs">
      <caption>{{ messages.title }}</caption>
      <thead>
        <tr>
          <th v-for="column in columns">{{ column }}</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="item in messages.items">
          <td v-for="column in columns">{{ item[column] }}</td>
        </tr>
      </tbody>
    </table>
    Ответ написан
    5 комментариев
  • Нужно ли закрывать сессию при requests?

    Vindicar
    @Vindicar
    RTFM!
    1. Чем не устраивают обозначенные варианты? Если токен должен переживать перезапуск, храни его в конфигурации. Если не должен, храни его только в памяти - в глобальной переменной или в атрибуте класса.
    2. Конечно стоит. Просто для того, чтобы при истечении токена на полпути его можно было перезапросить прозрачно для клиентского кода. Например, декоратор вида:
    def requires_token(func):
        @functools.wraps(func)
        def wrapper(self, *args, **kwargs):  #оборачиваем метод, а не функцию
            try:
                result = func(self, *args, **kwargs)  # пробуем вызвать метод как есть
            except InvalidToken:  # кастомное исключение, которое должны выбрасывать методы
                self._acquire_new_token()  # получаем новый токен
                result = func(self, *args, **kwargs)  # пробуем еще раз
            return result
    
        return wrapper

    Тогда любой декорированный метод, который выбрасывает исключение InvalidToken, спровоцирует автоматический запрос нового токена и одну повторную попытку выполнения операции.
    Но можно делать это и явно, в каждом методе.
    3. Под закрытием сессии ты понимаешь инвалидацию токена, т.е. невозможность его дальнейшего использования? Ну так это тебя нужно спрашивать, нужно ли закрывать сессию и требует ли используемое API явного закрытия сессии. Планируешь ли ты выполнять дальнейшие операции в рамках этой сессии? Если точно нет, можешь закрывать - например, при выходе из скрипта. Заодно снимется вопрос о хранении токена. Если не хочешь дёргать получение токена понапрасну, тогда храни токен, но не закрывай.
    Делать это в КАЖДОМ методе точно бессмысленно.
    Ответ написан
    5 комментариев
  • Как собрать список списков из json?

    0xD34F
    @0xD34F
    items_dict = {}
    
    for i in range(len(data)):
      for n in data[i]['balance']['StringList']['String']:
        if n['Code'] not in items_dict:
          items_dict[n['Code']] = [ n['Name'], n['Code'], *[ 'None' ] * len(data) ]
    
        items_dict[n['Code']][i + 2] = n['Value']
    
    items_arr = list(items_dict.values())
    Ответ написан
    1 комментарий
  • Шифровальщик в vue-cli?

    Судя по комментариям, уязвимость была в зависимостях, и уже исправлена.
    Так что ничего страшного.
    Ответ написан
    Комментировать
  • Как достать число из строки с помощью xpath?

    laim731
    @laim731
    Айтишник
    Если это на странице сайта, в отладчике пкм копируй xpath
    Ответ написан
    1 комментарий