Тупая ошибкаPython

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

Хочу сделать на коленке простейшую заглушку на питоне, которая читает файл конфигурации в JSON формате, меняет пару ключей, и записывает обратно. Нужно для быстрого восстановления конфигурации (только избранных ключей) при полном удалении и переустановке в коллабе пакета AUTOMATIC1111 StableDiffusion (что последнее время стало требоваться частенько). Сам я на Питоне практически ни бум-бум, но методом копипасты и выбрасывания лишнего собрал вот такого уродца, и на 90% он работает, кроме самого важного - не читается собственно JSON.

Друзья, огромная, человеческая просьба: не нужно мне рассказывать, что лично вы уже 10 лет работаете в SD и ни единого разрыва ни разу его переставляли; что проще не мучить коллаб, а купить за 100500 денег крутую видяху и поставить SD локально; что вы пользуетесь другой сборкой, и у вас все хорошо и т.д. и т.п. По ряду причин мне подходит именно так; за то, что у вас все по--другому круто получается - заочно рад, но читать об этом интереса не имею.

Кусок кода (там, где "погрызено" - функции, которые не используются и не влияют на чтение; отступы маленько засрались). save_txt в JSONе равен True.

import json

import os

data_path=('/content/gdrive/MyDrive/sd/stable-diffusion-webui')

config_filename = os.path.join(data_path, 'config.json')

config_path = os.path.dirname(config_filename)

assert os.path.exists(config_path), "Config path not exist!"

assert os.path.isfile(config_filename), "Config file not exist!"

print(config_filename)

class OptionInfo:

def __init__(self, default=None, label="", component=None, component_args=None, onchange=None, section=None, refresh=None):

self.default = default

self.label = label

self.component = component

self.component_args = component_args

self.onchange = onchange

self.section = section

self.refresh = refresh

def options_section(section_identifier, options_dict):

for k, v in options_dict.items():

v.section = section_identifier

return options_dict

options_templates = {}

options_templates.update(options_section(('saving-images', "Saving images/grids"), {

"save_txt": OptionInfo(False, "Create a text file next to every image with generation parameters."),

}))

options_templates.update()

print(options_templates.items());

class Options:

data = {}

data_labels = options_templates

typemap = {int: float}

def __init__(self):

""" self.data = {k: v.default for k, v in self.data_labels.items()} """

for k, v in self.data_labels.items():

self.data.setdefault(k, v.default)

print("self.data.items()")

print(self.data.items())

def __getattr__(self, item):

if self.data is not None:

if item in self.data:

return self.data[item]


if item in self.data_labels:

return self.data_labels[item].default
return False

... погрызено ...


def load(self, filename):

print(filename)

with open(filename, "r", encoding="utf8") as file:

self.data = json.load(file)


print("self.data.items() after json.load(file)") 

print(self.data.items())

... погрызено ...

opts = Options()

if os.path.exists(config_filename):

opts.load(config_filename)

print(opts.save_txt)

И вывод (переводы строки добавлены для ясности):

/content/gdrive/MyDrive/sd/stable-diffusion-webui/config.json

dict_items([('save_txt', <__main__.OptionInfo object at 0x7f7cb44ee6a0>)])

self.data.items()

dict_items([('save_txt', False)])

/content/gdrive/MyDrive/sd/stable-diffusion-webui/config.json

self.data.items() after json.load(file)

dict_items([('save_txt', False)])

False

Примечания.

1) Закомментированная строчка

self.data = {k: v.default for k, v in self.data_labels.items()}

по какой-то причине не делает в моем коде ничего; хотя в оригинальном, очевидно, работает.

2) Также в оригинале стоит не data = {}, а data = None - но у меня что-то так тоже не отработало, эмпирически решил инициализировать как пустой dict.

3) Да, не все лишнее выковыряно, в частности - не нужные вне ВЕБ-интерфейса секции, но причина вряд ли в этом.

4) Первая мысль проверить, что читается что-то не то - но файл /content/gdrive/MyDrive/sd/stable-diffusion-webui/config.json 100% существует, и содержит много ключиков; выставленные в начале ассерты тоже проходятся бз ошибок.

5) Но на выходе после self.data = json.load(file) получаем то же самое, что на входе.

6) Если не инициализировать self.data в _init__(self), то на выходе после json.load(file) будет просто пусто и выдастся ошибка.

Какая может быть причина такой печали, что еще можно покрутить? Фантазии уже нет.

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества