Welches Framework nutzt meine VU SOLO2 Sat Receiver Box?

Django, Flask, Bottle, WSGI, CGI…
kluesi
User
Beiträge: 8
Registriert: Freitag 21. Juli 2017, 12:19

Welches Framework nutzt meine VU SOLO2 Sat Receiver Box?

Beitragvon kluesi » Freitag 21. Juli 2017, 12:36

Hallo Leute

Hallo erst mal von meiner Seite. Ich bin neu in Python und will mich da auch gar nicht so wahnsinnig viel mit machen. Ich habe da eine ganz spezielle Frage. Ich habe einen VU SOLO2 HD TV Receiver. Natürlich Linux, was aber kein Problem ist. Java und Co. gibt es für dieses Derivat leider nicht. Es gibt aber eine Weboberfläche die sich OpenWebIf nennt. Diese läuft, soweit ich das mit meiner geringen Python Kenntnis ausmachen kann, über Python. Das funktioniert auch alles super. Ich habe noch einen alten Samsung TV den ich über Python ansteuern kann. Also Programme umschalten, Lautstärke regeln usw. Und ich habe meine neue Freundin, die Alexa aus dem Hause Amazon. Ich weiß, das Thema ist viel diskutiert aber ich finde es erst mal klasse. Hab ich mir schon ewig gewünscht so eine Sprachbedienung. Zwar weniger für den Frenseher sondern für die anderen Dinge im Haushalt. Aber das ist ein anderes Thema. Ich möchte über den Amazon Echo den Fernseher bedienen. Ich weiß auch, dass es einen Haufen anderer Lösungen dafür gibt, ich möchte es aber trotzdem folgendermassen machen.

Amazon Echo -> IFTTT (WebRequest) -> Python WebFrontend auf der VU SOLO2 -> TV

Verrückt, ich weiß. Was mir fehlt ist der Python Schritt. Da kenne ich mich nicht so aus. Daher kann ich auch nicht so richtig einschätzen was auf meiner Box für ein WebFramework benutzt wird. Ich habe gesehen, dass es im Filesystem ein paar Verzeichnisse mit __init__.py und __init__.pyo gibt. Vielleicht könnt ihr mir da schon weiterhelfen. Wenn ich das Framework kenne, kann ich dann weitersuchen wie ich unter dem gleichen Framework ein neues Verzeichnis anlege mit einer einzelnen Webseite die die einzelnen Links zur TV Bedienung enthalten die ich dann per IFTTT steuern kann. Und ja, über die Sicherheit mache ich mir dann auch Gedanken.

Jetzt freue ich mich über eure Tipps wie ich erkennen kann welches Framework ich hier habe und vielleicht auch schon ein paar weiterführende Tips wie ich so eine Seite da einbinden kann.

Vielen Dank

Klüsi
kluesi
User
Beiträge: 8
Registriert: Freitag 21. Juli 2017, 12:19

Re: Welches Framework nutzt meine VU SOLO2 Sat Receiver Box?

Beitragvon kluesi » Freitag 21. Juli 2017, 12:42

Eins noch. Die Python Version ist 2.7
lackschuh
User
Beiträge: 259
Registriert: Dienstag 8. Mai 2012, 13:40

Re: Welches Framework nutzt meine VU SOLO2 Sat Receiver Box?

Beitragvon lackschuh » Freitag 21. Juli 2017, 12:46

Die GUI nennt sich enigma2

https://github.com/openatv/enigma2

Aus www.i-have-a-dreambox.com gibt es ein paar Tutorials, wie man Plugins für e2 schreibt...
kluesi
User
Beiträge: 8
Registriert: Freitag 21. Juli 2017, 12:19

Re: Welches Framework nutzt meine VU SOLO2 Sat Receiver Box?

Beitragvon kluesi » Sonntag 6. August 2017, 12:57

So da bin ich wieder

Ich habe eine Menge heraus herausgefunden. Ich habe einen eigenen minimalen Controller erstellt und den in root.py eingebunden. In der render Funktion ksnn ich mit

  1. Return """
  2. Hallo Welt
  3. """


ausgeben. Aber sobald ich hier mit html Code ankomme gibt es nur Fehler. Bei mir sieht das so aus :

  1. from twisted.web import resource, http
  2. class PrivateController(resource.Resource):
  3.         def __init__(self, session, path = ""):
  4.                 resource.Resource.__init__(self)
  5.                 self.session = session
  6.         def render(self, request):
  7.                 request.setResponseCode(http.OK)
  8.                 request.setHeader('Content-type', 'text/plain')
  9.                 request.setHeader('charset', 'UTF-8')
  10.                 return """
  11. Mein eigener Controller
  12. Request:
  13.    Methode: %s
  14.    Argumente: %s
  15. """ % (request.method,request.args)


So funktioniert es. Aber wenn ich anstatt dem hier, dass folgende verwende :

  1. return """
  2. <html><body>Hallo</body></html>
  3. """


Bekomme ich nur Fehlermeldungen. Die Fehlermeldung habe ich gerade nicht zur Hand.

Vielen Dank

Kluesi
Zuletzt geändert von BlackJack am Sonntag 6. August 2017, 13:26, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
BlackJack
Moderator
Beiträge: 32975
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Welches Framework nutzt meine VU SOLO2 Sat Receiver Box?

Beitragvon BlackJack » Sonntag 6. August 2017, 13:28

@kluesi: Die wäre aber wichtig. Am besten inklusive Traceback 1:1 kopiert.
“Programs must be written for people to read, and only incidentally for machines to execute.” — Abelson & Sussman, SICP (preface to the first edition)
kluesi
User
Beiträge: 8
Registriert: Freitag 21. Juli 2017, 12:19

Re: Welches Framework nutzt meine VU SOLO2 Sat Receiver Box?

Beitragvon kluesi » Sonntag 6. August 2017, 14:11

Dachte ich mir schon. Da komme ich erst heute Abend u. Es ging um ein Problem mit dem String. Aber ich gucke heute abend nochmal.

Viele Grüße
kluesi
User
Beiträge: 8
Registriert: Freitag 21. Juli 2017, 12:19

Re: Welches Framework nutzt meine VU SOLO2 Sat Receiver Box?

Beitragvon kluesi » Sonntag 6. August 2017, 17:51

So. Hab das File mal aufgeräumt. Jetzt gibt es keine Fehler mehr. Es wird einfach der html Code selbst als Text ausgegeben. Was muss ich machen wenn ich das als html Code interpretiert haben möchte?
Benutzeravatar
BlackJack
Moderator
Beiträge: 32975
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Welches Framework nutzt meine VU SOLO2 Sat Receiver Box?

Beitragvon BlackJack » Sonntag 6. August 2017, 18:33

@kluesi: Den richtigen Content-Type senden, damit der Browser weiss was er damit machen soll.
“Programs must be written for people to read, and only incidentally for machines to execute.” — Abelson & Sussman, SICP (preface to the first edition)
kluesi
User
Beiträge: 8
Registriert: Freitag 21. Juli 2017, 12:19

Re: Welches Framework nutzt meine VU SOLO2 Sat Receiver Box?

Beitragvon kluesi » Sonntag 6. August 2017, 19:39

Verdammt! Ja, natürlich war es das. Danke an alle, vg kkuesi
kluesi
User
Beiträge: 8
Registriert: Freitag 21. Juli 2017, 12:19

Re: Welches Framework nutzt meine VU SOLO2 Sat Receiver Box?

Beitragvon kluesi » Samstag 12. August 2017, 21:06

So, ich habe zwei neue Teile hinzugefügt. Sie machen beide was sie sollen. Das eine stellt per Telnet Userprofile auf der Fritzbox um und das andere schaltet meinen Fernseher um. beides funktioniert. Am nächsten Tag jedoch reagiert das Webinterface nicht mehr. Auch nicht das reguläre OpenWebIf nicht mehr. Irgendetwas scheint hier nicht so ganz sauber zu sein. Wahrscheinlich brauche ich noch ein paar Sicherheitsmechanismen im Python Skript. Vielleicht wird irgendetwas nicht korrekt beendet, Speicher freigegeben, oder so. Könnt ihr mir da mal helfen?

Hier sind beide Skripte:

  1. # -*- coding: utf-8 -*-
  2.  
  3. ##############################################################################
  4. #                        2013 E2OpenPlugins                                  #
  5. #                                                                            #
  6. #  This file is open source software; you can redistribute it and/or modify  #
  7. #     it under the terms of the GNU General Public License version 2 as      #
  8. #               published by the Free Software Foundation.                   #
  9. #                                                                            #
  10. ##############################################################################
  11. from twisted.web import static, resource, http, server
  12.  
  13. import time
  14. import socket
  15. import base64
  16.  
  17. class kidsController(resource.Resource):
  18.     global ergebnis
  19.     global setProfile
  20.     def __init__(self, session, path = ""):
  21.         resource.Resource.__init__(self)
  22.         self.session = session
  23.        
  24.     def setProfile(aProfile):
  25.         import getpass
  26.         import sys
  27.         import telnetlib
  28.  
  29.         HOST = "192.168.0.254"
  30.         password = "###########"
  31.  
  32.         tn = telnetlib.Telnet(HOST)
  33.         tn.read_until("password: ")
  34.         tn.write(password + "\n")
  35.         tn.read_until("# ")
  36.  
  37.         ergebnis="-"
  38.         if aProfile == "ipad_korbin_off":
  39.             tn.write("ctlmgr_ctl w user settings/user2/filter_profile_UID filtprof853\n") # Korbin iPad off
  40.         if aProfile == "ipad_korbin_time":
  41.             tn.write("ctlmgr_ctl w user settings/user2/filter_profile_UID filtprof848\n") # Korbin iPad time
  42.         if aProfile == "ipad_korbin_free":
  43.             tn.write("ctlmgr_ctl w user settings/user2/filter_profile_UID filtprof850\n") # Korbin iPad free
  44.         if aProfile == "iphone_korbin_off":
  45.             tn.write("ctlmgr_ctl w user settings/user3/filter_profile_UID filtprof853\n") # Korbin iPhone off
  46.         if aProfile == "iphone_korbin_time":
  47.             tn.write("ctlmgr_ctl w user settings/user3/filter_profile_UID filtprof848\n") # Korbin iPhone time
  48.         if aProfile == "iphone_korbin_free":
  49.             tn.write("ctlmgr_ctl w user settings/user3/filter_profile_UID filtprof850\n") # Korbin iPhone free
  50.         if aProfile == "tablet_kendra_off":
  51.             tn.write("ctlmgr_ctl w user settings/user4/filter_profile_UID filtprof852\n") # Kendra Tablet off
  52.         if aProfile == "tablet_kendra_time":
  53.             tn.write("ctlmgr_ctl w user settings/user4/filter_profile_UID filtprof849\n") # Kendra Tablet time
  54.         if aProfile == "tablet_kendra_free":
  55.             tn.write("ctlmgr_ctl w user settings/user4/filter_profile_UID filtprof851\n") # Kendra Tablet free
  56.  
  57.         tn.write("exit\n")
  58.         atext = tn.read_all()
  59.         tn.close()
  60.         return atext
  61.  
  62.  
  63.     def render(self, request):
  64.         abc = "-"
  65.         if "profile" in request.args.keys():
  66.             abc=setProfile(request.args["profile"][0])
  67.  
  68.         request.setResponseCode(http.OK)
  69.         request.setHeader('Content-type', 'text/html')
  70.         request.setHeader('charset', 'UTF-8')
  71.         return """<html><body><b>Profile</b><br><br>
  72. <a href="http://192.168.0.232/kids?profile=ipad_korbin_off">Korbin - iPad - OFF</a><br><br><br>
  73. <a href="http://192.168.0.232/kids?profile=ipad_korbin_time">Korbin - iPad - TIME</a><br><br><br>
  74. <a href="http://192.168.0.232/kids?profile=ipad_korbin_free">Korbin - iPad - FREE</a><br><br><br>
  75. <a href="http://192.168.0.232/kids?profile=iphone_korbin_off">Korbin - iPhone - OFF</a><br><br><br>
  76. <a href="http://192.168.0.232/kids?profile=iphone_korbin_time">Korbin - iPhone - TIME</a><br><br><br>
  77. <a href="http://192.168.0.232/kids?profile=iphone_korbin_free">Korbin - iPhone - FREE</a><br><br><br>
  78. <a href="http://192.168.0.232/kids?profile=tablet_kendra_off">Kendra - Tablet - OFF</a><br><br><br>
  79. <a href="http://192.168.0.232/kids?profile=tablet_kendra_time">Kendra - Tablet - TIME</a><br><br><br>
  80. <a href="http://192.168.0.232/kids?profile=tablet_kendra_free">Kendra - Tablet - FREE</a><br><br><br>
  81. Debug:<br><br>
  82. %s
  83. </body></html>
  84. """ % (abc)




  1. # -*- coding: utf-8 -*-
  2.  
  3. ##############################################################################
  4. #                        2013 E2OpenPlugins                                  #
  5. #                                                                            #
  6. #  This file is open source software; you can redistribute it and/or modify  #
  7. #     it under the terms of the GNU General Public License version 2 as      #
  8. #               published by the Free Software Foundation.                   #
  9. #                                                                            #
  10. ##############################################################################
  11. from twisted.web import static, resource, http, server
  12.  
  13. import time
  14. import socket
  15. import base64
  16.  
  17. class JKController(resource.Resource):
  18.     global push
  19.     def __init__(self, session, path = ""):
  20.         resource.Resource.__init__(self)
  21.         self.session = session
  22.        
  23.     def push(key):
  24.         src     = '192.168.0.232'       # ip of remote
  25.         mac     = '00-1D-EC-06-C2-C5' # mac of remote
  26.         remote  = 'python remote'     # remote name
  27.         dst     = '192.168.0.155'       # ip of tv
  28.         app     = 'python'            # iphone..iapp.samsung
  29.         tv      = 'UE40C6700'          # iphone.LE32C650.iapp.samsung
  30.  
  31.         new = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  32.         new.connect((dst, 55000))
  33.         msg = chr(0x64) + chr(0x00) +\
  34.                 chr(len(base64.b64encode(src)))    + chr(0x00) + base64.b64encode(src) +\
  35.                 chr(len(base64.b64encode(mac)))    + chr(0x00) + base64.b64encode(mac) +\
  36.                 chr(len(base64.b64encode(remote))) + chr(0x00) + base64.b64encode(remote)
  37.         pkt = chr(0x00) +\
  38.                 chr(len(app)) + chr(0x00) + app +\
  39.                 chr(len(msg)) + chr(0x00) + msg
  40.         new.send(pkt)
  41.         msg = chr(0x00) + chr(0x00) + chr(0x00) +\
  42.                 chr(len(base64.b64encode(key))) + chr(0x00) + base64.b64encode(key)
  43.         pkt = chr(0x00) +\
  44.                 chr(len(tv))  + chr(0x00) + tv +\
  45.                 chr(len(msg)) + chr(0x00) + msg
  46.         new.send(pkt)
  47.         new.close()
  48.         time.sleep(0.1)
  49.  
  50.  
  51.     def render(self, request):
  52.         if "key" in request.args.keys():
  53.             key = request.args["key"][0]
  54.             if key == "001":
  55.                 push("KEY_TV")
  56.                 push("KEY_1")
  57.                 push("KEY_ENTER")
  58.             if key == "002":
  59.                 push("KEY_TV")
  60.                 push("KEY_2")
  61.                 push("KEY_ENTER")
  62.             if key == "003":
  63.                 push("KEY_TV")
  64.                 push("KEY_3")
  65.                 push("KEY_ENTER")
  66.             if key == "004":
  67.                 push("KEY_TV")
  68.                 push("KEY_4")
  69.                 push("KEY_ENTER")
  70.             if key == "005":
  71.                 push("KEY_TV")
  72.                 push("KEY_5")
  73.                 push("KEY_ENTER")
  74.             if key == "006":
  75.                 push("KEY_TV")
  76.                 push("KEY_6")
  77.                 push("KEY_ENTER")
  78.             if key == "007":
  79.                 push("KEY_TV")
  80.                 push("KEY_7")
  81.                 push("KEY_ENTER")
  82.             if key == "008":
  83.                 push("KEY_TV")
  84.                 push("KEY_8")
  85.                 push("KEY_ENTER")
  86.             if key == "009":
  87.                 push("KEY_TV")
  88.                 push("KEY_9")
  89.                 push("KEY_ENTER")
  90.             if key == "010":
  91.                 push("KEY_TV")
  92.                 push("KEY_1")
  93.                 push("KEY_0")
  94.                 push("KEY_ENTER")
  95.             if key == "011":
  96.                 push("KEY_TV")
  97.                 push("KEY_1")
  98.                 push("KEY_1")
  99.                 push("KEY_ENTER")
  100.             if key == "016":
  101.                 push("KEY_TV")
  102.                 push("KEY_1")
  103.                 push("KEY_6")
  104.                 push("KEY_ENTER")
  105.             if key == "017":
  106.                 push("KEY_TV")
  107.                 push("KEY_1")
  108.                 push("KEY_7")
  109.                 push("KEY_ENTER")
  110.             if key == "018":
  111.                 push("KEY_TV")
  112.                 push("KEY_1")
  113.                 push("KEY_8")
  114.                 push("KEY_ENTER")
  115.             if key == "019":
  116.                 push("KEY_TV")
  117.                 push("KEY_1")
  118.                 push("KEY_9")
  119.                 push("KEY_ENTER")
  120.             if key == "020":
  121.                 push("KEY_TV")
  122.                 push("KEY_2")
  123.                 push("KEY_0")
  124.                 push("KEY_ENTER")
  125.             if key == "021":
  126.                 push("KEY_TV")
  127.                 push("KEY_2")
  128.                 push("KEY_1")
  129.                 push("KEY_ENTER")
  130.             if key == "023":
  131.                 push("KEY_TV")
  132.                 push("KEY_2")
  133.                 push("KEY_3")
  134.                 push("KEY_ENTER")
  135.             if key == "TV":
  136.                 push("KEY_TV")
  137.             if key == "OFF":
  138.                 push("KEY_POWEROFF")
  139.             if key == "AV1":
  140.                 push("KEY_AV1")
  141.             if key == "HDMI":
  142.                 push("KEY_HDMI")
  143.             if key == "MUTE":
  144.                 push("KEY_MUTE")
  145.             if key == "DVI1":
  146.                 push("KEY_AV1")
  147.                 push("KEY_HDMI")
  148.             if key == "DVI2":
  149.                 push("KEY_AV1")
  150.                 push("KEY_HDMI")
  151.                 time.sleep(1)
  152.                 push("KEY_HDMI")
  153.             if key == "DVI3":
  154.                 push("KEY_AV1")
  155.                 push("KEY_HDMI")
  156.                 time.sleep(1)
  157.                 push("KEY_HDMI")
  158.                 time.sleep(1)
  159.                 push("KEY_HDMI")
  160.             if key == "DVI4":
  161.                 push("KEY_AV1")
  162.                 push("KEY_HDMI")
  163.                 time.sleep(1)
  164.                 push("KEY_HDMI")
  165.                 time.sleep(1)
  166.                 push("KEY_HDMI")
  167.                 time.sleep(1)
  168.                 push("KEY_HDMI")
  169.             if key == "VOLUP":
  170.                 push("KEY_VOLUP")
  171.             if key == "VOLDOWN":
  172.                 push("KEY_VOLDOWN")
  173.             if key == "test":
  174.                 push("KEY_EXT1")
  175.  
  176.  
  177.         request.setResponseCode(http.OK)
  178.         request.setHeader('Content-type', 'text/html')
  179.         request.setHeader('charset', 'UTF-8')
  180.         return """<b>TV Fernbedienung</b><br><br>
  181.  
  182. <style>a {font-weight: bold; font-size: 40px}, td {height: 150px}</style>
  183. <table border="1" width="100%" height="100px">
  184.  <colgroup>
  185.    <col width="1*">
  186.    <col width="1*">
  187.    <col width="1*">
  188.  </colgroup>
  189. <tr>
  190. <td height="130px"><a href="http://192.168.0.232/jk?key=001">Sat 1</a></td>
  191. <td><a href="http://192.168.0.232/jk?key=002">RTL</a></td>
  192. <td><a href="http://192.168.0.232/jk?key=003">Pro 7</a></td>
  193. </tr>
  194. <tr>
  195. <td height="130px"><a href="http://192.168.0.232/jk?key=004">VOX</a></td>
  196. <td><a href="http://192.168.0.232/jk?key=005">Kablen 1</a></td>
  197. <td><a href="http://192.168.0.232/jk?key=006">RTL 2</a></td>
  198. </tr>
  199. <tr>
  200. <td height="130px"><a href="http://192.168.0.232/jk?key=007">Super RTL</a></td>
  201. <td><a href="http://192.168.0.232/jk?key=008">SIXX</a></td>
  202. <td><a href="http://192.168.0.232/jk?key=009">ARD</a></td>
  203. </tr>
  204. <tr>
  205. <td height="130px"><a href="http://192.168.0.232/jk?key=010">ZDF</a></td>
  206. <td><a href="http://192.168.0.232/jk?key=011">KIKA</a></td>
  207. <td><a href="http://192.168.0.232/jk?key=016">DMAX</a></td>
  208. </tr>
  209. <tr>
  210. <td height="130px"><a href="http://192.168.0.232/jk?key=017">3 Sat</a></td>
  211. <td><a href="http://192.168.0.232/jk?key=018">NDR</a></td>
  212. <td><a href="http://192.168.0.232/jk?key=019">WDR</a></td>
  213. </tr>
  214. <tr>
  215. <td height="130px"><a href="http://192.168.0.232/jk?key=020">HR</a></td>
  216. <td><a href="http://192.168.0.232/jk?key=021">MDR</a></td>
  217. <td><a href="http://192.168.0.232/jk?key=023">BR Alpha</a></td>
  218. </tr>
  219. <tr>
  220. <td height="130px"><a href="http://192.168.0.232/jk?key=VOLUP">VOL +</a></td>
  221. <td><a href="http://192.168.0.232/jk?key=VOLDOWN">VOL -</a></td>
  222. <td><a href="http://192.168.0.232/jk?key=MUTE">MUTE</a></td>
  223. </tr>
  224. <tr>
  225. <td height="130px"><a href="http://192.168.0.232/jk?key=DVI1">Recorder</a></td>
  226. <td><a href="http://192.168.0.232/jk?key=DVI2">Apple TV</a></td>
  227. <td><a href="http://192.168.0.232/jk?key=DVI3">Fire TV</a></td>
  228. </tr>
  229. <tr>
  230. <td height="130px"><a href="http://192.168.0.232/jk?key=DVI4">Blue Ray</a></td>
  231. <td><a href="http://192.168.0.232/jk?key=test">XXX</a></td>
  232. <td><a href="http://192.168.0.232/jk?key=XXX">XXX</a></td>
  233. </tr>
  234. <tr>
  235. <td height="130px"><a href="http://192.168.0.232/jk?key=TV">TV</a></td>
  236. <td><a href="http://192.168.0.232/jk?key=OFF">OFF</a></td>
  237. <td><a href="http://192.168.0.232/jk?key=HDMI">HDMI</a></td>
  238. </tr>
  239. </table>
  240. </body>
  241. """


