Migrated to python 3 master
authorGabriel Pérez-Cerezo <gabriel@gpcf.eu>
Wed, 24 Feb 2016 15:35:25 +0000 (16:35 +0100)
committerGabriel Pérez-Cerezo <gabriel@gpcf.eu>
Wed, 24 Feb 2016 15:35:25 +0000 (16:35 +0100)
genders.conf [new file with mode: 0644]
voctrainer.py

diff --git a/genders.conf b/genders.conf
new file mode 100644 (file)
index 0000000..606d7cb
--- /dev/null
@@ -0,0 +1,2 @@
+m:El
+f:La
index 0268a58..67d230d 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python3
 # -*- coding: utf-8 -*-
 # Copyright (c) 2015, 2016 Gabriel Pérez-Cerezo
 
@@ -41,9 +41,8 @@ def build_solutions (vocfile):
     try :
         data = open(vocfile, "r")
     except IOError :
-        print _("%s does not exist") % vocfile
-        footer()
-        exit()
+        print(_("%s does not exist") % vocfile)
+        cleanup()
     if vocfile.endswith(".voc") :
         for line in data :
             ln = line.split(";")
@@ -62,19 +61,21 @@ def td (s) :
 def field(nm):
     return "<input name=\"" + nm +'">'
 def conj_form (name, conj) :
-    print '<form action="send%s" name="test" ><table>' % name
-    print thead(_("Pronomen"), _("Verbform"))
-    print "<tbody>"
+    print('<form action="send%s" name="test" ><table>' % name)
+    print(thead(_("Pronomen"), _("Verbform")))
+    print("<tbody>")
     pronouns = import_conf(PRONOUNS)
     for i in sorted(conj) :
-        print "<tr>"
-        print td(pronouns[i])
-        print td(field(i))
-    print "</tbody></table>"
-    print '<input type="submit" value="'+_("Absenden")+'!">'
-    print '</form>'
+        print("<tr>")
+        print(td(pronouns[i]))
+        print(td(field(i)))
+    print("</tbody></table>")
+    print('<input type="submit" value="'+_("Absenden")+'!">')
+    print('</form>')
 def results_sentence(reached, reachable):
-    return _("Du hast {0:.1f} von {1:d} Punkten erreicht. Das Entspricht {2:d} %.").format(reached, reachable, reached*100/reachable)
+    return _("Du hast {0:.1f} von {1:d} Punkten erreicht.\
+    Das Entspricht {2:d} %.").format(reached, reachable, int(reached*100/reachable))
+
 def score_word(x,y) :
     sim = match(None, x.strip(), y.strip()).ratio() * (WORDPOINTS -0.5)
     if  sim > 0.9*(WORDPOINTS-0.5):
@@ -86,89 +87,94 @@ def score_word(x,y) :
 def check (sol, user) :
     genders = import_conf(GENDERS)
     if not user :
-        print '<b class="error" >' + _('Keine Daten eingesendet!') + '</b><br>'
+        print('<b class="error" >' + _('Keine Daten eingesendet!') + '</b><br>')
         return 0
-    print "<table>"
-    print thead(_("Deutsch"), _("Artikel"), _("Punkte"), _("Wort"), _("Lösung"), _("Punkte"))
-    print "<tbody>"
+    print("<table>")
+    print(thead(_("Deutsch"), _("Artikel"), _("Punkte"), _("Wort"), _("Lösung"), _("Punkte")))
+    print("<tbody>")
     reachable = 0
     reached = 0
     for i in sort_sol(sol) :
-        print "<tr><td>",i
+        print("<tr>" + td(i))
         if not i in user :
             user[i] = ("","")
-        if sol[i][0] and sol[i][0] in genders.keys():
+        if sol[i][0] and sol[i][0] in list(genders.keys()):
             reachable +=1
-            print td(genders[sol[i][0]])
+            print(td(genders[sol[i][0]]))
             if sol[i][0]==user[i][0]:
-                print td("1")
+                print(td("1"))
                 reached +=1
             else :
-                print td("0")
+                print(td("0"))
         else :
-            print "<td>-<td>-"
-        print "<td>", user[i][1] #Eingabe
-        print "<td>", sol[i][1], "<td>" # Lösung
+            print("<td>-<td>-")
+        print(td(user[i][1]), td(sol[i][1]))
         reachable +=WORDPOINTS
         sim = score_word( sol[i][1], user[i][1])
         reached += sim
-        print "%.1f" % sim
-        print "</tr>"
-    print "</tbody></table>"
-    print results_sentence(reached, reachable)
+        print(td("%.1f" % sim))
+        print("</tr>")
+    print("</tbody></table>")
+    print(results_sentence(reached, reachable))
     
 def check_conj (sol,user):
     pronouns = import_conf(PRONOUNS)
     reachable = 0
     reached = 0
