Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Wetterdaten via darksky.net / forecast.io

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #61
    Ich verwende die Version 1.6 vom Darsky-Plugin und die Wettervorhersage wird bei meinem System nicht mehr aktualisiert.

    Die Daten in "currently" sind aktuell und korrekt. Hingegen die Daten in "daily/data" sind am 25.10.2019 stehen geblieben.

    Ich finde im Log keinerlei Fehlermeldungen. Ich habe für "day0" Datum/Zeit extrahiert und erhalte folgende Daten:

    current: Mon 04.11.2019 19:30 1572892226
    date 0 : Fre 25.10.2019 1571954400


    Wenn ich versuche über das Backend die Webseite des Plugin zu öffnen, sehe ich folgende Fehlermeldung: Oops, Error 500: The server encountered an unexpected condition which prevented it from fulfilling the request.

    Hat jemand eine Idee ?

    Kommentar


      #62
      Es gibt keine daily/data mehr. Guck bitte in die plugin.yaml bzw. nutze struct: darksky.weather

      Bezüglich Problem mit WebIF fällt mir maximal ein, dass du mal den Cache löschen könntest.

      Kommentar


        #63
        Danke für den Hinweis. Habe mir die anderen Dateien im Plugin-Verzeichnis angeschaut, aber nicht das plugin.yaml.

        Leider funktioniert die Sache aber nicht bei mir. Im Backend sehe ich, dass zum Beispiel "daily.summary" korrekt alle 5min aktualisiert wird. In "day0" hingegen passiert überhaupt nichts. "daily.day0.time_epoch" wird nicht aktualisiert. Warum ?

        Das Löschen vom Cache für das Backend hat leider nichts gebracht. Es kommt immer die obige Fehlermeldung.

        Kommentar


          #64
          Fehler gefunden. Ich musste in meinem plugin.yaml die Erweiterung "@instance" weglassen. Vielleicht habe ich da etwas in meiner Initialisierung des Plugin nicht drin.

          Nun sehe ich die Wettervorhersage zwar, aber die Reihenfolge der Tage stimmt nicht (day0 bis day7):
          Don 07.11.2019 1.43 °C 7.65 °C 1006.4 hPa
          Mon 11.11.2019 0.58 °C 4.42 °C 1007.8 hPa
          Fre 08.11.2019 1.83 °C 5.75 °C 1006.7 hPa
          Mit 06.11.2019 4.89 °C 7.69 °C 1006.1 hPa
          Die 12.11.2019 0 °C 3.26 °C 1003.7 hPa
          Son 10.11.2019 -1.25 °C 5.14 °C 1008.5 hPa
          Die 05.11.2019 5.05 °C 10.5 °C 1000.2 hPa
          Sam 09.11.2019 1.16 °C 4.65 °C 1011.7 hPa
          "day0" ist hier Donnerstag 7.11.19 - müsste eigentlich Dienstag 5.11.19 sein. Das Backend zeigt diese Daten auch in dieser falschen Reihenfolge.

          Kommentar


            #65
            Bei mir stimmen die Tage und auch die Vorhersagen (verglichen mit der Webseite). Wie bindest du die Items denn ein?
            Mach einfach ein wetter.yaml mit diesem Inhalt:
            Code:
            darksky:
                struct: darksky.weather

            Kommentar


              #66
              Hier ein Teil meiner yaml:

              HTML-Code:
              Wetter_WB:
              
                  daily:
              
                      day0:
                          time_epoch:
                              type: num
                              ds_matchstring: daily/day0/time
                          date:
                              type: str
                              eval_trigger: ..time_epoch
                              eval: datetime.datetime.fromtimestamp(sh...time_epoch()).strftime('%a %d.%m.%Y')
                              
                      day1:
                          time_epoch:
                              type: num
                              ds_matchstring: daily/day1/time
                          date:
                              type: str
                              eval_trigger: ..time_epoch
                              eval: datetime.datetime.fromtimestamp(sh...time_epoch()).strftime('%a %d.%m.%Y')
              Wenn ich nun im Backend die Daten anschaue, erhalte ich:

              HTML-Code:
              Wetter_WB.daily.day0.date : Don 07.11.2019
              Wetter_WB.daily.day1.date : Mon 11.11.2019
              Diese yaml hatte mit dem alten "data" einwandfrei funktioniert. Mit dem neuen Plugin stimmt nun die Reihenfolge leider nicht mehr.

              Kommentar


                #67
                Probiere doch trotzdem mal die struct aus. Sollte auch parallel zu den alten items gehen...

                Kommentar


                  #68
                  Habe den struct "wetter_darksky" mal zusätzlich eingefügt.

                  wetter_darksky.daily.day0.time_epoch = 1573254000
                  Wetter_WB.daily.day0.time_epoch = 1573254000 (Sam 09.11.2019)

                  Somit zeigen struct und meine alte Struktur für "day0" heute morgen nach dem Neustart vom System den 9.11.19 an, was falsch ist.

                  Kommentar


                    #69
                    Habe ein komplett neues Testsystem auf Basis der aktuellen Develop-Version aufgesetzt und dort meine yaml getestet. In diesem System stimmt die Reihenfolge der Tage. Somit muss mein aktuelles System irgendwo ein Problem haben.

                    Im Backend kann ich aber weiterhin die Webseite vom Darksky-Plugin nicht aufrufen. Es kommt folgender Fehler: Oops, Error 500.

                    Im Log-File sehe ich folgendes:

                    HTML-Code:
                    2019-11-10  19:37:16 INFO     CP Server Thread-14 192.168.10.69 - - [10/Nov/2019:19:37:16] "GET /backend/system.html HTTP/1.1" 200 18957 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
                    2019-11-10  19:37:17 INFO     CP Server Thread-7 192.168.10.69 - - [10/Nov/2019:19:37:17] "GET /gstatic/css/smarthomeng.css HTTP/1.1" 200 4959 "http://192.168.10.152:8383/backend/system.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
                    2019-11-10  19:37:17 INFO     CP Server Thread-16 test_requirements: filepath '/usr/local/smarthome/requirements/base.txt' is checked
                    2019-11-10  19:37:17 INFO     CP Server Thread-16 test_requirements: filepath '/usr/local/smarthome/requirements/conf-all.txt' is checked
                    2019-11-10  19:37:19 INFO     CP Server Thread-15 Loading '/usr/local/smarthome/etc/plugin.yaml' to 'OrderedDict'
                    2019-11-10  19:37:20 INFO     CP Server Thread-15 plugin 'backend': Metadata get_plugin_function_defstrings -> '[]'
                    2019-11-10  19:37:20 INFO     CP Server Thread-15 plugin 'darksky': Metadata get_plugin_function_defstrings -> '['map_icon(icon)']'
                    2019-11-10  19:37:20 INFO     CP Server Thread-15 plugin 'darksky': Metadata get_plugin_function_defstrings -> '['map_icon(icon)']'
                    2019-11-10  19:37:20 INFO     CP Server Thread-15 plugin 'database': Metadata get_plugin_function_defstrings -> '['cleanup()', 'db()', 'deleteItem(id)', 'deleteLog(id, time, time_start, time_end, changed, changed_start, changed_end, cur)', 'dump(dumpfile, id, time, time_start, time_end, changed, changed_start, changed_end, cur)', 'id(item)', 'insertItem(name, cur)', 'insertLog(id, time, duration, val, it, changed, cur)', 'readItem(id, cur)', 'readItems(id, cur)', 'readLog(id, time)', 'readLogs(id, time, time_start, time_end, changed, changed_start, changed_end, cur)', 'updateItem(id, time, duration, val, it, changed, cur)', 'updateLog(id, time, duration, val, it, changed, cur)']'
                    2019-11-10  19:37:20 INFO     CP Server Thread-15 plugin 'database': Metadata get_plugin_function_defstrings -> '['cleanup()', 'db()', 'deleteItem(id)', 'deleteLog(id, time, time_start, time_end, changed, changed_start, changed_end, cur)', 'dump(dumpfile, id, time, time_start, time_end, changed, changed_start, changed_end, cur)', 'id(item)', 'insertItem(name, cur)', 'insertLog(id, time, duration, val, it, changed, cur)', 'readItem(id, cur)', 'readItems(id, cur)', 'readLog(id, time)', 'readLogs(id, time, time_start, time_end, changed, changed_start, changed_end, cur)', 'updateItem(id, time, duration, val, it, changed, cur)', 'updateLog(id, time, duration, val, it, changed, cur)']'
                    2019-11-10  19:37:20 INFO     CP Server Thread-15 plugin 'knx': Metadata get_plugin_function_defstrings -> '['encode(data, dpt)', 'groupread(ga, cache=False)', 'groupwrite(ga, data, dpt)', 'send_time(time_ga, date_ga)']'
                    2019-11-10  19:37:20 INFO     CP Server Thread-15 plugin 'knx': Metadata get_plugin_function_defstrings -> '['encode(data, dpt)', 'groupread(ga, cache=False)', 'groupwrite(ga, data, dpt)', 'send_time(time_ga, date_ga)']'
                    2019-11-10  19:37:20 INFO     CP Server Thread-15 plugin 'kostal': Metadata get_plugin_function_defstrings -> '[]'
                    2019-11-10  19:37:20 INFO     CP Server Thread-15 plugin 'visu_websocket': Metadata get_plugin_function_defstrings -> '["url(url, clientip= '')"]'
                    2019-11-10  19:37:20 INFO     CP Server Thread-15 plugin 'visu_websocket': Metadata get_plugin_function_defstrings -> '["url(url, clientip= '')"]'
                    2019-11-10  19:37:20 INFO     CP Server Thread-15 192.168.10.69 - - [10/Nov/2019:19:37:20] "GET /backend/plugins.html HTTP/1.1" 200 57739 "http://192.168.10.152:8383/backend/system.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
                    2019-11-10  19:37:20 INFO     CP Server Thread-10 192.168.10.69 - - [10/Nov/2019:19:37:20] "GET /gstatic/codemirror/addon/dialog/dialog.css HTTP/1.1" 200 507 "http://192.168.10.152:8383/backend/plugins.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
                    2019-11-10  19:37:20 INFO     CP Server Thread-12 192.168.10.69 - - [10/Nov/2019:19:37:20] "GET /gstatic/codemirror/addon/fold/foldgutter.css HTTP/1.1" 200 435 "http://192.168.10.152:8383/backend/plugins.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
                    2019-11-10  19:37:20 INFO     CP Server Thread-8 192.168.10.69 - - [10/Nov/2019:19:37:20] "GET /gstatic/codemirror/addon/search/matchesonscrollbar.css HTTP/1.1" 200 188 "http://192.168.10.152:8383/backend/plugins.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
                    2019-11-10  19:37:20 INFO     CP Server Thread-13 192.168.10.69 - - [10/Nov/2019:19:37:20] "GET /gstatic/css/smarthomeng.css HTTP/1.1" 200 4959 "http://192.168.10.152:8383/backend/plugins.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
                    2019-11-10  19:37:20 INFO     CP Server Thread-14 192.168.10.69 - - [10/Nov/2019:19:37:20] "GET /gstatic/bootstrap-treeview/bootstrap-treeview.css HTTP/1.1" 200 1283 "http://192.168.10.152:8383/backend/plugins.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
                    2019-11-10  19:37:20 INFO     CP Server Thread-7 192.168.10.69 - - [10/Nov/2019:19:37:20] "GET /gstatic/img/plugin_system.svg HTTP/1.1" 200 74430 "http://192.168.10.152:8383/backend/plugins.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
                    2019-11-10  19:37:30 ERROR    CP Server Thread-10 [10/Nov/2019:19:37:30] HTTP
                    Traceback (most recent call last):
                      File "/usr/local/lib/python3.7/dist-packages/cherrypy/_cprequest.py", line 638, in respond
                        self._do_respond(path_info)
                      File "/usr/local/lib/python3.7/dist-packages/cherrypy/_cprequest.py", line 697, in _do_respond
                        response.body = self.handler()
                      File "/usr/local/lib/python3.7/dist-packages/cherrypy/lib/encoding.py", line 219, in __call__
                        self.body = self.oldhandler(*args, **kwargs)
                      File "/usr/local/lib/python3.7/dist-packages/cherrypy/_cpdispatch.py", line 54, in __call__
                        return self.callable(*self.args, **self.kwargs)
                      File "/usr/local/smarthome/plugins/darksky/__init__.py", line 390, in index
                        plugin_info=self.plugin.get_info(), p=self.plugin, json_data=pf.replace('\n', '<br>').replace(' ', '&nbsp;'),)
                      File "/usr/local/lib/python3.7/dist-packages/jinja2/asyncsupport.py", line 76, in render
                        return original_render(self, *args, **kwargs)
                      File "/usr/local/lib/python3.7/dist-packages/jinja2/environment.py", line 1008, in render
                        return self.environment.handle_exception(exc_info, True)
                      File "/usr/local/lib/python3.7/dist-packages/jinja2/environment.py", line 780, in handle_exception
                        reraise(exc_type, exc_value, tb)
                      File "/usr/local/lib/python3.7/dist-packages/jinja2/_compat.py", line 37, in reraise
                        raise value.with_traceback(tb)
                      File "/usr/local/smarthome/plugins/darksky/webif/templates/index.html", line 7, in top-level template code
                        {% set tab2title = 'JSON Data' %}
                      File "/usr/local/lib/python3.7/dist-packages/jinja2/environment.py", line 1005, in render
                        return concat(self.root_render_func(self.new_context(vars)))
                      File "/usr/local/smarthome/plugins/darksky/webif/templates/index.html", line 30, in root
                        <tr id="{{ loop.index }}_click">
                      File "/usr/local/smarthome/modules/http/webif/gtemplates/base_plugin.html", line 18, in root
                        <img src="static/img/plugin_logo.png" style="object-fit:contain; width:100%; height:100%; margin-left: auto; margin-right: auto; display: block;">
                      File "/usr/local/smarthome/modules/http/webif/gtemplates/base.html", line 10, in root
                        <meta name="apple-mobile-web-app-status-bar-style" content="black" />
                      File "/usr/local/smarthome/modules/http/webif/gtemplates/base.html", line 20, in block_doc
                      File "/usr/local/smarthome/modules/http/webif/gtemplates/base.html", line 39, in block_html
                        {%- endblock styles %}
                      File "/usr/local/smarthome/modules/http/webif/gtemplates/base.html", line 95, in block_body
                      File "/usr/local/smarthome/modules/http/webif/gtemplates/base_plugin.html", line 209, in block_content
                      File "/usr/local/smarthome/plugins/darksky/webif/templates/index.html", line 54, in block_bodytab1
                      File "/usr/local/lib/python3.7/dist-packages/jinja2/environment.py", line 430, in getattr
                        return getattr(obj, attribute)
                    jinja2.exceptions.UndefinedError: 'list object' has no attribute 'property'
                    2019-11-10  19:37:30 INFO     CP Server Thread-10 [10/Nov/2019:19:37:30] HTTP
                    Request Headers:
                      Remote-Addr: 192.168.10.69
                      HOST: 192.168.10.152:8383
                      USER-AGENT: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
                      ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
                      ACCEPT-LANGUAGE: de,en-US;q=0.7,en;q=0.3
                      ACCEPT-ENCODING: gzip, deflate
                      REFERER: http://192.168.10.152:8383/backend/plugins.html
                      CONNECTION: keep-alive
                      UPGRADE-INSECURE-REQUESTS: 1
                    2019-11-10  19:37:30 INFO     CP Server Thread-10 192.168.10.69 - - [10/Nov/2019:19:37:30] "GET /darksky/ HTTP/1.1" 500 3905 "http://192.168.10.152:8383/backend/plugins.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"
                    2019-11-10  19:37:40 WARNING  CP Server Thread-16 get_requirements_info: get_packagelist = [{'name': 'cherrypy', 'vers_installed': '18.4.0', 'is_required': True, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '1', 'sort': '1cherrypy', 'vers_req_min': '8.1.2', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '18.4.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/cherrypy'}, {'name': 'ephem', 'vers_installed': '3.7.7.0', 'is_required': True, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '1', 'sort': '1ephem', 'vers_req_min': '3.7', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '3.7.7.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/ephem'}, {'name': 'jinja2', 'vers_installed': '2.10.3', 'is_required': True, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '1', 'sort': '1jinja2', 'vers_req_min': '2.9', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '2.10.3', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/jinja2'}, {'name': 'psutil', 'vers_installed': '5.6.5', 'is_required': True, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '1', 'sort': '1psutil', 'vers_req_min': '*', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '5.6.5', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/psutil'}, {'name': 'pyjwt', 'vers_installed': '1.7.1', 'is_required': True, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '1', 'sort': '1pyjwt', 'vers_req_min': '1.6.4', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '1.7.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pyjwt'}, {'name': 'python-dateutil', 'vers_installed': '2.8.1', 'is_required': True, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '1', 'sort': '1python-dateutil', 'vers_req_min': '2.5.3', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '2.8.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/python-dateutil'}, {'name': 'requests', 'vers_installed': '2.22.0', 'is_required': True, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '1', 'sort': '1requests', 'vers_req_min': '2.20.1', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '2.22.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/requests'}, {'name': 'ruamel.yaml', 'vers_installed': '0.15.74', 'is_required': True, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '1', 'sort': '1ruamel.yaml', 'vers_req_min': '0.15.0', 'vers_req_max': '0.15.74', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': True, 'vers_recent': False, 'pypi_version': '0.16.5', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/ruamel.yaml'}, {'name': 'numpy', 'vers_installed': '1.17.3', 'is_required': False, 'is_required_for_plugins': True, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '3', 'sort': '3numpy', 'vers_req_min': '*', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '1.17.3', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/numpy'}, {'name': 'pyserial', 'vers_installed': '3.4', 'is_required': False, 'is_required_for_plugins': True, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '3', 'sort': '3pyserial', 'vers_req_min': '3.4.0', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '3.4', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pyserial'}, {'name': 'requests-oauthlib', 'vers_installed': '1.3.0', 'is_required': False, 'is_required_for_plugins': True, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '3', 'sort': '3requests-oauthlib', 'vers_req_min': '1.0', 'vers_req_max': '1.1', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.3.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/requests-oauthlib'}, {'name': 'beautifulsoup4', 'vers_installed': '4.8.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': True, 'is_required_for_docbuild': False, 'required_group': '4', 'sort': '4beautifulsoup4', 'vers_req_min': '4.1.0', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '4.8.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/beautifulsoup4'}, {'name': 'betamax', 'vers_installed': '-', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': True, 'is_required_for_docbuild': False, 'required_group': '4', 'sort': '4betamax', 'vers_req_min': '0.5.1', 'vers_req_max': '0.5.1', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': False, 'pypi_version': '0.8.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/betamax'}, {'name': 'coveralls', 'vers_installed': '-', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': True, 'is_required_for_docbuild': False, 'required_group': '4', 'sort': '4coveralls', 'vers_req_min': '1.1', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': False, 'pypi_version': '1.8.2', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/coveralls'}, {'name': 'flake8', 'vers_installed': '-', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': True, 'is_required_for_docbuild': False, 'required_group': '4', 'sort': '4flake8', 'vers_req_min': '2.5.1', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': False, 'pypi_version': '3.7.9', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/flake8'}, {'name': 'pydocstyle', 'vers_installed': '-', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': True, 'is_required_for_docbuild': False, 'required_group': '4', 'sort': '4pydocstyle', 'vers_req_min': '1.0.0', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': False, 'pypi_version': '4.0.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pydocstyle'}, {'name': 'pylint', 'vers_installed': '2.4.3', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': True, 'is_required_for_docbuild': False, 'required_group': '4', 'sort': '4pylint', 'vers_req_min': '1.5.3', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '2.4.3', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pylint'}, {'name': 'pytest', 'vers_installed': '-', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': True, 'is_required_for_docbuild': False, 'required_group': '4', 'sort': '4pytest', 'vers_req_min': '3.6.0', 'vers_req_max': '3.6.0', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': False, 'pypi_version': '5.2.2', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pytest'}, {'name': 'pytest-cov', 'vers_installed': '-', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': True, 'is_required_for_docbuild': False, 'required_group': '4', 'sort': '4pytest-cov', 'vers_req_min': '2.2.0', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': False, 'pypi_version': '2.8.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pytest-cov'}, {'name': 'pytest-timeout', 'vers_installed': '-', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': True, 'is_required_for_docbuild': False, 'required_group': '4', 'sort': '4pytest-timeout', 'vers_req_min': '1.0.0', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': False, 'pypi_version': '1.3.3', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pytest-timeout'}, {'name': 'recommonmark', 'vers_installed': '-', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': True, 'required_group': '5', 'sort': '5recommonmark', 'vers_req_min': '*', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': False, 'pypi_version': '0.6.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/recommonmark'}, {'name': 'sphinx', 'vers_installed': '-', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': True, 'required_group': '5', 'sort': '5sphinx', 'vers_req_min': '*', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': False, 'pypi_version': '2.2.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/sphinx'}, {'name': 'sphinx-rtd-theme', 'vers_installed': '-', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': True, 'required_group': '5', 'sort': '5sphinx-rtd-theme', 'vers_req_min': '*', 'vers_req_max': '*', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': False, 'pypi_version': '0.4.3', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/sphinx-rtd-theme'}, {'name': 'asn1crypto', 'vers_installed': '1.2.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6asn1crypto', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.2.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/asn1crypto'}, {'name': 'astroid', 'vers_installed': '2.3.3', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6astroid', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.3.3', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/astroid'}, {'name': 'asttokens', 'vers_installed': '2.0.2', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6asttokens', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.0.2', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/asttokens'}, {'name': 'automationhat', 'vers_installed': '0.2.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6automationhat', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.2.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/automationhat'}, {'name': 'blinker', 'vers_installed': '1.4', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6blinker', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.4', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/blinker'}, {'name': 'blinkt', 'vers_installed': '0.1.2', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6blinkt', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.1.2', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/blinkt'}, {'name': 'buttonshim', 'vers_installed': '0.0.2', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6buttonshim', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.0.2', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/buttonshim'}, {'name': 'cap1xxx', 'vers_installed': '0.1.3', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6cap1xxx', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.1.3', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/cap1xxx'}, {'name': 'certifi', 'vers_installed': '2019.9.11', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6certifi', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2019.9.11', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/certifi'}, {'name': 'cffi', 'vers_installed': '1.13.2', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6cffi', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.13.2', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/cffi'}, {'name': 'chardet', 'vers_installed': '3.0.4', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6chardet', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.0.4', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/chardet'}, {'name': 'cheroot', 'vers_installed': '8.2.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6cheroot', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '8.2.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/cheroot'}, {'name': 'click', 'vers_installed': '7.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6click', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '7.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/click'}, {'name': 'colorama', 'vers_installed': '0.4.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6colorama', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.4.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/colorama'}, {'name': 'colorzero', 'vers_installed': '1.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6colorzero', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/colorzero'}, {'name': 'cookies', 'vers_installed': '2.2.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6cookies', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.2.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/cookies'}, {'name': 'cryptography', 'vers_installed': '2.8', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6cryptography', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.8', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/cryptography'}, {'name': 'docutils', 'vers_installed': '0.15.2', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6docutils', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.15.2', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/docutils'}, {'name': 'drumhat', 'vers_installed': '0.1.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6drumhat', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.1.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/drumhat'}, {'name': 'entrypoints', 'vers_installed': '0.3', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6entrypoints', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.3', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/entrypoints'}, {'name': 'envirophat', 'vers_installed': '1.0.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6envirophat', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.0.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/envirophat'}, {'name': 'explorerhat', 'vers_installed': '0.4.2', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6explorerhat', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.4.2', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/explorerhat'}, {'name': 'flask', 'vers_installed': '1.1.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6flask', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.1.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/flask'}, {'name': 'fourletterphat', 'vers_installed': '0.1.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6fourletterphat', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.1.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/fourletterphat'}, {'name': 'gpiozero', 'vers_installed': '1.5.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6gpiozero', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.5.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/gpiozero'}, {'name': 'html5lib', 'vers_installed': '1.0.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6html5lib', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.0.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/html5lib'}, {'name': 'idna', 'vers_installed': '2.8', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6idna', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.8', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/idna'}, {'name': 'isort', 'vers_installed': '4.3.21', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6isort', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '4.3.21', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/isort'}, {'name': 'itsdangerous', 'vers_installed': '1.1.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6itsdangerous', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.1.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/itsdangerous'}, {'name': 'jaraco.functools', 'vers_installed': '2.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6jaraco.functools', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/jaraco.functools'}, {'name': 'jedi', 'vers_installed': '0.15.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6jedi', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.15.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/jedi'}, {'name': 'jeepney', 'vers_installed': '0.4.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6jeepney', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.4.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/jeepney'}, {'name': 'keyring', 'vers_installed': '19.2.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6keyring', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '19.2.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/keyring'}, {'name': 'keyrings.alt', 'vers_installed': '3.1.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6keyrings.alt', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.1.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/keyrings.alt'}, {'name': 'lazy-object-proxy', 'vers_installed': '1.4.3', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6lazy-object-proxy', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.4.3', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/lazy-object-proxy'}, {'name': 'logilab-common', 'vers_installed': '1.4.4', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6logilab-common', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.4.4', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/logilab-common'}, {'name': 'lxml', 'vers_installed': '4.4.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6lxml', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '4.4.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/lxml'}, {'name': 'mako', 'vers_installed': '1.1.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6mako', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.1.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/mako'}, {'name': 'markdown', 'vers_installed': '3.1.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6markdown', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.1.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/markdown'}, {'name': 'markupsafe', 'vers_installed': '1.1.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6markupsafe', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.1.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/markupsafe'}, {'name': 'mccabe', 'vers_installed': '0.6.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6mccabe', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.6.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/mccabe'}, {'name': 'microdotphat', 'vers_installed': '0.2.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6microdotphat', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.2.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/microdotphat'}, {'name': 'more-itertools', 'vers_installed': '7.2.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6more-itertools', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '7.2.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/more-itertools'}, {'name': 'mote', 'vers_installed': '0.0.4', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6mote', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.0.4', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/mote'}, {'name': 'motephat', 'vers_installed': '0.0.2', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6motephat', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.0.2', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/motephat'}, {'name': 'mypy', 'vers_installed': '0.740', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6mypy', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.740', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/mypy'}, {'name': 'mypy-extensions', 'vers_installed': '0.4.3', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6mypy-extensions', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.4.3', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/mypy-extensions'}, {'name': 'oauthlib', 'vers_installed': '3.1.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6oauthlib', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.1.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/oauthlib'}, {'name': 'olefile', 'vers_installed': '0.46', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6olefile', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.46', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/olefile'}, {'name': 'pantilthat', 'vers_installed': '0.0.7', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pantilthat', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.0.7', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pantilthat'}, {'name': 'parso', 'vers_installed': '0.5.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6parso', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.5.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/parso'}, {'name': 'pgzero', 'vers_installed': '1.2', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pgzero', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.2', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pgzero'}, {'name': 'phatbeat', 'vers_installed': '0.1.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6phatbeat', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.1.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/phatbeat'}, {'name': 'pianohat', 'vers_installed': '0.1.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pianohat', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.1.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pianohat'}, {'name': 'picamera', 'vers_installed': '1.13', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6picamera', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.13', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/picamera'}, {'name': 'picraft', 'vers_installed': '1.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6picraft', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/picraft'}, {'name': 'piglow', 'vers_installed': '1.2.5', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6piglow', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.2.5', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/piglow'}, {'name': 'pigpio', 'vers_installed': '1.44', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pigpio', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.44', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pigpio'}, {'name': 'pillow', 'vers_installed': '6.2.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pillow', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '6.2.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pillow'}, {'name': 'pip', 'vers_installed': '19.3.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pip', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '19.3.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pip'}, {'name': 'portend', 'vers_installed': '2.6', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6portend', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.6', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/portend'}, {'name': 'pycairo', 'vers_installed': '1.18.2', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pycairo', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.18.2', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pycairo'}, {'name': 'pycparser', 'vers_installed': '2.19', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pycparser', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.19', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pycparser'}, {'name': 'pycrypto', 'vers_installed': '2.6.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pycrypto', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.6.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pycrypto'}, {'name': 'pygame', 'vers_installed': '1.9.6', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pygame', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.9.6', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pygame'}, {'name': 'pygments', 'vers_installed': '2.4.2', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pygments', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.4.2', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pygments'}, {'name': 'pygobject', 'vers_installed': '3.34.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pygobject', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.34.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pygobject'}, {'name': 'pyinotify', 'vers_installed': '0.9.6', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pyinotify', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.9.6', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pyinotify'}, {'name': 'pymysql', 'vers_installed': '0.9.3', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pymysql', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.9.3', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pymysql'}, {'name': 'pyopenssl', 'vers_installed': '19.0.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pyopenssl', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '19.0.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pyopenssl'}, {'name': 'python-apt', 'vers_installed': '1.8.4', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6python-apt', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': False, 'pypi_version': '0.7.8', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/python-apt'}, {'name': 'pytz', 'vers_installed': '2019.3', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pytz', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2019.3', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pytz'}, {'name': 'pyxdg', 'vers_installed': '0.26', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pyxdg', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.26', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pyxdg'}, {'name': 'pyyaml', 'vers_installed': '5.1.2', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6pyyaml', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '5.1.2', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pyyaml'}, {'name': 'rainbowhat', 'vers_installed': '0.1.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6rainbowhat', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.1.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/rainbowhat'}, {'name': 'responses', 'vers_installed': '0.10.6', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6responses', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.10.6', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/responses'}, {'name': 'roman', 'vers_installed': '3.2', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6roman', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.2', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/roman'}, {'name': 'rpi.gpio', 'vers_installed': '0.7.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6rpi.gpio', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.7.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/rpi.gpio'}, {'name': 'rtimulib', 'vers_installed': '7.2.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6rtimulib', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '7.2.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/rtimulib'}, {'name': 'scrollphat', 'vers_installed': '0.0.7', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6scrollphat', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.0.7', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/scrollphat'}, {'name': 'scrollphathd', 'vers_installed': '1.2.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6scrollphathd', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.2.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/scrollphathd'}, {'name': 'secretstorage', 'vers_installed': '3.1.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6secretstorage', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.1.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/secretstorage'}, {'name': 'send2trash', 'vers_installed': '1.5.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6send2trash', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.5.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/send2trash'}, {'name': 'sense-hat', 'vers_installed': '2.2.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6sense-hat', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.2.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/sense-hat'}, {'name': 'setuptools', 'vers_installed': '41.6.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6setuptools', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '41.6.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/setuptools'}, {'name': 'simplejson', 'vers_installed': '3.16.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6simplejson', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.16.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/simplejson'}, {'name': 'six', 'vers_installed': '1.13.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6six', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.13.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/six'}, {'name': 'skywriter', 'vers_installed': '0.0.7', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6skywriter', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.0.7', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/skywriter'}, {'name': 'sn3218', 'vers_installed': '1.2.7', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6sn3218', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.2.7', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/sn3218'}, {'name': 'soupsieve', 'vers_installed': '1.9.5', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6soupsieve', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.9.5', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/soupsieve'}, {'name': 'spidev', 'vers_installed': '3.4', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6spidev', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.4', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/spidev'}, {'name': 'ssh-import-id', 'vers_installed': '5.7', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6ssh-import-id', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': False, 'pypi_version': '5.6', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/ssh-import-id'}, {'name': 'tempora', 'vers_installed': '1.14.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6tempora', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.14.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/tempora'}, {'name': 'thonny', 'vers_installed': '3.2.3', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6thonny', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.2.3', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/thonny'}, {'name': 'touchphat', 'vers_installed': '0.0.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6touchphat', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.0.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/touchphat'}, {'name': 'twython', 'vers_installed': '3.7.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6twython', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.7.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/twython'}, {'name': 'typed-ast', 'vers_installed': '1.4.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6typed-ast', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.4.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/typed-ast'}, {'name': 'typing-extensions', 'vers_installed': '3.7.4.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6typing-extensions', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.7.4.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/typing-extensions'}, {'name': 'unicornhathd', 'vers_installed': '0.0.4', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6unicornhathd', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.0.4', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/unicornhathd'}, {'name': 'urllib3', 'vers_installed': '1.25.6', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6urllib3', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.25.6', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/urllib3'}, {'name': 'webencodings', 'vers_installed': '0.5.1', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6webencodings', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.5.1', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/webencodings'}, {'name': 'werkzeug', 'vers_installed': '0.16.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6werkzeug', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.16.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/werkzeug'}, {'name': 'wheel', 'vers_installed': '0.33.6', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6wheel', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.33.6', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/wheel'}, {'name': 'wrapt', 'vers_installed': '1.11.2', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6wrapt', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.11.2', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/wrapt'}, {'name': 'zc.lockfile', 'vers_installed': '2.0', 'is_required': False, 'is_required_for_plugins': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '6', 'sort': '6zc.lockfile', 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.0', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/zc.lockfile'}]
                    2019-11-10  19:37:40 INFO     CP Server Thread-16 Loading '/usr/local/smarthome/etc/plugin.yaml' to 'OrderedDict'
                    2019-11-10  19:38:00 WARNING  CP Server Thread-16 req_dict: {'cherrypy': '>=8.1.2', 'ephem': '>=3.7', 'jinja2': '>=2.9', 'psutil': '==*', 'pyjwt': '>=1.6.4', 'python-dateutil': '>=2.5.3<br/>>=2.5.3 (backend)', 'requests': '>=2.20.0', 'ruamel.yaml': ">=0.13.7,<=0.15.74;python_version<'3.7' | >0.15.0,<=0.15.74;python_version>='3.7'"}
                    2019-11-10  19:38:00 WARNING  CP Server Thread-16 pkgname_list: ['zc.lockfile', 'wrapt', 'wheel', 'werkzeug', 'urllib3', 'typing-extensions', 'typed-ast', 'thonny', 'tempora', 'spidev', 'soupsieve', 'six', 'setuptools', 'secretstorage', 'ruamel.yaml', 'roman', 'responses', 'requests', 'requests-oauthlib', 'pyyaml', 'pyxdg', 'pytz', 'python-dateutil', 'pymysql', 'pylint', 'pyjwt', 'pygobject', 'pygments', 'pygame', 'pycparser', 'pycairo', 'psutil', 'portend', 'pip', 'pillow', 'parso', 'oauthlib', 'numpy', 'mypy', 'mypy-extensions', 'more-itertools', 'markupsafe', 'markdown', 'mako', 'lxml', 'logilab-common', 'lazy-object-proxy', 'keyring', 'jinja2', 'jeepney', 'jedi', 'jaraco.functools', 'itsdangerous', 'isort', 'idna', 'flask', 'ephem', 'envirophat', 'docutils', 'cryptography', 'colorama', 'cherrypy', 'cheroot', 'chardet', 'cffi', 'certifi', 'beautifulsoup4', 'asttokens', 'astroid', 'asn1crypto', 'webencodings', 'unicornhathd', 'twython', 'touchphat', 'ssh-import-id', 'sn3218', 'skywriter', 'simplejson', 'sense-hat', 'send2trash', 'scrollphathd', 'scrollphat', 'rtimulib', 'rpi.gpio', 'rainbowhat', 'python-apt', 'pyserial', 'pyopenssl', 'pyinotify', 'pycrypto', 'pigpio', 'piglow', 'picraft', 'picamera', 'pianohat', 'phatbeat', 'pgzero', 'pantilthat', 'olefile', 'motephat', 'mote', 'microdotphat', 'mccabe', 'keyrings.alt', 'html5lib', 'gpiozero', 'fourletterphat', 'explorerhat', 'entrypoints', 'drumhat', 'cookies', 'colorzero', 'click', 'cap1xxx', 'buttonshim', 'blinkt', 'blinker', 'automationhat']
                    2019-11-10  19:38:00 WARNING  CP Server Thread-16 package_list: [{'name': 'zc.lockfile', 'vers_installed': '2.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/zc.lockfile', 'sort': '4zc.lockfile'}, {'name': 'wrapt', 'vers_installed': '1.11.2', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.11.2', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/wrapt', 'sort': '4wrapt'}, {'name': 'wheel', 'vers_installed': '0.33.6', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.33.6', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/wheel', 'sort': '4wheel'}, {'name': 'werkzeug', 'vers_installed': '0.16.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.16.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/Werkzeug', 'sort': '4werkzeug'}, {'name': 'urllib3', 'vers_installed': '1.25.6', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.25.6', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/urllib3', 'sort': '4urllib3'}, {'name': 'typing-extensions', 'vers_installed': '3.7.4.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.7.4.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/typing-extensions', 'sort': '4typing-extensions'}, {'name': 'typed-ast', 'vers_installed': '1.4.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.4.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/typed-ast', 'sort': '4typed-ast'}, {'name': 'thonny', 'vers_installed': '3.2.3', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.2.3', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/thonny', 'sort': '4thonny'}, {'name': 'tempora', 'vers_installed': '1.14.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.14.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/tempora', 'sort': '4tempora'}, {'name': 'spidev', 'vers_installed': '3.4', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.4', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/spidev', 'sort': '4spidev'}, {'name': 'soupsieve', 'vers_installed': '1.9.5', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.9.5', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/soupsieve', 'sort': '4soupsieve'}, {'name': 'six', 'vers_installed': '1.13.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.13.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/six', 'sort': '4six'}, {'name': 'setuptools', 'vers_installed': '41.6.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '41.6.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/setuptools', 'sort': '4setuptools'}, {'name': 'secretstorage', 'vers_installed': '3.1.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.1.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/SecretStorage', 'sort': '4secretstorage'}, {'name': 'ruamel.yaml', 'vers_installed': '0.15.74', 'is_required': True, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '>0.15.0', 'vers_req_max': '0.15.74', 'vers_req_msg': '', 'vers_req_source': ">=0.13.7,<=0.15.74;python_version<'3.7' | >0.15.0,<=0.15.74;python_version>='3.7'", 'vers_ok': True, 'vers_recent': True, 'pypi_version': '0.16.5', 'pypi_version_ok': False, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/ruamel.yaml', 'sort': '1ruamel.yaml'}, {'name': 'roman', 'vers_installed': '3.2', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.2', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/roman', 'sort': '4roman'}, {'name': 'responses', 'vers_installed': '0.10.6', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.10.6', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/responses', 'sort': '4responses'}, {'name': 'requests', 'vers_installed': '2.22.0', 'is_required': True, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '2.20.0', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '>=2.20.0', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '2.22.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/requests', 'sort': '1requests'}, {'name': 'requests-oauthlib', 'vers_installed': '1.3.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.3.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/requests-oauthlib', 'sort': '4requests-oauthlib'}, {'name': 'pyyaml', 'vers_installed': '5.1.2', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '5.1.2', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/PyYAML', 'sort': '4pyyaml'}, {'name': 'pyxdg', 'vers_installed': '0.26', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.26', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pyxdg', 'sort': '4pyxdg'}, {'name': 'pytz', 'vers_installed': '2019.3', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2019.3', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pytz', 'sort': '4pytz'}, {'name': 'python-dateutil', 'vers_installed': '2.8.1', 'is_required': True, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '2.5.3', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '>=2.5.3<br/>>=2.5.3 (backend)', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '2.8.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/python-dateutil', 'sort': '1python-dateutil'}, {'name': 'pymysql', 'vers_installed': '0.9.3', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.9.3', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/PyMySQL', 'sort': '4pymysql'}, {'name': 'pylint', 'vers_installed': '2.4.3', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.4.3', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pylint', 'sort': '4pylint'}, {'name': 'pyjwt', 'vers_installed': '1.7.1', 'is_required': True, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '1.6.4', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '>=1.6.4', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '1.7.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/PyJWT', 'sort': '1pyjwt'}, {'name': 'pygobject', 'vers_installed': '3.34.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.34.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/PyGObject', 'sort': '4pygobject'}, {'name': 'pygments', 'vers_installed': '2.4.2', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.4.2', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/Pygments', 'sort': '4pygments'}, {'name': 'pygame', 'vers_installed': '1.9.6', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.9.6', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pygame', 'sort': '4pygame'}, {'name': 'pycparser', 'vers_installed': '2.19', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.19', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pycparser', 'sort': '4pycparser'}, {'name': 'pycairo', 'vers_installed': '1.18.2', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.18.2', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pycairo', 'sort': '4pycairo'}, {'name': 'psutil', 'vers_installed': '5.6.5', 'is_required': True, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '==*', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '5.6.5', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/psutil', 'sort': '1psutil'}, {'name': 'portend', 'vers_installed': '2.6', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.6', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/portend', 'sort': '4portend'}, {'name': 'pip', 'vers_installed': '19.3.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '19.3.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pip', 'sort': '4pip'}, {'name': 'pillow', 'vers_installed': '6.2.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '6.2.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/Pillow', 'sort': '4pillow'}, {'name': 'parso', 'vers_installed': '0.5.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.5.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/parso', 'sort': '4parso'}, {'name': 'oauthlib', 'vers_installed': '3.1.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.1.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/oauthlib', 'sort': '4oauthlib'}, {'name': 'numpy', 'vers_installed': '1.17.3', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.17.3', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/numpy', 'sort': '4numpy'}, {'name': 'mypy', 'vers_installed': '0.740', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.740', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/mypy', 'sort': '4mypy'}, {'name': 'mypy-extensions', 'vers_installed': '0.4.3', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.4.3', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/mypy-extensions', 'sort': '4mypy-extensions'}, {'name': 'more-itertools', 'vers_installed': '7.2.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '7.2.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/more-itertools', 'sort': '4more-itertools'}, {'name': 'markupsafe', 'vers_installed': '1.1.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.1.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/MarkupSafe', 'sort': '4markupsafe'}, {'name': 'markdown', 'vers_installed': '3.1.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.1.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/Markdown', 'sort': '4markdown'}, {'name': 'mako', 'vers_installed': '1.1.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.1.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/Mako', 'sort': '4mako'}, {'name': 'lxml', 'vers_installed': '4.4.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '4.4.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/lxml', 'sort': '4lxml'}, {'name': 'logilab-common', 'vers_installed': '1.4.4', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.4.4', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/logilab-common', 'sort': '4logilab-common'}, {'name': 'lazy-object-proxy', 'vers_installed': '1.4.3', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.4.3', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/lazy-object-proxy', 'sort': '4lazy-object-proxy'}, {'name': 'keyring', 'vers_installed': '19.2.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '19.2.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/keyring', 'sort': '4keyring'}, {'name': 'jinja2', 'vers_installed': '2.10.3', 'is_required': True, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '2.9', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '>=2.9', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '2.10.3', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/Jinja2', 'sort': '1jinja2'}, {'name': 'jeepney', 'vers_installed': '0.4.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.4.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/jeepney', 'sort': '4jeepney'}, {'name': 'jedi', 'vers_installed': '0.15.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.15.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/jedi', 'sort': '4jedi'}, {'name': 'jaraco.functools', 'vers_installed': '2.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/jaraco.functools', 'sort': '4jaraco.functools'}, {'name': 'itsdangerous', 'vers_installed': '1.1.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.1.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/itsdangerous', 'sort': '4itsdangerous'}, {'name': 'isort', 'vers_installed': '4.3.21', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '4.3.21', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/isort', 'sort': '4isort'}, {'name': 'idna', 'vers_installed': '2.8', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.8', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/idna', 'sort': '4idna'}, {'name': 'flask', 'vers_installed': '1.1.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.1.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/Flask', 'sort': '4flask'}, {'name': 'ephem', 'vers_installed': '3.7.7.0', 'is_required': True, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '3.7', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '>=3.7', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '3.7.7.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/ephem', 'sort': '1ephem'}, {'name': 'envirophat', 'vers_installed': '1.0.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.0.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/envirophat', 'sort': '4envirophat'}, {'name': 'docutils', 'vers_installed': '0.15.2', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.15.2', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/docutils', 'sort': '4docutils'}, {'name': 'cryptography', 'vers_installed': '2.8', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.8', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/cryptography', 'sort': '4cryptography'}, {'name': 'colorama', 'vers_installed': '0.4.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.4.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/colorama', 'sort': '4colorama'}, {'name': 'cherrypy', 'vers_installed': '18.4.0', 'is_required': True, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '8.1.2', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '>=8.1.2', 'vers_ok': True, 'vers_recent': True, 'pypi_version': '18.4.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/CherryPy', 'sort': '1cherrypy'}, {'name': 'cheroot', 'vers_installed': '8.2.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '8.2.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/cheroot', 'sort': '4cheroot'}, {'name': 'chardet', 'vers_installed': '3.0.4', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.0.4', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/chardet', 'sort': '4chardet'}, {'name': 'cffi', 'vers_installed': '1.13.2', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.13.2', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/cffi', 'sort': '4cffi'}, {'name': 'certifi', 'vers_installed': '2019.9.11', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2019.9.11', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/certifi', 'sort': '4certifi'}, {'name': 'beautifulsoup4', 'vers_installed': '4.8.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '4.8.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/beautifulsoup4', 'sort': '4beautifulsoup4'}, {'name': 'asttokens', 'vers_installed': '2.0.2', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.0.2', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/asttokens', 'sort': '4asttokens'}, {'name': 'astroid', 'vers_installed': '2.3.3', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.3.3', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/astroid', 'sort': '4astroid'}, {'name': 'asn1crypto', 'vers_installed': '1.2.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.2.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/asn1crypto', 'sort': '4asn1crypto'}, {'name': 'webencodings', 'vers_installed': '0.5.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.5.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/webencodings', 'sort': '4webencodings'}, {'name': 'unicornhathd', 'vers_installed': '0.0.4', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.0.4', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/unicornhathd', 'sort': '4unicornhathd'}, {'name': 'twython', 'vers_installed': '3.7.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.7.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/twython', 'sort': '4twython'}, {'name': 'touchphat', 'vers_installed': '0.0.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.0.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/touchphat', 'sort': '4touchphat'}, {'name': 'ssh-import-id', 'vers_installed': '5.7', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '5.6', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/ssh-import-id', 'sort': '4ssh-import-id'}, {'name': 'sn3218', 'vers_installed': '1.2.7', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.2.7', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/sn3218', 'sort': '4sn3218'}, {'name': 'skywriter', 'vers_installed': '0.0.7', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.0.7', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/skywriter', 'sort': '4skywriter'}, {'name': 'simplejson', 'vers_installed': '3.16.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.16.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/simplejson', 'sort': '4simplejson'}, {'name': 'sense-hat', 'vers_installed': '2.2.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.2.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/sense-hat', 'sort': '4sense-hat'}, {'name': 'send2trash', 'vers_installed': '1.5.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.5.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/Send2Trash', 'sort': '4send2trash'}, {'name': 'scrollphathd', 'vers_installed': '1.2.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.2.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/scrollphathd', 'sort': '4scrollphathd'}, {'name': 'scrollphat', 'vers_installed': '0.0.7', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.0.7', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/scrollphat', 'sort': '4scrollphat'}, {'name': 'rtimulib', 'vers_installed': '7.2.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '7.2.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/RTIMULib', 'sort': '4rtimulib'}, {'name': 'rpi.gpio', 'vers_installed': '0.7.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.7.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/RPi.GPIO', 'sort': '4rpi.gpio'}, {'name': 'rainbowhat', 'vers_installed': '0.1.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.1.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/rainbowhat', 'sort': '4rainbowhat'}, {'name': 'python-apt', 'vers_installed': '1.8.4', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.7.8', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/python-apt', 'sort': '4python-apt'}, {'name': 'pyserial', 'vers_installed': '3.4', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.4', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pyserial', 'sort': '4pyserial'}, {'name': 'pyopenssl', 'vers_installed': '19.0.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '19.0.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pyOpenSSL', 'sort': '4pyopenssl'}, {'name': 'pyinotify', 'vers_installed': '0.9.6', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.9.6', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pyinotify', 'sort': '4pyinotify'}, {'name': 'pycrypto', 'vers_installed': '2.6.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.6.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pycrypto', 'sort': '4pycrypto'}, {'name': 'pigpio', 'vers_installed': '1.44', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.44', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pigpio', 'sort': '4pigpio'}, {'name': 'piglow', 'vers_installed': '1.2.5', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.2.5', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/piglow', 'sort': '4piglow'}, {'name': 'picraft', 'vers_installed': '1.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/picraft', 'sort': '4picraft'}, {'name': 'picamera', 'vers_installed': '1.13', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.13', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/picamera', 'sort': '4picamera'}, {'name': 'pianohat', 'vers_installed': '0.1.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.1.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pianohat', 'sort': '4pianohat'}, {'name': 'phatbeat', 'vers_installed': '0.1.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.1.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/phatbeat', 'sort': '4phatbeat'}, {'name': 'pgzero', 'vers_installed': '1.2', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.2', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pgzero', 'sort': '4pgzero'}, {'name': 'pantilthat', 'vers_installed': '0.0.7', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.0.7', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pantilthat', 'sort': '4pantilthat'}, {'name': 'olefile', 'vers_installed': '0.46', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.46', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/olefile', 'sort': '4olefile'}, {'name': 'motephat', 'vers_installed': '0.0.2', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.0.2', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/motephat', 'sort': '4motephat'}, {'name': 'mote', 'vers_installed': '0.0.4', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.0.4', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/mote', 'sort': '4mote'}, {'name': 'microdotphat', 'vers_installed': '0.2.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.2.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/microdotphat', 'sort': '4microdotphat'}, {'name': 'mccabe', 'vers_installed': '0.6.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.6.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/mccabe', 'sort': '4mccabe'}, {'name': 'keyrings.alt', 'vers_installed': '3.1.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '3.1.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/keyrings.alt', 'sort': '4keyrings.alt'}, {'name': 'html5lib', 'vers_installed': '1.0.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.0.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/html5lib', 'sort': '4html5lib'}, {'name': 'gpiozero', 'vers_installed': '1.5.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.5.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/gpiozero', 'sort': '4gpiozero'}, {'name': 'fourletterphat', 'vers_installed': '0.1.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.1.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/fourletterphat', 'sort': '4fourletterphat'}, {'name': 'explorerhat', 'vers_installed': '0.4.2', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.4.2', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/ExplorerHAT', 'sort': '4explorerhat'}, {'name': 'entrypoints', 'vers_installed': '0.3', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.3', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/entrypoints', 'sort': '4entrypoints'}, {'name': 'drumhat', 'vers_installed': '0.1.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.1.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/drumhat', 'sort': '4drumhat'}, {'name': 'cookies', 'vers_installed': '2.2.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '2.2.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/cookies', 'sort': '4cookies'}, {'name': 'colorzero', 'vers_installed': '1.1', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.1', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/colorzero', 'sort': '4colorzero'}, {'name': 'click', 'vers_installed': '7.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '7.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/Click', 'sort': '4click'}, {'name': 'cap1xxx', 'vers_installed': '0.1.3', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.1.3', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/Cap1xxx', 'sort': '4cap1xxx'}, {'name': 'buttonshim', 'vers_installed': '0.0.2', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.0.2', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/buttonshim', 'sort': '4buttonshim'}, {'name': 'blinkt', 'vers_installed': '0.1.2', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.1.2', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/blinkt', 'sort': '4blinkt'}, {'name': 'blinker', 'vers_installed': '1.4', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '1.4', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/blinker', 'sort': '4blinker'}, {'name': 'automationhat', 'vers_installed': '0.2.0', 'is_required': False, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'vers_req_min': '', 'vers_req_max': '', 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': True, 'pypi_version': '0.2.0', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/automationhat', 'sort': '4automationhat'}]
                    2019-11-10  19:38:00 INFO     CP Server Thread-16 192.168.10.69 - - [10/Nov/2019:19:38:00] "GET /backend/pypi.json HTTP/1.1" 200 50203 "http://192.168.10.152:8383/backend/system.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"

                    Kommentar


                      #70
                      sieht nach einer alten Version des Core aus. Das WebIF verwendet schon Properties, dein Core kann die wohl nicht?

                      Kommentar


                        #71
                        Habe gestern SmarthomeNG und die Plugins als Develop geklont. Muss ich ev. noch etwas in der Konfiguration anpassen?

                        Kommentar


                          #72
                          Nee, bei mir kommt das auch und ich habe definitv alles neu. Offensichtlich hat jemand die interne Struktur für die Speicherung in   self._items  so verändert, das einem key im dict dann eine Liste der Items beigestellt wird. Auf diese Weise kann einem einzigen Key mehrere Items zugeordnet werden. Derjenige hat dann aber vergessen, die index.html nachzuziehen.

                          Folgendes als Quickfix ändern von
                          Code:
                                      <tbody>
                                          {% for key, item in p.get_items().items() %}
                                              <tr id="{{ loop.index }}_click">
                                                  <td class="py-1">{{ item.property.path }}</td>
                                                  <td class="py-1">{{ item.property.type }}</td>
                                                  <td class="py-1">{{ key }}</td>
                                                  <td class="py-1">{{ item() }}</td>
                                                  <td class="py-1">{{ item.property.last_update.strftime('%d.%m.%Y %H:%M:%S') }}</td>
                                                  <td class="py-1">{{ item.property.last_change.strftime('%d.%m.%Y %H:%M:%S') }}</td>
                                              </tr>
                                          {% endfor %}
                                      </tbody>
                          in
                          Code:
                                      <tbody>
                                          {% for key, item in p.get_items().items() %}
                                              <tr id="{{ loop.index }}_click">
                                                  <td class="py-1">{{ item[0].property.path }}</td>
                                                  <td class="py-1">{{ item[0].property.type }}</td>
                                                  <td class="py-1">{{ key }}</td>
                                                  <td class="py-1">{{ item[0]() }}</td>
                                                  <td class="py-1">{{ item[0].property.last_update.strftime('%d.%m.%Y %H:%M:%S') }}</td>
                                                  <td class="py-1">{{ item[0].property.last_change.strftime('%d.%m.%Y %H:%M:%S') }}</td>
                                              </tr>
                                          {% endfor %}
                                      </tbody>
                          Der Quickfix hat leider den Nachteil, das nur das erste Item angezeigt wird auch wenn mehrere Items als Empfänger zugewiesen sind. Da sollte das WebInterface noch mal angepasst werden...


                          PS:

                          Ich habe den trotzdem mal eben in develop gepusht

                          PPS:
                          Kann man sich im Executor Plugin anschauen:
                          Code:
                          items = sh.darksky.get_items()
                          for k in items:
                            item = items[k]
                            print(k, item, type(item))
                          ergibt

                          Code:
                          latitude [Item: wetter_darksky.latitude] <class 'list'>
                          longitude [Item: wetter_darksky.longitude] <class 'list'>
                          timezone [Item: wetter_darksky.timezone] <class 'list'>
                          currently/time [Item: wetter_darksky.currently.time_epoch] <class 'list'>
                          currently/summary [Item: wetter_darksky.currently.summary] <class 'list'>
                          currently/icon [Item: wetter_darksky.currently.icon] <class 'list'>
                          currently/icon_visu [Item: wetter_darksky.currently.icon_visu] <class 'list'>
                          currently/nearestStormDistance [Item: wetter_darksky.currently.nearestStormDistance] <class 'list'>
                          Zuletzt geändert von bmx; 11.11.2019, 11:47.

                          Kommentar


                            #73
                            das einem key im dict dann eine Liste der Items beigestellt wird.
                            Derjenige war wohl ich, da ich mit Einführung der Struct auch redundante Items ausserhalb der Struct zulassen wollte...
                            Thx für den Push.. Aber deshalb ist es halt auch der DEVELOP!!!!

                            Das Webif checke ich nochmal. Dachte aber eigentlich, dass ich dessen Funktion gecheckt hatte :-/ Vielleicht habe ich nen Push vergessen.

                            Kommentar


                              #74
                              tatsache, der hier fehlt:
                              1234.JPG

                              Ich überschreib deine Änderung mal damit!

                              Kommentar


                                #75
                                Zitat von psilo Beitrag anzeigen
                                Aber deshalb ist es halt auch der DEVELOP!!!!
                                Eben ...

                                Ich denke die Idee war auf jeden Fall gut da doppelte Itemzuweisungen zu erlauben. Ich wollte auch nur das es fix funktioniert. Ansonsten Hut ab vor der ganzen Fleissarbeit am darksy Plugin!

                                Kommentar

                                Lädt...
                                X