Vielen Dank
Zuletzt geändert von BlackJack am Samstag 12. August 2017, 23:09, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
kluesi
User
Beiträge: 8
Registriert: Freitag 21. Juli 2017, 12:19

Re: Welches Framework nutzt meine VU SOLO2 Sat Receiver Box?

Beitragvon kluesi » Sonntag 13. August 2017, 15:41

So. Ich glaub ich hab es selbst hinbekommen. Ich habe dort wo es möglich ist timeouts eingestellt und im html habe ich die Tags für <html> und <body> weg gelassen. Jetzt scheint es kein Problem mehr zu geben.

Viele Grüße
Benutzeravatar
BlackJack
Moderator
Beiträge: 32975
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Welches Framework nutzt meine VU SOLO2 Sat Receiver Box?

Beitragvon BlackJack » Sonntag 13. August 2017, 17:33

@kluesi: Im ersten Programm werden `base64`, `socket`, `time`, `static` und `server` importiert, aber nicht verwendet.

Der Klassenname `kidsController` hält sich nicht an die Namenskonventionen und sollte `KidsController` heissen. Siehe den Style Guide for Python Code.

``global`` hat in sauberen Programmen nichts zu suchen. Insbesondere wenn man sowieso schon objektorientiert programmiert gibt es dafür keine Ausrede mehr.

