pywikibot: как работать с user-config.py, принадлежащим кому-то другому?

Я, вероятно, использую Pywikibot способами, которые выходили за рамки того, что проект был предназначен. Я хочу, чтобы несколько пользователей использовали один и тот же user-config.py, К сожалению, это дает мне эту ошибку:

ВНИМАНИЕ: Пропущено "... pywikibot / user-config.py": принадлежит кому-то другому.

Мое текущее решение состоит в том, чтобы просто прокомментировать часть этого кода на pywikibot/config2.py:

    _filestatus = os.stat(_filename)
    _filemode = _filestatus[0]
    _fileuid = _filestatus[4]
    if sys.platform == 'win32' or _fileuid in [os.getuid(), 0]:
        if sys.platform == 'win32' or _filemode & 0o02 == 0:
            with open(_filename, 'rb') as f:
                exec(compile(f.read(), _filename, 'exec'), _uc)
        else:
            print("WARNING: Skipped '%(fn)s': writeable by others."
                  % {'fn': _filename})
    else:
        print("WARNING: Skipped '%(fn)s': owned by someone else."
              % {'fn': _filename})

Т.е. я только держу эту часть:

    with open(_filename, 'rb') as f:
        exec(compile(f.read(), _filename, 'exec'), _uc)

Это действительно не лучший способ справиться с этим. Так что мне любопытно, есть ли лучший способ? Лучше: здесь ничего не сломается, если я (или кто-то еще в будущем) обновлю Pywikibot.

(Создание проблемы в баг-трекере Pywikibot может быть хорошим способом начать работу над более устойчивым решением, но проект настолько распространен, что я не могу понять, где это можно сделать.)

0 ответов

Я нашел эту ветку, пытаясь отладить ту же проблему. Я использую WSL и в конечном итоге использовал обходной путь OP (комментируя эти строки кода), но дополнительно должен был прокомментировать еще одну строку кода:

def file_mode_checker(filename, mode=0o600):
    """Check file mode and update it, if needed.

    @param filename: filename path
    @type filename: basestring
    @param mode: requested file mode
    @type mode: int

    """
    warn_str = 'File {0} had {1:o} mode; converted to {2:o} mode.'
    st_mode = os.stat(filename).st_mode
    if stat.S_ISREG(st_mode) and (st_mode - stat.S_IFREG != mode):
        # the following is the line I commented:
        # os.chmod(filename, mode)
        # re-read and check changes
        if os.stat(filename).st_mode != st_mode:
            warn(warn_str.format(filename, st_mode - stat.S_IFREG, mode))

Вышеизложенное взято из __init__.py в pywikibot/tools. Я не обновлял PWB пару лет, поэтому не уверен, насколько он изменился с тех пор, но, надеюсь, это актуально для кого-то (или, по крайней мере, это будет полезно для меня, когда я обновляю PWB lol).

Проблема в WSL в том, что я не могу chown для себя, так что, кстати, единственный другой вариант - делать все как root, и я думаю, что лучше прокомментировать этот код, чем быть root для всего.

Измените разрешение на чтение / запись на только чтение с помощью:

chmod 600 user-config.py
Другие вопросы по тегам