Форум XBMC \ Kodi Russia
   

Вернуться   Форум XBMC \ Kodi Russia > Разработка > Поддержка локальной разработки модулей

Ответ
 
Опции темы Опции просмотра
Старый 08.01.2018, 17:18   #41
Roman_V_M
Senior Member
 
Аватар для Roman_V_M
 
Регистрация: 12.06.2011
Адрес: Киев
Сообщений: 1,902
По умолчанию

Да, по симптомам явно похоже на race condition. Я предвидел такую возможность, но меня ввело в заблуждение утверждение об атомарности операции shutil.move(), которая оказалась нифига не атомарной. Можно попробовать сделать вот так:
Код:
    def flush(self):
        """
        Save storage contents to disk

        This method saves new and changed :class:`Storage` contents to disk
        and invalidates the Storage instance. Unchanged Storage is not saved
        but simply invalidated.
        """
        contents = pickle.dumps(self._storage)
        if self._hash is None or hashlib.md5(contents).hexdigest() != self._hash:
            tmp = self._filename + '.tmp'
            try:
                start_time = time.time()
                while os.path.exists(tmp):
                    xbmc.sleep(100)
                    if time.time() - start_time > 2.0:
                        raise TimeoutError(
                            'Exceeded timeout for saving {0}!'.format(self)
                        )
                with open(tmp, 'wb') as fo:
                    fo.write(contents)
            except:
                if os.path.exists(tmp):
                    os.remove(tmp)
                raise
            else:
                move(tmp, self._filename)
        del self._storage
т.е. ждать, пока предыдущий процесс не удалит временный файл.

А вообще, в 3-й версии я собираюсь сильно переделать библиотеку. Основные изменения:
- Из класса Plugin убрано всё, кроме собственно маршрутизации вызовов плагина.
- Добавлен класс RoutedPlugin для маршрутизации с "красивыми" УРЛ-ами а ля Flask.
- Код портирован на Питон 3.

Задача - сделать код более долгоживущим, т. к. излишняя абстракция часто ломается и требует постоянных правок, а потом забросить его нафик, поскольку на поддержку нет ни времени, ни желания.
__________________
Координатор русского перевода Kodi:
https://www.transifex.com/projects/p/kodi-main/
------------------------------
Raspberry PI 2 + LibreELEC 8 (Kodi 17)
Samsung Galaxy Tab A 10.1 + Kodi 17 for Android
------------------------------
Читаем и пополняем Википедию форума: http://xbmc.ru/wiki
------------------------------
На любые личные сообщения, не связанные с переводом Kodi, не отвечаю. Для обсуждений и советов есть форум.
Roman_V_M вне форума   Ответить с цитированием
 

Старый 24.01.2018, 00:46   #42
vl.maksime
Senior Member
 
Аватар для vl.maksime
 
Регистрация: 18.10.2015
Адрес: Donetsk, Ukraine
Сообщений: 357
По умолчанию

3я версия с develop ветки GitHub'a финальная? Ее можно брать за основу для разработки?
Давно хочу переделать дополнение tvzavr.ru на simpleplugin, как-раз возможность опробовать "красивые" ссылки.

И можно добавить возврат названия дополнения при обращении к свойству 'name'?
__________________
Репозиторий: https://github.com/vlmaksime/repository.vlmaksime/releases

Последний раз редактировалось vl.maksime; 24.01.2018 в 11:15.
vl.maksime вне форума   Ответить с цитированием
Старый 24.01.2018, 14:53   #43
Roman_V_M
Senior Member
 
Аватар для Roman_V_M
 
Регистрация: 12.06.2011
Адрес: Киев
Сообщений: 1,902
По умолчанию

Цитата:
Сообщение от vl.maksime Посмотреть сообщение
3я версия с develop ветки GitHub'a финальная? Ее можно брать за основу для разработки?
Нет, она еще work in progress.

Цитата:
И можно добавить возврат названия дополнения при обращении к свойству 'name'?
Можно. Надо глянуть в исходниках, что там вообще возвращается через getAddonInfo(), и добавить.
__________________
Координатор русского перевода Kodi:
https://www.transifex.com/projects/p/kodi-main/
------------------------------
Raspberry PI 2 + LibreELEC 8 (Kodi 17)
Samsung Galaxy Tab A 10.1 + Kodi 17 for Android
------------------------------
Читаем и пополняем Википедию форума: http://xbmc.ru/wiki
------------------------------
На любые личные сообщения, не связанные с переводом Kodi, не отвечаю. Для обсуждений и советов есть форум.
Roman_V_M вне форума   Ответить с цитированием
Старый 10.02.2018, 20:02   #44
vl.maksime
Senior Member
 