`ergebnis` wird zudem auch überhaupt nicht verwendet.

Und das man ``global`` auf Klassenebene verwendet um eine Funktion ausserhalb der Klasse zu definieren habe ich noch nie gesehen. Das ist extrem verwirrend und undurchsichtig.

Importe gehören an den Anfang eines Moduls, damit man dort schnell/leicht erkennen kann wovon ein Modul abhängig ist. Zu den importierten aber nicht verwendeten Modulen kommen dann noch mal `getpass` und `sys` dazu.

Für das schliessen der Telnetverbindung böte sich die ``with``-Anweisung im Zusammenhang mit `contextlib.closing()` an.

Die Kommentare in `setProfile` bieten keinen Mehrwert, weil sie nur das wiederholen was im Vergleich beim ``if`` bereits steht.

Für die ``if``\s nach dem ersten hätte man besser ``elif`` verwendet. Beziehungsweise ist da sowieso eine Menge Wiederholung drin. Ein Wörterbuch das die Profilnamen auf die veränderlichen Teile die per Telnet übermittelt werden, abbildet, wäre weniger kopieren und einfügen gewesen.

Auch der HTML-Code besteht aus viel kopieren und einfügen und auch diese Werte hätte man mit in die Datenstruktur aufnehmen können. Denn die Profilnamen wiederholen sich auch dort noch mal.

Im zweiten Plugin ist auch wieder diese echt schräge Verwendung von ``global`` und viel kopieren und eingfügen das man mit Code hätte lösen können/sollen.
“Programs must be written for people to read, and only incidentally for machines to execute.” — Abelson & Sussman, SICP (preface to the first edition)

Zurück zu „Webframeworks“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder