Знаю, что можно через dict comprehension наверное, но я сделал проще.
Иницилизируется класс "прямым" словарем (self._map), затем два основных метода:
def build_reverse(self):
self._reverse = dict()
for k, vlist in self._map.items():
for v in vlist:
self._reverse[v] = k
def resolve(self, k):
if k in self._map:
return k
return self._reverse[k]
(resolve и build_reverse - два метода этого класса, почему-то в комменте у них отступы разные)
Игорь Маркин, да так примерно и сделал в своем классе. (Для поиска использую "вывернутый" dict, как в вашем примере) Но нужны методы для обновления состава группы, для удаления. В общем, все работает - просто есть подозрение, что я велосипед сделал, потому что не знаю про какой-то стандартный класс для этого.
Просто дополню. Есть интересное видео - https://www.youtube.com/watch?v=HSkbJbgGfHs . Как раз про то, что в США почти всегда площадка не отвечает за действия пользователя, а вот в других странах - отвечает. (И то, что все крупные соцсети - американские, объясняется во многом этим - они защищены законом, в то время, как в Европе - несут большие риски). Я не юрист, не знаю, насчет мата именно, но мы сейчас в такое интересное время живем, что можно ожидать любой незаконный контент на площадке (вплоть до логотипа экстремистской организации "фейсбук") и нести за это ответственность. Так что, я думаю, автору вопроса может быть важно озаботиться не только про мат.
Меня смущает тут то, что хостеру выгодно ведь хостить все подряд, за это деньги платят. Значит, если хостеры блокируют - выходит, есть какой-то механизм давления на них, они почему-то не могут тупо игнорировать абузы, наверное? Или они просто по доброй воле идут на убытки и изгоняют пиратов и впны?
А он может свободно игнорить? Реагирует-помогает правообладателю просто во имя всего прекрасного, без более конкретных мотиваций (не отреагируешь - отмена хостинга, штраф, тюрьма)?
Да это понятно :-) Мне интересно, как это организовано. Если эти письма можно игнорить - тогда почему не игнорят все, в интересах своих клиентов? Если нельзя игнорить (а я думаю, что нельзя - там предупреждения, потом штрафы, потом может даже и срок за злостное пиратство) - то как выкручиваются VPN компании?
Sneiksus, не знаю, как вам ответить. Если любой мой ответ прочитать и понять в парадигме фронт/бэк (как с django) - то любой ответ будет немного некорректным. В JAMStack на выходе - HTML'ки. А генерятся они специальным софтом класса SSG - static site generator'ом. Их много, посмотрите на https://jamstack.com/generators/ . И они разные. Можно поверхностно посмотреть на Next.js / Hugo / 11ty - это три довольно сильно отличающихся SSG. В какой-то мере любой SSG - шаблонизатор (с некоторой натяжкой).
В Next.js, например, нет шаблонов, там есть функции, которые выдают HTML в конце. (Можно, в принципе, их назвать шаблонами, тогда next.js - шаблонизатор? Тогда получится, что тут целый фреймворк интегрирован в шаблонизатор).
А в hugo и eleventy отдельные шаблоны есть (в более привычном нам виде) и, например, в eleventy используется JS в шаблоне, а в hugo - Go.
Виктор Таран, не уверен, что я правильно понял, в конце чего? end.py - это наш обработчик? Мешает то, что end.py (обработчик) может работать работать три часа. Клиентов очень много. Сотни запущенных wget'ов не хочется иметь.... тем более, как-то это неправильно - серверу ведь реально не нужно ждать завершения обработки на клиенте. И результат с клиента не нужно получать никакой. Поэтому все эти wget'ы - будут эдакой бесполезной кинетической скульптурой в напоминание о том, что сделано все неэффективно :-) Если я, конечно, правильно понял идею.
И еще - придется как-то (на стороне сервера) решать проблему с недопущением повторного запуска. (если первый скрипт еще не отработал, а мы снова запускаем его же, могут быть разные чудеса)
Виктор Таран, ну не пхпшный, питоновский, но это не играет особой роли. Решение должно быть очень легким для сервера. Сама обработка может быть длительной (работа с базой, обращение к другим API разным, таймауты итд). Поэтому не хочется грузить сервер долгими запросами (когда он ждет завершения скрипта), (а таких клиентов может быть много). Поэтому, если сервер как-то дергает скрипт - он это делает с таймаутом в 3-5 секунд на все, чисто чтоб передать сам сигнал, а обработка со стороны клиента должна происходить уже потом.
alexvdem, видимо, нужно пояснить. Я видел, что там написано. Однако, думаю, вы и сами за минуту можете накидать несколько "относительно честных способов", как маркетологи могут предлагать бесплатную услугу, однако, ее настоящее использование будет все таки стоит денег. Именно поэтому я и спросил, про ваш личный опыт и ваше мнение. То, что есть питоновские либы я тоже видел (вопрос ведь был не о том), но сходу не увидел в них функционал о приеме push уведомлений. Вполне вероятно, что он там есть, но опять же по этой причине и спросил ваше мнение.
В любом случае, спасибо вам за ваш первый комментарий, в нем была новая и интересная информация.
Дмитрий, да, такое будет работать. Просто в скрипте надо будет добавить эту проверку времени файла. Просто, думал, может быть есть вариант как-то красивее это сделать (тут у нас и cron и http).
alexvdem, не хотелось опираться на внешний сервис, но идея интересная. Это еще и бесплатно? Для питона есть либы чтобы слушать оповещения с таймаутом, не знаете?
Lynn «Кофеман», по HTTP хочется, чтобы приходило просто уведомление, оповещение, сигнал с минимумом информации "что-то случилось, самое время разобраться и если надо - поделать их" (самих данных может быть очень много). Но HTTP запрос - штука ненадежная. Могут быть любые сетевые проблемы иногда, а серверная часть оповещений должна быть легкая, а не так, что если вдруг клиент выключился - сервер без остановки пытается его долбить неделю. (представим, что таких клиентов тысяча, и из этой тысячи десяток мертвые)
Поэтому хочется иметь дублирующий механизм который просто по тайм-ауту будет выполнять проверки. (нет новостей 5 минут? Окей, проверим сами). Но он не запускается если оповещения приходят достаточно часто.
Представим аналогию, что мы работаем с почтой. Клиент - что-то вроде fetchmail, раз в 5 мин проверяет и качает почту по POP3. И мы хотим чтобы почтовый сервер нас оповещал сразу же при приходе нового письма, и мы сразу же скачали почту.
Но целиком полагаться на HTTP не можем, поэтому нужно оставить запуск через 5 минут после предыдущего запуска. Это позволит восстановиться после любого сетевого сбоя, потеряв не более 5 минут.
Lynn «Кофеман», без слипа получится, что работа появляется раз в день, допустим, а клиент будет грузить сервер нон-стоп почти на сто процентов. "Есть там что новое? А сейчас? А щас? А щас появилось? А может сейчас есть?". Вот и нужно как-то не допускать тысячи бесполезных запросов в минуту.
SuperNickname, спасибо. Termux вроде и в плеймаркете есть. Или там он не такой? Это личное предпочтение или пробовали его с клавиатурой, и он нормально передает Esc и Enter?
eegmak, может быть кто-то более компетентный ответит - я не знаю. Но как я по Esc понял - это даже не в столько в руте дело, сколько в какой-то хитрой-кривой схеме, которая есть в одном SSH клиенте, и нету в других. Может каким-то таким способом это и можно.
Но вообще, почти все клиенты имеют либо свою визуальную клавиатуру (со всеми кнопками), либо микро-клавиатуру со спецклавишами (esc, ctrl, alt, tab, итд). Так что вообще задача послать какую-то комбинацию - она точно решаема и решаема легко. Другое дело, что это все делается немного переподвыподвертом. Пару раз тыкнуть в экран аэромышкой или обычно USB мышкой или пальцем на планшете - несложно. Но все таки, мозг хочет машинально любую привычную комбинацию пальцами очень быстро исполнить за полсекунды. И когда несколько раз вместо полсекунды тратишь пять секунд - это постепенно может начать выбешивать :-)
eegmak, у меня alt-tab работает (меняет вкладки на андроиде), а ctrl-c в SSH-сессии (JuiceSSH) - передается на сервер, например, останавливает ping. А вот Esc во всех SSH клиентах кроме одного отрабатывался локально (как "назад", выход из сессии), так что редактировать в vi просто невозможно было.
Борис Сёмов, Клавиатура "полноразмерная", как бы для десктопа? Или явно смартфонно-планшетная? (просто, может быть они отличаются как-то?). А какой SSH клиент? Я вот заметил, что JuiceSSH даже у меня как-то справляется с обычной клавиатурой.
Знаю, что можно через dict comprehension наверное, но я сделал проще.
Иницилизируется класс "прямым" словарем (self._map), затем два основных метода:
(resolve и build_reverse - два метода этого класса, почему-то в комменте у них отступы разные)