Аватар для vl.maksime
 
Регистрация: 18.10.2015
Адрес: Donetsk, Ukraine
Сообщений: 357
По умолчанию

При тестировании 3й версии во время исключения в log_exception вылетает ошибка
Код:
EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
 - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
Error Type: <type 'exceptions.UnicodeDecodeError'>
Error Contents: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
Traceback (most recent call last):
  File "\14.2\portable_data\addons\weather.gismeteo\default.py", line 698, in <module>
    weather.run()
  File "\14.2\portable_data\addons\weather.gismeteo\resources\lib\simpleweather.py", line 54, in run
    self._resolve_function()
  File "\14.2\portable_data\addons\script.module.simpleplugin3\libs\simpleplugin.py", line 1016, in _resolve_function
    return action_callable(self._params)
  File "\14.2\system\python\Lib\contextlib.py", line 35, in __exit__
    self.gen.throw(type, value, traceback)
  File "\14.2\portable_data\addons\script.module.simpleplugin3\libs\simpleplugin.py", line 136, in log_exception
    logger('OS info: {0}'.format(xbmc.getInfoLabel('System.OSVersionInfo')))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
-->End of Python script error report<--
Помогло добавление конвертации в юникод с помощью py2_decode

И еще вот такую ошибку выдает:
Код:
EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
 - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
Error Type: <type 'exceptions.TypeError'>
Error Contents: unsupported operand type(s) for -: 'int' and 'NoneType'
Traceback (most recent call last):
  File "\14.2\portable_data\addons\weather.gismeteo\default.py", line 698, in <module>
    weather.run()
  File "\14.2\portable_data\addons\weather.gismeteo\resources\lib\simpleweather.py", line 54, in run
    self._resolve_function()
  File "\14.2\portable_data\addons\script.module.simpleplugin3\libs\simpleplugin.py", line 1016, in _resolve_function
    return action_callable(self._params)
  File "\14.2\system\python\Lib\contextlib.py", line 35, in __exit__
    self.gen.throw(type, value, traceback)
  File "\14.2\portable_data\addons\script.module.simpleplugin3\libs\simpleplugin.py", line 142, in log_exception
    for i, line in enumerate(frame_info[4], frame_info[2] - frame_info[5]):
TypeError: unsupported operand type(s) for -: 'int' and 'NoneType'
-->End of Python script error report<--
В этот момент frame_info = (<frame object at 0x0F542450>, '<string>', 124, 'XML', None, None)
__________________
Репозиторий: https://github.com/vlmaksime/repository.vlmaksime/releases

Последний раз редактировалось vl.maksime; 10.02.2018 в 21:09.
vl.maksime вне форума   Ответить с цитированием
Старый 13.02.2018, 17:35   #45
Roman_V_M
Senior Member
 
Аватар для Roman_V_M
 
Регистрация: 12.06.2011
Адрес: Киев
Сообщений: 1,902
По умолчанию

Цитата:
И еще вот такую ошибку выдает:
Парсите XML при помощи cElementTree? Такое впечатление, что флаг ошибки ставится непосредственно в недрах С-шного кода. Надо бы предусмотреть такой случай.
__________________
Координатор русского перевода Kodi:
https://www.transifex.com/projects/p/kodi-main/
------------------------------
Raspberry PI 2 + LibreELEC 8 (Kodi 17)
Samsung Galaxy Tab A 10.1 + Kodi 17 for Android
------------------------------
Читаем и пополняем Википедию форума: http://xbmc.ru/wiki
------------------------------
На любые личные сообщения, не связанные с переводом Kodi, не отвечаю. Для обсуждений и советов есть форум.
Roman_V_M вне форума   Ответить с цитированием
Старый 13.02.2018, 18:49   #46
vl.maksime
Senior Member
 
Аватар для vl.maksime
 
Регистрация: 18.10.2015
Адрес: Donetsk, Ukraine
Сообщений: 357
По умолчанию

Цитата:
Сообщение от Roman_V_M Посмотреть сообщение
Парсите XML при помощи cElementTree?
Да. При инициализации использую предложенный Вами код:
Код:
import xml.etree.cElementTree as etree
try:
    etree.fromstring('<?xml version="1.0"?><foo><bar/></foo>')
except TypeError:
    import xml.etree.ElementTree as etree
И у дополнения проблемы совместимости с Android версией, но тут проблема при обращении к библиотеке "2to3", в момент инициализации модуля "past.types". Но для этого я уже создал отдельную тему на форме KODI: https://forum.kodi.tv/showthread.php?tid=328475
__________________
Репозиторий: https://github.com/vlmaksime/repository.vlmaksime/releases
vl.maksime вне форума   Ответить с цитированием
Старый 24.02.2018, 23:32   #47
vl.maksime
Senior Member
 
Аватар для vl.maksime
 
Регистрация: 18.10.2015
Адрес: Donetsk, Ukraine
Сообщений: 357
По умолчанию

Делаю новое дополнение с использованием RoutedPlugin, столкнулся с проблемой.
Хочу для сериалов сделать маршут вида "/tvshows/<show_id>", а для сезона сериала вид "/tvshows/<show_id>/<season_id>"

для этого в коде сделал так:
Код:
@plugin.route('/prog/<prog_id>')
def program_seasons(prog_id):
    pass

@plugin.route('/prog/<prog_id>/<archive_id>')
def program_episodes(prog_id, archive_id):
    pass
Но при переходе по ссылке "plugin://plugin.video.ntv.client/prog/balzakovskiy_vozrast/67560/" вызывается процедура "program_seasons" созначением параметра prog_id = "balzakovskiy_vozrast/67560".
Я не правильно использовал маршруты или маршрутизация отработала не правильно?
__________________
Репозиторий: https://github.com/vlmaksime/repository.vlmaksime/releases
vl.maksime вне форума   Ответить с цитированием
Старый 25.02.2018, 20:21   #48
Roman_V_M
Senior Member
 
Аватар для Roman_V_M
 
Регистрация: 12.06.2011
Адрес: Киев
Сообщений: 1,902
По умолчанию

Цитата:
Сообщение от vl.maksime Посмотреть сообщение
Делаю новое дополнение с использованием RoutedPlugin, столкнулся с проблемой.
Хочу для сериалов сделать маршут вида "/tvshows/<show_id>", а для сезона сериала вид "/tvshows/<show_id>/<season_id>"

для этого в коде сделал так:
Код:
@plugin.route('/prog/<prog_id>')
def program_seasons(prog_id):
    pass

@plugin.route('/prog/<prog_id>/<archive_id>')
def program_episodes(prog_id, archive_id):
    pass
Но при переходе по ссылке "plugin://plugin.video.ntv.client/prog/balzakovskiy_vozrast/67560/" вызывается процедура "program_seasons" созначением параметра prog_id = "balzakovskiy_vozrast/67560".
Я не правильно использовал маршруты или маршрутизация отработала не правильно?
Да, похоже, для нескольких переменных неправильно отрабатывает. Нужно править регексп, ищущий переменные.
__________________
Координатор русского перевода Kodi:
https://www.transifex.com/projects/p/kodi-main/
------------------------------
Raspberry PI 2 + LibreELEC 8 (Kodi 17)
Samsung Galaxy Tab A 10.1 + Kodi 17 for Android
------------------------------
Читаем и пополняем Википедию форума: http://xbmc.ru/wiki
------------------------------
На любые личные сообщения, не связанные с переводом Kodi, не отвечаю. Для обсуждений и советов есть форум.
Roman_V_M вне форума   Ответить с цитированием
Старый 25.02.2018, 20:23   #49
vl.maksime
Senior Member
 
Аватар для vl.maksime
 
Регистрация: 18.10.2015
Адрес: Donetsk, Ukraine
Сообщений: 357
По умолчанию

При тестировании на 3м питоне словил ошибку при использовании mem_cache
https://pastebin.com/3TkB4MMJ

Кэшируется результат функции _get_genres(). Если заменить mem_cache на cache, ошибка не возникает.
__________________
Репозиторий: https://github.com/vlmaksime/repository.vlmaksime/releases
vl.maksime вне форума   Ответить с цитированием
Ответ
 


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
script.module.torrent2http - движок стримминга торрентов. -=Vd=- Помощь по плагинам 106 Вчера 16:42
PyXBMCt - фреймворк для создания интерфейса плагинов Roman_V_M Поддержка локальной разработки модулей 22 28.03.2017 09:01
script.module.remote-pdb: удаленный консольный отладчик для плагинов Roman_V_M Поддержка локальной разработки модулей 18 06.10.2016 14:42
[All] script.module.antizapret - Обход блокировок для плагинов nightik Помощь по плагинам 24 15.06.2016 20:43
Библиотека для фото runkov Подсказки, описания и FAQ по XBMC 5 22.10.2010 11:29


Текущее время: 05:06. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.