-    print "<table>"
-    print thead(_("Pronomen"), _("Verbform"), _("Lösung"), _("Punkte"))
-    print "<tbody>"
+    print("<table>")
+    print(thead(_("Pronomen"), _("Verbform"), _("Lösung"), _("Punkte")))
+    print("<tbody>")
     for i in sorted(sol) :
-        print "<tr>"
-        print td(pronouns[i])
+        print("<tr>")
+        print(td(pronouns[i]))
         if not i in user :
             user[i] = ("","")
-        print td(user[i][1])
-        print td(sol[i])
+        print(td(user[i][1]))
+        print(td(sol[i]))
         reachable +=WORDPOINTS
         sim = score_word( sol[i], user[i][1])
         reached += sim
-        print td("%.1f" %sim)
-        print "</tr>"
-    print "</tbody></table>"
-    print results_sentence(reached, reachable)
+        print(td("%.1f" %sim))
+        print("</tr>")
+    print("</tbody></table>")
+    print(results_sentence(reached, reachable))
         
 
     
 def sort_sol (sol):
     return sorted(sol, cmp=lambda x,y: cmp(x.lower(), y.lower()))
 def list_subjects (prefix="") :
-    print "<h2>" + _("Bitte wähle ein Thema aus:") + "</h2>"
+    print("<h2>" + _("Bitte wähle ein Thema aus:") + "</h2>")
     if themata:
-        print '<div class="ls" ><h3>' + _("Vokabeln") + '</h3>'
-        print '<ul class="voc" >'
+        print('<div class="ls" ><h3>' + _("Vokabeln") + '</h3>')
+        print('<ul class="voc" >')
         for thema in themata:
-            print "<li><a href=\"%s%s\" >%s</a>" % (prefix,thema, thema.replace(".voc",""))
-        print "</ul></div>"
+            print("<li><a href=\"%s%s\" >%s</a>" % (prefix,thema, thema.replace(".voc","")))
+        print("</ul></div>")
     if conj:
-        print '<div class="ls" ><h3>' + _('Konjugationen') +' </h3>'
-        print '<ul class="voc" >'
+        print('<div class="ls" ><h3>' + _('Konjugationen') +' </h3>')
+        print('<ul class="voc" >')
         for verb in conj :
-            print "<li><a href=\"%s%s\">%s</a>" % (prefix,verb, conj_name(verb))
-        print "</ul></div>"
+            print("<li><a href=\"%s%s\">%s</a>" % (prefix,verb, conj_name(verb)))
+        print("</ul></div>")
 
 def footer ():
-    print _("""<footer>Vokabeltrainer Copyright &copy; 2015, 2016 Gabriel
+    print(_("""<footer>Vokabeltrainer Copyright &copy; 2015, 2016 Gabriel
 Pérez-Cerezo<br>Freie Software, lizensiert unter der
 MIT-Lizenz <a href="http://git.gpcf.eu/voctrainer.git">Quellcode herunterladen</a><br>
 Der Vokabeltrainer ist noch lange nicht fertig: siehe <a href="/TODO.txt">unsere Liste</a>
 an Sachen, die wir gerne hätten.<br>
-Fehlermeldungen bitte an gabriel -arroba- gpcf -punto- eu</footer></body></html>""")
+Fehlermeldungen bitte an gabriel -arroba- gpcf -punto- eu</footer></body></html>"""))
+
+
+def cleanup () :
+    # Call this when finished
+    footer()
+    exit()
 def header (title="", navbar="") :
     if title :
         title = "– " + title
-    print '''    <!DOCTYPE html>
+    print('''    <!DOCTYPE html>
     <head><title>Vokabeltrainer %s</title>
  <META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8"  />
  <meta name="google" content="notranslate" />
@@ -182,7 +188,7 @@ def header (title="", navbar="") :
 <a class="nav" href="/voctrainer.py/">%s</a>
 <a class="nav" href="/voctrainer.py/export">%s</a>
 </div>
-''' % (title, navbar, _("Hauptmenü"), _("Lösungen Einsehen"))
+''' % (title, navbar, _("Hauptmenü"), _("Lösungen Einsehen")))
 
 print ("Content-Type: text/html; charset=UTF-8\n")
 try:
@@ -194,43 +200,36 @@ except:
 if url == "" or url == "/" :
     header()
     list_subjects()
-    footer()
-    exit()
-if url[1:] in conj :
+elif url[1:] in conj :
     name = conj_name(url[1:])
     header(name)
-    print "<h2>%s</h2>" %name
-    conj_form(url[1:], build_solutions(url[1:]))
-    footer()
-    exit()
-    
-if url[1:] in themata :
+    print("<h2>%s</h2>" %name)
+    conj_form(url[1:], build_solutions(url[1:]))  
+elif url[1:] in themata :
     header(url[1:])
     genders = import_conf(GENDERS)
-    print "<h2>%s</h2>" % (url[1:].replace(".voc",""))
-    print "<br>"
-    print '<form action="send%s" name="test" ><table>' % url[1:]
+    print("<h2>%s</h2>" % (url[1:].replace(".voc","")))
+    print("<br>")
+    print('<form action="send%s" name="test" ><table>' % url[1:])
     sol = build_solutions(url[1:])
-    print thead(_("Deutsch"), _("Artikel"), _("Übersetzung"))
-    print '<tbody>'
+    print(thead(_("Deutsch"), _("Artikel"), _("Übersetzung")))
+    print('<tbody>')
     for i in sort_sol(sol) :
-        print "<tr><td>%s</td><td>" % i,
-        if sol[i][0] and sol[i][0] in genders.keys() : # word has gender
-            for j in genders.keys() :
-                print '<input type="radio" name="%s_g" value="%s">' %(i,j) + genders[j]
+        print("<tr><td>%s</td><td>" % i)
+        if sol[i][0] and sol[i][0] in list(genders.keys()) : # word has gender
+            for j in list(genders.keys()) :
+                print('<input type="radio" name="%s_g" value="%s">' %(i,j) + genders[j])
         else :
-            print "—"
-        print '<td><input name="%s">' % i
-        print "</tr>"
-    print '</tbody></table><input type="submit" value="' + _("Absenden!") + '"></form>'
-    footer()
-    exit()
-if url[1:].startswith("send") :
+            print("—")
+        print('<td><input name="%s">' % i)
+        print("</tr>")
+    print('</tbody></table><input type="submit" value="' + _("Absenden!") + '"></form>')
+elif url[1:].startswith("send") :
 #    print "you sent it"
     form = cgi.FieldStorage()
     f=url[5:]
     header(_("Auswertung zu %s") % f, '<a class="nav" href="%s">Zurück zum Test</a>' % f)
-    print "<h2>" + _("Auswertung") + "</h2>"
+    print("<h2>" + _("Auswertung") + "</h2>")
     dt = build_solutions(f)
     ut = {} # User solutions
     for i in form :
@@ -242,7 +241,7 @@ if url[1:].startswith("send") :
                     ut[j]=[form.getfirst(i,"0"),""]
                 else :
                     ut[j][0] = form.getfirst(i,"0")
-        elif i in dt.keys() :
+        elif i in list(dt.keys()) :
             ans = form.getfirst(i, "0").strip()
             if not i in ut :
                 ut[i] = ["", ans]
@@ -252,40 +251,35 @@ if url[1:].startswith("send") :
         check(dt, ut)
     elif f.endswith(".conj"):
         check_conj(dt, ut)
-    footer()
-    exit()
-if url[1:].startswith("export") :
+elif url[1:].startswith("export") :
     f=url[7:]
     header("Export"+f)
     if f=="" :
         list_subjects("export")
-        footer()
-        exit()
+        cleanup()
     else :
         sol = build_solutions(f)
-        print "<table>"
+        print("<table>")
         if f.endswith(".conj"):
             pronouns = import_conf(PRONOUNS)
-            print thead(_("Pronomen"),_("Verbform"))
-            print "<tbody>"
+            print(thead(_("Pronomen"),_("Verbform")))
+            print("<tbody>")
             for i in sorted(sol) :
-                print "<tr>", td(pronouns[i]), td(sol[i]), "</tr>"
+                print("<tr>", td(pronouns[i]), td(sol[i]), "</tr>")
         elif f.endswith(".voc"):
             genders = import_conf(GENDERS)
-            print thead(_("Deutsch"), _("Artikel"), _("Übersetzung"))
-            print "<tbody>"
+            print(thead(_("Deutsch"), _("Artikel"), _("Übersetzung")))
+            print("<tbody>")
             for i in sort_sol(sol) :
-                print "<tr>", td(i)
-                if sol[i][0] in genders.keys() :
-                    print td(genders[sol[i][0]])
+                print("<tr>", td(i))
+                if sol[i][0] in list(genders.keys()) :
+                    print(td(genders[sol[i][0]]))
                 else:
-                    print td("—")
-                print td(sol[i][1])
-                print "</tr>"
-        print "</tbody></table>"            
-        footer()
-        exit()
-        
+                    print(td("—"))
+                print(td(sol[i][1]))
+                print("</tr>")
+        print("</tbody></table>")            
+cleanup()