Ankündigung

Einklappen
Keine Ankündigung bisher.

Wunsch für 1.6 (Ipython)

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

    Wunsch für 1.6 (Ipython)

    Hallo,

    was ich wirklich vermisse an sh.py ist die Möglichkeit im Webinterface Zugriff auf IPython zu haben.
    Ich hatte damals sogar an einem Plugin begonnen
    Code:
    import logging
    from lib.model.smartplugin import SmartPlugin
    import sys
    from IPython.terminal.ipapp import launch_new_instance
    from IPython.lib import passwd
    from socket import gethostname
    import warnings
    
    
    class IpythonServer(SmartPlugin):
        PLUGIN_VERSION = "1.1.2"
        ALLOW_MULTIINSTANCE = False
    
        def __init__(self, smarthome):
            self._sh = smarthome
            self.logger     = logging.getLogger(__name__)
            self.start_server()
    
        def run(self):
            self.alive = True
            # if you want to create child threads, do not make them daemon = True!
            # They will not shutdown properly. (It's a python bug)
    
        def start_server(self):
            #http://stackoverflow.com/questions/26338688/start-ipython-notebook-with-python-file
            #http://www.xavierdupre.fr/app/pyquickhelper/helpsphinx/ipython_notebook_args.html
            warnings.filterwarnings("ignore", module = "zmq.*")
            sys.argv.append("notebook")
            sys.argv.append("--IPKernelApp.pylab='inline'")
            sys.argv.append("--NotebookApp.ip=" + gethostname())
            sys.argv.append("--NotebookApp.open_browser=False")
            sys.argv.append("--NotebookApp.password="+passwd("dummy"))
            sys.argv.append("--ip=\"*\"")
            self.logger.info("[IPython] Starting server")
            launch_new_instance()
    
        def stop(self):
            self.alive = False
    
        def parse_item(self, item):
            if 'plugin_attr' in item.conf:
                logger.debug("parse item: {0}".format(item))
                return self.update_item
            else:
                return None
    
        def parse_logic(self, logic):
            if 'xxx' in logic.conf:
                # self.function(logic['name'])
                pass
    
        def update_item(self, item, caller=None, source=None, dest=None):
            if caller != 'plugin':
                logger.info("update item: {0}".format(item.id()))
    
    if __name__ == '__main__':
        logging.basicConfig(level=logging.DEBUG)
        myplugin = IpythonServer('smarthome-dummy')
        myplugin.run()
    Aber da reichten meine Fähigkeiten nicht aus.
    Ich denke aus dem code oben ist am nützlich sind v.a. die zwei Links.

    Was denkt ihr?

    Gruß,
    Hendrik

    #2
    Das müsste doch auch mit Bordmitteln gehen. https://www.pythoncentral.io/embed-i...reter-console/
    (Batteries included...)
    In der Tat sehe ich bei der Unterstützung beim coden und testen von Logiken noch viel Potential.

    Kommentar


      #3
      Aber den Logik-Editor mit Autocomplete und Reload bei laufendem snNG hast Du schon mal ausprobiert?
      Viele Grüße
      Martin

      There is no cloud. It's only someone else's computer.

      Kommentar


        #4
        Was konkret meinst du mit "auch mit Bordmitteln"?

        Gruß,
        Hendrik

        Kommentar


          #5
          Zitat von Msinn Beitrag anzeigen
          Aber den Logik-Editor mit Autocomplete und Reload bei laufendem snNG hast Du schon mal ausprobiert?
          Das Autocomplete ist mir neu. Seit wann gibt es das?
          Das ist super! Wenn jetzt darunter noch eine python-shell mit dem sh Namespace wäre, wäre es nahezu* perfekt.

          *) noch besser wäre wenn links ein Item-Baum wäre aus dem man die Items rüberziehen kann (und ein Popup mit den Eigenschaften der Items hätte (wie von der Items-Seite bekannt)).

          Gruß,
          Hendrik

          Kommentar


            #6
            Zitat von henfri Beitrag anzeigen
            Was konkret meinst du mit "auch mit Bordmitteln"?
            Ich meine Python Standard Lib.

            Kommentar


              #7
              Na iPython ist davon ja nicht so weit entfernt.

              Kommentar


                #8
                walldi, henfri sicher eine gute Idee den interaktiven Modus via Backend verfügbar zu machen, ich denke aber das es aufgrund der nicht genügend vorhandenen manpower in absehbarer Zeit eher nicht dazu kommen wird.

                Es sind derzeit noch viele Baustellen zu schließen:

                * Alt-Plugins müssen auf SmartPlugins-Level gebracht werden, wer kann die testen?
                * Dokumentation sollte ergänzt werden,
                * Was ist mit solchen Plugins wie **blockly**, die seit einiger Zeit herumdümpeln wo aber niemand was dran macht?
                * Migration von lib/connection.py auf lib/network.py bei einigen Plugins
                * ...

                henfri Du kannst ja Dein Plugin mal in Betrieb nehmen und testen und wenn es dann funktioniert ins Repo laden

                Kommentar


                  #9
                  Folgende beiden Features sollten das "In der Tat sehe ich bei der Unterstützung beim coden und testen von Logiken noch viel Potential." auch wieder etwas optimieren.. hat mich gestern und heute Nachmittag gekostet... nach der Arbeit und am Wochenende auch nicht unbedingt selbstverständlich :-)

                  1.png
                  2.png

                  Anstatt neue Baustellen zu öffnen, kann man aus dem Bestand auch schon viel herausholen.

                  Grundlegend hat jeder Featurerequest irgendwo seine Berechtigung, nur bitte nicht stinkig werden, wenn das dann erstmal aber doch nicht kommt...

                  Kommentar


                    #10
                    Bitte meine 2 ct nicht falsch vetstehen. Das einzige, worüber ich stinkig bin ist, dass ich selbst so gut wie keine Zeit finde, etwas beizusteuern.

                    Kommentar

                    Lädt...
                    X