creadoc: switching to rst syntax devel
authorSandro Knauß <knauss@netzguerilla.net>
Mon, 23 Apr 2012 21:38:30 +0200
branchdevel
changeset 271 b218238e76b9
parent 270 665c3ea02d35
child 272 97826c8248f9
creadoc: switching to rst syntax doc/tmpl: switching to english
createdoc.py
doc/current.html
doc/database.html
doc/images/db-schema.svg
doc/index.html
doc/tmpl/current.html
doc/tmpl/database.html
doc/tmpl/index.html
doc/tmpl/new.html
doc/tmpl/old.html
--- a/createdoc.py	Fri Mar 30 16:39:12 2012 +0200
+++ b/createdoc.py	Mon Apr 23 21:38:30 2012 +0200
@@ -2,13 +2,43 @@
 # -*- coding: utf-8 -*- 
 
 from genshi.template import TemplateLoader
-
+from genshi import Markup
 loader = TemplateLoader('doc/tmpl', auto_reload=True)
 
-import re
 import inspect
-from iro.view.xmlrpc_old import User as Current
-from iro.controller.viewinterface import Interface as New
+from docutils.core import publish_doctree
+import docutils
+
+#--
+from docutils import core
+from docutils.writers.html4css1 import Writer,HTMLTranslator
+
+class NoHeaderHTMLTranslator(HTMLTranslator):
+    def __init__(self, document):
+        HTMLTranslator.__init__(self,document)
+        self.body_prefix = []
+        self.body_suffix = []
+
+_w = Writer()
+_w.translator_class = NoHeaderHTMLTranslator
+_w.visitor_attributes = ("html_body",)
+
+def d():
+    subs = _w.interpolation_dict()
+    return "%(html_body)s"%subs
+
+_w.apply_template = d
+
+def reSTify(s):
+    d =docutils.utils.new_document("")
+    if s.tagname == "paragraph":
+        d.append(s[0])
+    else:
+        d.append(s)
+
+    return core.publish_from_doctree(d, writer=_w)
+
+from iro.view.xmlrpc import TwistedInterface as Current 
 
 from createerm import createSchemaPlot, tables, tables_cls
 
@@ -29,62 +59,86 @@
     pass
 
 class Keyword():
-    def __init__(self,name,typ,description):
+    def __init__(self, name=None, typ=None, description=None):
         self.name=name
         self.typ=typ
         self.description=description
 
-def section(text):
-    ret={}
-    li=[]
-    kw=None
-    for line in text.split("\n"):
-        if re.match("^\s*$",line):
-            continue
-
-        if line[0] not in (" ","\t"):
-            if kw:
-                ret[kw.name]=kw
-                li.append(kw)
-            l=re.match(r"^(?P<name>[a-zA-Z0-9-_.]*)\[(?P<typ>[a-zA-Z0-9-_|]*)\]:(?P<d>.*)$",line)
-            kw=Keyword(name=l.group("name"),typ=l.group("typ"),description=l.group("d"))
-        else:
-            kw.description+="\n"+line.strip()
-    if kw:
-        ret[kw.name]=kw
-        li.append(kw)
-    return ret,li
-
-
+    def __repr__(self):
+        return '<Keyword("%s", "%s", "%s")>'%(self.name, self.typ, self.description)
 
 def keywords(f):
-    doc=f.__doc__.decode('utf8')
-    kwds=re.search("Keywords:\n(?P<keywords>(?P<whitespace>\s*)(.+\n)*)\n",doc)
-    k=kwds.group("keywords")
-    #get rid of beginning whitespaces
-    k=re.sub(re.compile(r"^"+kwds.group("whitespace"),re.M),"",k)
-    return section(k)
+    NORMAL = 0
+    TYPE = 1
+    pd = publish_doctree(f.__doc__.decode('utf8'))
+
+    kws={}
+    for child in pd[1][0]:
+        kw = Keyword()
+        ftyp = NORMAL
+        for sc in child:
+            if sc.tagname == "field_name":
+                p = sc.astext().split()
+                if p[0] in ["param",]:
+                    if len(p) == 3:             #param typ name
+                        kw.name = p[2]
+                        kw.typ = p[1]
+                    if len(p) == 2:
+                        kw.name = p[1]
+                elif p[0] == "type":
+                    kw = kws[p[1]]
+                    ftyp=TYPE
+                elif p[0] in ["return","rtyp"]:
+                    break
+                else:
+                    raise Exception("Unknown field_name: %s"%(p[0]))
+            if sc.tagname == "field_body":
+                if ftyp == NORMAL:
+                    kw.description = Markup(reSTify(sc[0]))
+                if ftyp == TYPE:
+                    kw.typ = sc[0][0]
+        else:
+            kws[kw.name] = kw
+    return kws
 
 def ret(f):
-    doc=f.__doc__.decode('utf8')
-    kwds=re.search("Return:\n(?P<ret>(?P<whitespace>\s*)(.+\n)*)\n",doc)
-    k=kwds.group("ret")
-    #get rid of beginning whitespaces
-    k=re.sub(re.compile(r"^"+kwds.group("whitespace"),re.M),"",k)
-    return section(k)
-
-
-
+    NORMAL = 0
+    TYPE = 1
+    
+    pd = publish_doctree(f.__doc__.decode('utf8'))
+    for child in pd[1][0]:
+        kw = Keyword(name="return")
+        ftyp = NORMAL
+        for sc in child:
+            if sc.tagname == "field_name":
+                p = sc.astext().split()
+                if p[0] == "return":
+                    if len(p) == 2:
+                        kw.typ = p[1]
+                elif p[0] == "rtype":
+                    ftyp=TYPE
+                elif p[0] in ["param","type"]:
+                    break
+                else:
+                    raise Exception("Unknown field_name: %s"%(p[0]))
+            if sc.tagname == "field_body":
+                if ftyp == NORMAL:
+                    kw.description = Markup(reSTify(sc[0]))
+                if ftyp == TYPE:
+                    kw.typ = sc[0][0]
+        else:
+            return kw
+    
+    raise Exception("no return description")
+ 
 class Arg():
     def __init__(self,name,f):
         self.name=name
-        k,_ = keywords(f)
+        k = keywords(f)
         kwd=k[name]
         self.typ=kwd.typ
         self.description=kwd.description
 
-        
-
 class Method(Link):
     def __init__(self,name,methods):
         title=name[0].upper()+name[1:]
@@ -95,16 +149,16 @@
         for b in args:
             if b in ("self","session"):
                 continue
-            if b == "user":
-                a.append("apikey")
             else:
                 a.append(b)
         
         args = a
         self.func_line=inspect.formatargspec(args, varargs, keywords, defaults)
-        self.description = m.__doc__.split("\n")[0].decode("utf8")
+        pd = publish_doctree(m.__doc__)
+        if pd[0].tagname == "paragraph":
+            self.description = pd[0].astext()
         self.args=[Arg(a,m) for a in args]
-        _, self.rets=ret(m)
+        self.rets=[ret(m)]
 
 class Table(Link):
     def __init__(self,cls):
@@ -112,42 +166,19 @@
         self.tablename=cls.__tablename__
         title=self.tablename[0].upper()+self.tablename[1:]
         Link.__init__(self,name,title)
-        self.description = cls.__doc__.split("\n")[0].decode("utf8") 
+        
+        self.description = Markup(core.publish_string(cls.__doc__,writer=_w))
 
 
 def main():
     sites=[Site("index.html","Iro"),
            Site("current.html","API Documentation"),
-           Site("new.html","geplante API Documentation"),
-           Site("database.html","Datenbank Schema"),
-           Site("impressum.html","Impressum"),
+           Site("database.html","Datenbase Schema"),
+           Site("about.html","About us"),
            ]
 
-    current_methods = dict(inspect.getmembers(Current(None,None)))
-    current=[
-            Method("startSMS",current_methods),
-            Method("startFAX",current_methods),
-            Method("startMail",current_methods),
-            
-            Method("status",current_methods),
-            Method("stop",current_methods),
-            
-            Method("getProvider",current_methods),
-            Method("getDefaultProvider",current_methods),
-            ]
-
-    new_methods = dict(inspect.getmembers(New()))
-    newm=[
-            Method("sms",new_methods),
-            Method("fax",new_methods),
-            Method("mail",new_methods),
-            
-            Method("status",new_methods),
-            Method("stop",new_methods),
-            
-            Method("routes",new_methods),
-            Method("defaultRoute",new_methods),
-            ]
+    current_methods = dict(inspect.getmembers(Current()))
+    current=[ Method(i,current_methods) for i in Current().listMethods() if i  != "listMethods" ]
     
     t = [Table(tables_cls[str(f)]) for f in tables]
     createSchemaPlot('doc/images/db-schema.svg')
@@ -158,7 +189,7 @@
         def a(s):
             if s == site:
                 return {"class":"menu active"}
-        stream = tmpl.generate(sites=sites,active=a,current=current,new=newm,tables=t)
+        stream = tmpl.generate(sites=sites, active=a, current=current, tables=t)
         with open('doc/'+site.name, "w") as g:
             g.write(stream.render('html', doctype='html'))
 
--- a/doc/current.html	Fri Mar 30 16:39:12 2012 +0200
+++ b/doc/current.html	Mon Apr 23 21:38:30 2012 +0200
@@ -3,7 +3,7 @@
 	
 
 	<head>
-		<title>Iro ·  API docs</title>
+		<title>Iro ·  api docs current</title>
 		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 		<meta charset="utf-8">
 		<meta name="description" content="">
@@ -19,349 +19,501 @@
 		<div id="head">
 			<h1 id="logo"><a href="index.html" class="logo" title="Netzguerilla"><span>Netzguerilla</span></a></h1>
 			<ul id="menu">
-				<li><a href="index.html" class="menu">Iro</a></li><li><a href="current.html" class="menu active">API Documentation</a></li><li><a href="new.html" class="menu">geplante API Documentation</a></li><li><a href="database.html" class="menu">Datenbank Schema</a></li><li><a href="impressum.html" class="menu">Impressum</a></li>
+				<li><a href="index.html" class="menu">Iro</a></li><li><a href="current.html" class="menu active">API Documentation</a></li><li><a href="database.html" class="menu">Datenbase Schema</a></li><li><a href="about.html" class="menu">About us</a></li>
 			</ul>
 		</div>
 	</div>
 	<div id="content-container">
 		<div id="content" class="container_12">
 			<div id="main" class="grid_9">
-				<h2>API Dokumentation</h2>
+				<h2>API Documentation</h2>
 				<div class="item">
 			<p>
 			</p>
 			<ol>
-				<li value="1">1. <a href="#api-intro">Einführung</a></li>
+				<li value="1">1. <a href="#api-intro">Intro</a></li>
 				<li value="2">2.
-					<a href="#api-interfaces">Interfaces</a>
-					<ol>
-						<li value="2.1">2.1 <a href="#interface-xmlrpc">XML-RPC</a></li>
-					</ol>
+				<a href="#api-interfaces">Interfaces</a>
+				<ol>
+					<li value="2.1">2.1 <a href="#interface-xmlrpc">XML-RPC</a></li>
+					<li value="2.1">2.2 <a href="#interface-soap">SOAP</a></li>
+					<li value="2.3">2.3 <a href="#interface-json">JSON</a></li>
+					<li value="2.4">2.4 <a href="#interface-jsonp">JSONP</a></li>
+				</ol>
 				</li>
 				<li value="3">3.
-					<a href="#api-methods">Methoden</a>
+					<a href="#api-methods">Methods</a>
 					<ol>
-						<li value="3.1">3.1 <a href="#method-startSMS">StartSMS</a></li><li value="3.2">3.2 <a href="#method-startFAX">StartFAX</a></li><li value="3.3">3.3 <a href="#method-startMail">StartMail</a></li><li value="3.4">3.4 <a href="#method-status">Status</a></li><li value="3.5">3.5 <a href="#method-stop">Stop</a></li><li value="3.6">3.6 <a href="#method-getProvider">GetProvider</a></li><li value="3.7">3.7 <a href="#method-getDefaultProvider">GetDefaultProvider</a></li>
+						<li value="3.1">3.1 <a href="#method-status">Status</a></li><li value="3.2">3.2 <a href="#method-sms">Sms</a></li><li value="3.3">3.3 <a href="#method-fax">Fax</a></li><li value="3.4">3.4 <a href="#method-mail">Mail</a></li><li value="3.5">3.5 <a href="#method-routes">Routes</a></li><li value="3.6">3.6 <a href="#method-defaultRoute">DefaultRoute</a></li><li value="3.7">3.7 <a href="#method-bill">Bill</a></li><li value="3.8">3.8 <a href="#method-telnumber">Telnumber</a></li><li value="3.9">3.9 <a href="#method-email">Email</a></li>
 					</ol>
 				</li>
 			</ol>
 		</div><div class="item" id="api-intro">
-			<h3>Einführung</h3>
+			<h3>Intro</h3>
 			<p>
-				Die Iro API enthält Funktion, die für den Massenversand nützlich sind.
+				Iro API has many methods, that are usefull if you want to send a bunch of messages. This Site describes the API for Iro 1.0.
 			</p>
 		</div><div class="item" id="api-interfaces">
 			<h3>Interfaces</h3>
 			<p>
-				Die Iro API stellt zur Zeit nur ein Interfaces bereit.
+				You can use diffrent interfaces to get to same result.
 			</p>
 			<div class="item" id="interface-xmlrpc">
 				<h4>XML-RPC</h4>
 				<p>
-				Interface-URI: <code>https://<em>&lt;benutzer&gt;</em>:<em>&lt;passwort&gt;</em>@localhost:8000</code>
+					Interface-URI: <code>http://localhost:8000/xmlrpc</code>
+				</p>
+			</div>
+			<div class="item" id="interface-soap">
+				<h4>SOAP</h4>
+				<p>
+					Interface-URI: <code>http://localhost:8000/soap</code>
+				</p>
+			</div>
+			<div class="item" id="interface-json">
+				<h4>JSON</h4>
+				<p>
+					Interface-URI: <code>http://localhost:8000/json/<em>&lt;methode&gt;</em></code>
 				</p>
 				<p>
-					Die aufgerufene Methode wird dabei im <code>&lt;methodName /&gt;</code> übergeben.
+					Not yet implementet
+				</p>
+			</div>
+			<div class="item" id="interface-jsonp">
+				<h4>JSONP</h4>
+				<p>
+					Interface-URI: <code>http://localhost:8000/jsonp/<em>&lt;methode&gt;</em>?callback=&lt;callback&gt;</code>
+				</p>
+				<p>
+					Not yet implementet
 				</p>
 			</div>
 		</div><div class="item" id="api-methods">
-			<h3>Methoden</h3>
-			<div class="item" id="method-startSMS">
-				<h4>StartSMS</h4>
-				<p><code>startSMS(message, recipients, provider='default')</code></p>
-				<p>Versendet eine SMS.</p>
+			<h3>Methods</h3>
+			<div class="item" id="method-status">
+				<h4>Status</h4>
+				<p><code>status(user=None, id=False, detailed=None)</code></p>
+				<p>Returns the status of one or more jobs.</p>
 				<h5>Parameter</h5>
 				<table class="docs">
 					<thead>
 						<tr>
-							<td>Parameter</td>
-							<td>Typ</td>
-							<td>Beschreibung</td>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
+						</tr>
+					</thead>
+					<tbody>
+						<tr>
+							<td>user</td>
+							<td>string</td>
+							<td>apikey of a user</td>
+						</tr><tr>
+							<td>id</td>
+							<td>integer</td>
+							<td>one job id</td>
+						</tr><tr>
+							<td>detailed</td>
+							<td>boolean</td>
+							<td>return more details about the status</td>
+						</tr>
+					</tbody>
+				</table>
+				<h5>Return</h5>
+				<table class="docs">
+					<thead>
+						<tr>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
 						</tr>
 					</thead>
 					<tbody>
 						<tr>
-							<td>message</td>
-							<td>string</td>
-							<td> Nachricht</td>
-						</tr><tr>
-							<td>recipients</td>
-							<td>list</td>
-							<td> eine Liste von Emfänger-Nummern (gemäß ITU-T E.123)</td>
-						</tr><tr>
-							<td>provider</td>
-							<td>string</td>
-							<td> Provider über den geschickt werden soll</td>
+							<td>return</td>
+							<td>dict</td>
+							<td><ul class="simple">
+<li><cite>key</cite> -- is the job id</li>
+<li>[<cite>key</cite>][<strong>'status'</strong>] -- status of the job</li>
+</ul></td>
 						</tr>
 					</tbody>
 				</table>
-				<h5>Ausgabe</h5>
+			</div><div class="item" id="method-sms">
+				<h4>Sms</h4>
+				<p><code>sms(user, message, recipients, route='default', info='')</code></p>
+				<p>Send a sms.</p>
+				<h5>Parameter</h5>
 				<table class="docs">
 					<thead>
 						<tr>
-							<td>Parameter</td>
-							<td>Typ</td>
-							<td>Beschreibung</td>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
 						</tr>
 					</thead>
 					<tbody>
 						<tr>
-							<td>id</td>
-							<td>hash</td>
-							<td> Die ID des Auftrages</td>
+							<td>user</td>
+							<td>string</td>
+							<td>apikey of a user</td>
+						</tr><tr>
+							<td>message</td>
+							<td>string</td>
+							<td>message</td>
+						</tr><tr>
+							<td>recipients</td>
+							<td>list</td>
+							<td>a list of telefon numbers (use ITU-T E.123)</td>
+						</tr><tr>
+							<td>route</td>
+							<td>string|list</td>
+							<td>route to use to send, or a list of routes as fallback</td>
+						</tr><tr>
+							<td>info</td>
+							<td>string</td>
+							<td>a name, to combine different jobs to one billing group</td>
 						</tr>
 					</tbody>
 				</table>
-			</div><div class="item" id="method-startFAX">
-				<h4>StartFAX</h4>
-				<p><code>startFAX(subject, fax, recipients, provider='default')</code></p>
-				<p>Versendet ein FAX.</p>
-				<h5>Parameter</h5>
+				<h5>Return</h5>
 				<table class="docs">
 					<thead>
 						<tr>
-							<td>Parameter</td>
-							<td>Typ</td>
-							<td>Beschreibung</td>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
 						</tr>
 					</thead>
 					<tbody>
 						<tr>
-							<td>subject</td>
-							<td>string</td>
-							<td> der Betreff</td>
-						</tr><tr>
-							<td>fax</td>
-							<td>string</td>
-							<td> das pdf base64 kodiert</td>
-						</tr><tr>
-							<td>recipients</td>
-							<td>list</td>
-							<td> eine Liste von Emfänger-Nummern (gemäß ITU-T E.123)</td>
-						</tr><tr>
-							<td>provider</td>
-							<td>string</td>
-							<td> Provider über den geschickt werden soll</td>
+							<td>return</td>
+							<td>integer</td>
+							<td>the job id</td>
 						</tr>
 					</tbody>
 				</table>
-				<h5>Ausgabe</h5>
+			</div><div class="item" id="method-fax">
+				<h4>Fax</h4>
+				<p><code>fax(user, subject, fax, recipients, route='default', info='')</code></p>
+				<p>Send a fax.</p>
+				<h5>Parameter</h5>
 				<table class="docs">
 					<thead>
 						<tr>
-							<td>Parameter</td>
-							<td>Typ</td>
-							<td>Beschreibung</td>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
 						</tr>
 					</thead>
 					<tbody>
 						<tr>
-							<td>id</td>
-							<td>hash</td>
-							<td> Die ID des Auftrages</td>
+							<td>user</td>
+							<td>string</td>
+							<td>apikey of a user</td>
+						</tr><tr>
+							<td>subject</td>
+							<td>string</td>
+							<td>subject</td>
+						</tr><tr>
+							<td>fax</td>
+							<td>string</td>
+							<td>content (base64 encoded)</td>
+						</tr><tr>
+							<td>recipients</td>
+							<td>list</td>
+							<td>a list of telefon numbers (use ITU-T E.123)</td>
+						</tr><tr>
+							<td>route</td>
+							<td>string|list</td>
+							<td>route to use to send, or a list of routes as fallback</td>
+						</tr><tr>
+							<td>info</td>
+							<td>string</td>
+							<td>a name, to combine different jobs to one billing group</td>
 						</tr>
 					</tbody>
 				</table>
-			</div><div class="item" id="method-startMail">
-				<h4>StartMail</h4>
-				<p><code>startMail(subject, body, recipients, frm, provider='default')</code></p>
-				<p>Versendet eine Email.</p>
+				<h5>Return</h5>
+				<table class="docs">
+					<thead>
+						<tr>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
+						</tr>
+					</thead>
+					<tbody>
+						<tr>
+							<td>return</td>
+							<td>integer</td>
+							<td>the job id</td>
+						</tr>
+					</tbody>
+				</table>
+			</div><div class="item" id="method-mail">
+				<h4>Mail</h4>
+				<p><code>mail(user, subject, body, recipients, frm=None, route='default', info='')</code></p>
+				<p>Send a mail.</p>
 				<h5>Parameter</h5>
 				<table class="docs">
 					<thead>
 						<tr>
-							<td>Parameter</td>
-							<td>Typ</td>
-							<td>Beschreibung</td>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
 						</tr>
 					</thead>
 					<tbody>
 						<tr>
+							<td>user</td>
+							<td>string</td>
+							<td>apikey of a user</td>
+						</tr><tr>
 							<td>subject</td>
 							<td>string</td>
-							<td> der Betreff</td>
+							<td>subject</td>
 						</tr><tr>
 							<td>body</td>
 							<td>string</td>
-							<td> der Email Body</td>
+							<td>mail body</td>
 						</tr><tr>
 							<td>recipients</td>
 							<td>list</td>
-							<td> eine Liste von Emailadressen</td>
+							<td>a list of email addresses</td>
 						</tr><tr>
 							<td>frm</td>
 							<td>string</td>
-							<td> Die Absender Emailadresse</td>
+							<td>sender mail address</td>
 						</tr><tr>
-							<td>provider</td>
+							<td>route</td>
+							<td>string|list</td>
+							<td>route to use to send, or a list of routes as fallback</td>
+						</tr><tr>
+							<td>info</td>
 							<td>string</td>
-							<td> Provider über den geschickt werden soll</td>
+							<td>a name, to combine different jobs to one billing group</td>
 						</tr>
 					</tbody>
 				</table>
-				<h5>Ausgabe</h5>
+				<h5>Return</h5>
 				<table class="docs">
 					<thead>
 						<tr>
-							<td>Parameter</td>
-							<td>Typ</td>
-							<td>Beschreibung</td>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
 						</tr>
 					</thead>
 					<tbody>
 						<tr>
-							<td>id</td>
-							<td>hash</td>
-							<td> Die ID des Auftrages</td>
+							<td>return</td>
+							<td>integer</td>
+							<td>the job id</td>
 						</tr>
 					</tbody>
 				</table>
-			</div><div class="item" id="method-status">
-				<h4>Status</h4>
-				<p><code>status(id=None, detailed=False)</code></p>
-				<p>Gibt den aktuellen Status eines Auftrages zurück.</p>
+			</div><div class="item" id="method-routes">
+				<h4>Routes</h4>
+				<p><code>routes(user, typ=None)</code></p>
+				<p>Returns a list of all possible offernames.</p>
 				<h5>Parameter</h5>
 				<table class="docs">
 					<thead>
 						<tr>
-							<td>Parameter</td>
-							<td>Typ</td>
-							<td>Beschreibung</td>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
 						</tr>
 					</thead>
 					<tbody>
 						<tr>
-							<td>id</td>
-							<td>hash</td>
-							<td> Eine Auftragsnummer</td>
+							<td>user</td>
+							<td>string</td>
+							<td>apikey of a user</td>
 						</tr><tr>
-							<td>detailed</td>
-							<td>boolean</td>
-							<td> Details ausgeben</td>
+							<td>typ</td>
+							<td>string</td>
+							<td>a typ of message -- one of in this list [&quot;sms&quot;,&quot;fax&quot;,&quot;mail&quot;]</td>
 						</tr>
 					</tbody>
 				</table>
-				<h5>Ausgabe</h5>
+				<h5>Return</h5>
 				<table class="docs">
 					<thead>
 						<tr>
-							<td>Parameter</td>
-							<td>Typ</td>
-							<td>Beschreibung</td>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
+						</tr>
+					</thead>
+					<tbody>
+						<tr>
+							<td>return</td>
+							<td>list</td>
+							<td>a list of all possible offer names for a typ</td>
+						</tr>
+					</tbody>
+				</table>
+			</div><div class="item" id="method-defaultRoute">
+				<h4>DefaultRoute</h4>
+				<p><code>defaultRoute(user, typ=None)</code></p>
+				<p>Returns all default offernames.</p>
+				<h5>Parameter</h5>
+				<table class="docs">
+					<thead>
+						<tr>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
 						</tr>
 					</thead>
 					<tbody>
 						<tr>
-							<td>jobs</td>
-							<td>list</td>
-							<td> Eine Liste der Aufträge.</td>
-						</tr><tr>
-							<td>job.name</td>
+							<td>user</td>
 							<td>string</td>
-							<td> Angebener Name</td>
+							<td>apikey of a user</td>
 						</tr><tr>
-							<td>job.status</td>
+							<td>typ</td>
 							<td>string</td>
-							<td> Status des Auftrages</td>
+							<td>a typ of message -- one of in this list [&quot;sms&quot;,&quot;fax&quot;,&quot;mail&quot;]</td>
 						</tr>
 					</tbody>
 				</table>
-			</div><div class="item" id="method-stop">
-				<h4>Stop</h4>
-				<p><code>stop(id)</code></p>
-				<p>Stoppt den angegeben Auftrag.</p>
+				<h5>Return</h5>
+				<table class="docs">
+					<thead>
+						<tr>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
+						</tr>
+					</thead>
+					<tbody>
+						<tr>
+							<td>return</td>
+							<td>list</td>
+							<td>a list of all possible offer names for a typ</td>
+						</tr>
+					</tbody>
+				</table>
+			</div><div class="item" id="method-bill">
+				<h4>Bill</h4>
+				<p><code>bill(user=None)</code></p>
+				<p>Returns the bill, of not paid messages.</p>
 				<h5>Parameter</h5>
 				<table class="docs">
 					<thead>
 						<tr>
-							<td>Parameter</td>
-							<td>Typ</td>
-							<td>Beschreibung</td>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
 						</tr>
 					</thead>
 					<tbody>
 						<tr>
-							<td>id</td>
-							<td>hash</td>
-							<td> Eine Auftragsnummer</td>
+							<td>user</td>
+							<td>string</td>
+							<td>apikey of a user</td>
 						</tr>
 					</tbody>
 				</table>
-			</div><div class="item" id="method-getProvider">
-				<h4>GetProvider</h4>
-				<p><code>getProvider(typ)</code></p>
-				<p>Gibt eine Liste aller verfügbaren Provider zurück.</p>
-				<h5>Parameter</h5>
+				<h5>Return</h5>
 				<table class="docs">
 					<thead>
 						<tr>
-							<td>Parameter</td>
-							<td>Typ</td>
-							<td>Beschreibung</td>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
 						</tr>
 					</thead>
 					<tbody>
 						<tr>
-							<td>typ</td>
-							<td>string</td>
-							<td> Der Typ zu dem die Providerloste ausgeben werden soll
-Einer der Liste ["sms","fax","mail"]</td>
+							<td>return</td>
+							<td>dict</td>
+							<td><ul class="simple">
+<li><cite>route</cite> -- one offer name ; <strong>&quot;total&quot;</strong> complete sum</li>
+<li>[<cite>route</cite>][<cite>info</cite>][<strong>anz</strong>] -- Number of sended messages in one billing group</li>
+<li>[<cite>route</cite>][<cite>info</cite>][<strong>price</strong>] -- Price for one billing group</li>
+<li>[<cite>route</cite> | <strong>total</strong>][<strong>anz</strong>] -- Number of sended messages for one offer</li>
+<li>[<cite>route</cite> | <strong>total</strong>][<strong>price</strong>] -- Price for one offer</li>
+</ul></td>
 						</tr>
 					</tbody>
 				</table>
-				<h5>Ausgabe</h5>
+			</div><div class="item" id="method-telnumber">
+				<h4>Telnumber</h4>
+				<p><code>telnumber(recipients)</code></p>
+				<p>Return True, if all telnumbers a vaild.</p>
+				<h5>Parameter</h5>
 				<table class="docs">
 					<thead>
 						<tr>
-							<td>Parameter</td>
-							<td>Typ</td>
-							<td>Beschreibung</td>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
 						</tr>
 					</thead>
 					<tbody>
 						<tr>
-							<td>providerlist</td>
+							<td>recipients</td>
 							<td>list</td>
-							<td> Eine Liste aller möglichen Provider</td>
+							<td>a list of telnumbers (use ITU-T E.123)</td>
 						</tr>
 					</tbody>
 				</table>
-			</div><div class="item" id="method-getDefaultProvider">
-				<h4>GetDefaultProvider</h4>
-				<p><code>getDefaultProvider(typ)</code></p>
-				<p>Gibt den Standardprovider zurück.</p>
-				<h5>Parameter</h5>
+				<h5>Return</h5>
 				<table class="docs">
 					<thead>
 						<tr>
-							<td>Parameter</td>
-							<td>Typ</td>
-							<td>Beschreibung</td>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
 						</tr>
 					</thead>
 					<tbody>
 						<tr>
-							<td>typ</td>
-							<td>string</td>
-							<td> Der Typ zu dem die Providerloste ausgeben werden soll
-Einer der Liste ["sms","fax","mail"]</td>
+							<td>return</td>
+							<td>boolean</td>
+							<td>True -- all numbers are valid</td>
 						</tr>
 					</tbody>
 				</table>
-				<h5>Ausgabe</h5>
+			</div><div class="item" id="method-email">
+				<h4>Email</h4>
+				<p><code>email(recipients)</code></p>
+				<p>Return True, if all mailadresses a valid.</p>
+				<h5>Parameter</h5>
 				<table class="docs">
 					<thead>
 						<tr>
-							<td>Parameter</td>
-							<td>Typ</td>
-							<td>Beschreibung</td>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
 						</tr>
 					</thead>
 					<tbody>
 						<tr>
-							<td>provider</td>
-							<td>string</td>
-							<td> Der Standardprovider für den angeben Typ</td>
+							<td>recipients</td>
+							<td>list</td>
+							<td>a list of mailadresses</td>
+						</tr>
+					</tbody>
+				</table>
+				<h5>Return</h5>
+				<table class="docs">
+					<thead>
+						<tr>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
+						</tr>
+					</thead>
+					<tbody>
+						<tr>
+							<td>return</td>
+							<td>boolean</td>
+							<td>True -- all addresses are valid</td>
 						</tr>
 					</tbody>
 				</table>
--- a/doc/database.html	Fri Mar 30 16:39:12 2012 +0200
+++ b/doc/database.html	Mon Apr 23 21:38:30 2012 +0200
@@ -3,7 +3,7 @@
 	
 
 	<head>
-		<title>Iro ·  Datenbank</title>
+		<title>Iro ·  Datenbase</title>
 		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 		<meta charset="utf-8">
 		<meta name="description" content="">
@@ -19,47 +19,55 @@
 		<div id="head">
 			<h1 id="logo"><a href="index.html" class="logo" title="Netzguerilla"><span>Netzguerilla</span></a></h1>
 			<ul id="menu">
-				<li><a href="index.html" class="menu">Iro</a></li><li><a href="current.html" class="menu">API Documentation</a></li><li><a href="new.html" class="menu">geplante API Documentation</a></li><li><a href="database.html" class="menu active">Datenbank Schema</a></li><li><a href="impressum.html" class="menu">Impressum</a></li>
+				<li><a href="index.html" class="menu">Iro</a></li><li><a href="current.html" class="menu">API Documentation</a></li><li><a href="database.html" class="menu active">Datenbase Schema</a></li><li><a href="about.html" class="menu">About us</a></li>
 			</ul>
 		</div>
 	</div>
 	<div id="content-container">
 		<div id="content" class="container_12">
 			<div id="main" class="grid_9">
-				<h2>Datenbank Schema</h2>
+				<h2>Datenbase Schema</h2>
 				<div class="item">
 			<p>
 			</p>
 			<ol>
-				<li value="1">1. <a href="#schema">Datenbankschema</a></li>
+				<li value="1">1. <a href="#schema">Datenbase schema</a></li>
 				<li value="3">3.
-					<a href="#tables">Tabellen</a>
+					<a href="#tables">Tables</a>
 					<ol>
-						<li value="2.1">2.1 <a href="#table-apiuser">Apiuser</a></li><li value="2.2">2.2 <a href="#table-job">Job</a></li><li value="2.3">2.3 <a href="#table-message">Message</a></li><li value="2.4">2.4 <a href="#table-offer">Offer</a></li><li value="2.5">2.5 <a href="#table-userright">Userright</a></li>
+						<li value="2.1">2.1 <a href="#table-apiuser">Apiuser</a></li><li value="2.2">2.2 <a href="#table-offer">Offer</a></li><li value="2.3">2.3 <a href="#table-job">Job</a></li><li value="2.4">2.4 <a href="#table-userright">Userright</a></li><li value="2.5">2.5 <a href="#table-message">Message</a></li>
 					</ol>
 				</li>
 			</ol>
 		</div><div class="item" id="schema">
 			<h3>Schema</h3>
 			<img src="images/db-schema.svg">
-			<p>Dies ist eine Übersicht der benutzen Tabellen die Iro benötigt.</p>
+			<p>Overview of used tables.</p>
 		</div><div class="item" id="tables">
-			<h3>Tabellen</h3>
+			<h3>Tables</h3>
 			<div class="item" id="table-apiuser">
 				<h4>Apiuser</h4>
-				<p>Die Benutzerdatenbank von Iro.</p>
+				<p><p>An user in iro.</p></p>
+			</div><div class="item" id="table-offer">
+				<h4>Offer</h4>
+				<p><p>All possible Offers over a Message can be sended. <strong>provider</strong>, <strong>typ</strong> and <strong>route</strong> are used to get the data form configuration file.</p></p>
 			</div><div class="item" id="table-job">
 				<h4>Job</h4>
-				<p>Ein kompletter Auftrag, der an Iro zum verschicken übergeben wird. Status zeigt den generellen Status des Auftrages an (<em>init</em>, <em>started</em>, <em>sending</em>, <em>sended</em> oder <em>error</em>). <em>info</em> wird verwendet um dem Benutzer eine Möglickeit zu geben verschiede Auftragsgruppen zu erstellen.</p>
+				<p><p>A complete Job.</p>
+<blockquote>
+<ul class="simple">
+<li><strong>status</strong> show the status of the job (<tt class="docutils literal">init</tt>, <tt class="docutils literal">started</tt>, <tt class="docutils literal">sending</tt>, <tt class="docutils literal">sended</tt> or <tt class="docutils literal">error</tt>).</li>
+<li><strong>info</strong> is used to make it possible to create different billing groups for user.</li>
+</ul>
+</blockquote></p>
+			</div><div class="item" id="table-userright">
+				<h4>Userright</h4>
+				<p><p>Allowed offers for one user. Default routes are sorted by <strong>default</strong> value.</p></p>
 			</div><div class="item" id="table-message">
 				<h4>Message</h4>
-				<p>Wenn ein Vorgang von Iro Kosten erzeugt hat wird eine neue Zeile eingefügt. Solange nicht bezahlt wurde ist <em>isBilled=0</em>.</p>
-			</div><div class="item" id="table-offer">
-				<h4>Offer</h4>
-				<p>Alle Routen über die SMS, Faxe und Mails verschickt werden könnnen. <em>provider</em>, <em>typ</em> und <em>route</em> werden verwendet, um die entsprechenden Zugangsdaten laden zu können.</p>
-			</div><div class="item" id="table-userright">
-				<h4>Userright</h4>
-				<p>Über welche Routen darf ein Benutzer Daten verschicken und welches sind die Standardrouten (<em>isDefault=1</em>) für den Benuter.</p>
+				<p><p>A message that has created costs.</p>
+<blockquote>
+<strong>isBilled</strong> is False since the bill is paid.</blockquote></p>
 			</div>
 		</div>
 			</div>
--- a/doc/images/db-schema.svg	Fri Mar 30 16:39:12 2012 +0200
+++ b/doc/images/db-schema.svg	Mon Apr 23 21:38:30 2012 +0200
@@ -4,93 +4,96 @@
 <!-- Generated by graphviz version 2.26.3 (20100126.1600)
  -->
 <!-- Title: G Pages: 1 -->
-<svg width="468pt" height="131pt"
- viewBox="0.00 0.00 468.00 131.29" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph1" class="graph" transform="scale(0.89313 0.89313) rotate(0) translate(4 143)">
+<svg width="468pt" height="126pt"
+ viewBox="0.00 0.00 468.00 125.74" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(0.83274 0.83274) rotate(0) translate(4 147)">
 <title>G</title>
-<polygon fill="white" stroke="white" points="-4,5 -4,-143 521,-143 521,5 -4,5"/>
+<polygon fill="white" stroke="white" points="-4,5 -4,-147 559,-147 559,5 -4,5"/>
 <!-- message -->
 <g id="node1" class="node"><title>message</title>
-<polygon fill="none" stroke="black" points="8,-25.5 8,-118.5 98,-118.5 98,-25.5 8,-25.5"/>
-<text text-anchor="start" x="36.5" y="-109.367" font-family="Bitstream-Vera Sans" font-size="7.00">message</text>
-<polygon fill="none" stroke="black" points="9,-103 9,-105 97,-105 97,-103 9,-103"/>
-<text text-anchor="start" x="11" y="-95.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; id : INTEGER</text>
-<text text-anchor="start" x="11" y="-84.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; recipient : VARCHAR</text>
-<text text-anchor="start" x="11" y="-73.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; isBilled : BOOLEAN</text>
-<text text-anchor="start" x="11" y="-62.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; date : DATETIME</text>
-<text text-anchor="start" x="11" y="-51.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; price : NUMERIC(8, 2)</text>
-<text text-anchor="start" x="11" y="-40.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; job : INTEGER</text>
-<text text-anchor="start" x="11" y="-29.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; offer : VARCHAR</text>
+<polygon fill="none" stroke="black" points="8,-18.5 8,-133.5 112,-133.5 112,-18.5 8,-18.5"/>
+<text text-anchor="start" x="43.5" y="-124.367" font-family="Bitstream-Vera Sans" font-size="7.00">message</text>
+<polygon fill="none" stroke="black" points="9,-118 9,-120 111,-120 111,-118 9,-118"/>
+<text text-anchor="start" x="11" y="-110.867" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; id : INTEGER</text>
+<text text-anchor="start" x="11" y="-99.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; recipient : VARCHAR(100)</text>
+<text text-anchor="start" x="11" y="-88.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; isBilled : BOOLEAN</text>
+<text text-anchor="start" x="11" y="-77.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; date : DATETIME</text>
+<text text-anchor="start" x="11" y="-66.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; price : NUMERIC(8, 4)</text>
+<text text-anchor="start" x="11" y="-55.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; count : INTEGER</text>
+<text text-anchor="start" x="11" y="-44.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; exID : VARCHAR(100)</text>
+<text text-anchor="start" x="11" y="-33.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; job : VARCHAR(40)</text>
+<text text-anchor="start" x="11" y="-22.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; offer : VARCHAR(100)</text>
 </g>
 <!-- job -->
 <g id="node3" class="node"><title>job</title>
-<polygon fill="none" stroke="black" points="150.5,-75 150.5,-135 235.5,-135 235.5,-75 150.5,-75"/>
-<text text-anchor="start" x="187.5" y="-126.367" font-family="Bitstream-Vera Sans" font-size="7.00">job</text>
-<polygon fill="none" stroke="black" points="152,-120 152,-122 235,-122 235,-120 152,-120"/>
-<text text-anchor="start" x="154" y="-112.867" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; hash : VARCHAR</text>
-<text text-anchor="start" x="154" y="-101.867" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; info : VARCHAR</text>
-<text text-anchor="start" x="154" y="-90.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; status : VARCHAR(7)</text>
-<text text-anchor="start" x="154" y="-79.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; user : VARCHAR</text>
+<polygon fill="none" stroke="black" points="164.5,-79 164.5,-139 251.5,-139 251.5,-79 164.5,-79"/>
+<text text-anchor="start" x="202.5" y="-130.367" font-family="Bitstream-Vera Sans" font-size="7.00">job</text>
+<polygon fill="none" stroke="black" points="166,-124 166,-126 251,-126 251,-124 166,-124"/>
+<text text-anchor="start" x="168" y="-116.867" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; id : INTEGER</text>
+<text text-anchor="start" x="168" y="-105.867" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; info : VARCHAR(100)</text>
+<text text-anchor="start" x="168" y="-94.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; status : VARCHAR(7)</text>
+<text text-anchor="start" x="168" y="-83.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; user : VARCHAR(100)</text>
 </g>
 <!-- message&#45;&gt;job -->
 <g id="edge2" class="edge"><title>message&#45;&gt;job</title>
-<path fill="none" stroke="black" d="M106.327,-84.57C115.412,-86.7114 124.894,-88.9465 134.112,-91.1194"/>
-<ellipse fill="none" stroke="black" cx="138.236" cy="-92.0912" rx="4.00001" ry="4.00001"/>
-<text text-anchor="middle" x="132.338" y="-92.7431" font-family="Bitstream-Vera Sans" font-size="7.00">+ hash</text>
-<text text-anchor="middle" x="116.118" y="-80.2359" font-family="Bitstream-Vera Sans" font-size="7.00">+ job</text>
+<path fill="none" stroke="black" d="M120.197,-89.4224C129.482,-91.4926 139.067,-93.6298 148.34,-95.6974"/>
+<ellipse fill="none" stroke="black" cx="152.488" cy="-96.6224" rx="4.00001" ry="4.00001"/>
+<text text-anchor="middle" x="146.627" y="-97.3455" font-family="Bitstream-Vera Sans" font-size="7.00">+ id</text>
+<text text-anchor="middle" x="129.963" y="-84.9699" font-family="Bitstream-Vera Sans" font-size="7.00">+ job</text>
 </g>
 <!-- offer -->
 <g id="node5" class="node"><title>offer</title>
-<polygon fill="none" stroke="black" points="288,-4 288,-64 370,-64 370,-4 288,-4"/>
-<text text-anchor="start" x="320.5" y="-55.3667" font-family="Bitstream-Vera Sans" font-size="7.00">offer</text>
-<polygon fill="none" stroke="black" points="289,-49 289,-51 369,-51 369,-49 289,-49"/>
-<text text-anchor="start" x="291" y="-41.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; name : VARCHAR</text>
-<text text-anchor="start" x="291" y="-30.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; provider : VARCHAR</text>
-<text text-anchor="start" x="291" y="-19.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; route : VARCHAR</text>
-<text text-anchor="start" x="291" y="-8.86667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; typ : VARCHAR</text>
+<polygon fill="none" stroke="black" points="304.5,-4 304.5,-64 405.5,-64 405.5,-4 304.5,-4"/>
+<text text-anchor="start" x="347" y="-55.3667" font-family="Bitstream-Vera Sans" font-size="7.00">offer</text>
+<polygon fill="none" stroke="black" points="306,-49 306,-51 405,-51 405,-49 306,-49"/>
+<text text-anchor="start" x="308" y="-41.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; name : VARCHAR(100)</text>
+<text text-anchor="start" x="308" y="-30.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; provider : VARCHAR(100)</text>
+<text text-anchor="start" x="308" y="-19.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; route : VARCHAR(100)</text>
+<text text-anchor="start" x="308" y="-8.86667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; typ : VARCHAR(100)</text>
 </g>
 <!-- message&#45;&gt;offer -->
 <g id="edge4" class="edge"><title>message&#45;&gt;offer</title>
-<path fill="none" stroke="black" d="M106.216,-64.6732C153.699,-58.1357 223.047,-48.5878 271.726,-41.8855"/>
-<ellipse fill="none" stroke="black" cx="275.694" cy="-41.3393" rx="4.00001" ry="4.00001"/>
-<text text-anchor="middle" x="271.255" y="-43.9165" font-family="Bitstream-Vera Sans" font-size="7.00">+ name</text>
-<text text-anchor="middle" x="114.618" y="-56.9504" font-family="Bitstream-Vera Sans" font-size="7.00">+ offer</text>
+<path fill="none" stroke="black" d="M120.053,-67.45C168.906,-60.4948 237.788,-50.6879 288.339,-43.4907"/>
+<ellipse fill="none" stroke="black" cx="292.329" cy="-42.9227" rx="4.00001" ry="4.00001"/>
+<text text-anchor="middle" x="287.912" y="-45.5203" font-family="Bitstream-Vera Sans" font-size="7.00">+ name</text>
+<text text-anchor="middle" x="128.43" y="-59.6886" font-family="Bitstream-Vera Sans" font-size="7.00">+ offer</text>
 </g>
 <!-- userright -->
 <g id="node2" class="node"><title>userright</title>
-<polygon fill="none" stroke="black" points="422.5,-46.5 422.5,-95.5 507.5,-95.5 507.5,-46.5 422.5,-46.5"/>
-<text text-anchor="start" x="448.5" y="-86.3667" font-family="Bitstream-Vera Sans" font-size="7.00">userright</text>
-<polygon fill="none" stroke="black" points="424,-80 424,-82 507,-82 507,-80 424,-80"/>
-<text text-anchor="start" x="426" y="-72.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; user : VARCHAR</text>
-<text text-anchor="start" x="426" y="-61.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; offer : VARCHAR</text>
-<text text-anchor="start" x="426" y="-50.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; isDefault : BOOLEAN</text>
+<polygon fill="none" stroke="black" points="458,-49.5 458,-98.5 546,-98.5 546,-49.5 458,-49.5"/>
+<text text-anchor="start" x="485" y="-89.3667" font-family="Bitstream-Vera Sans" font-size="7.00">userright</text>
+<polygon fill="none" stroke="black" points="459,-83 459,-85 545,-85 545,-83 459,-83"/>
+<text text-anchor="start" x="461" y="-75.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; user : VARCHAR(100)</text>
+<text text-anchor="start" x="461" y="-64.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; offer : VARCHAR(100)</text>
+<text text-anchor="start" x="461" y="-53.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; default : INTEGER</text>
 </g>
 <!-- apiuser -->
 <g id="node4" class="node"><title>apiuser</title>
-<polygon fill="none" stroke="black" points="291.5,-90 291.5,-128 366.5,-128 366.5,-90 291.5,-90"/>
-<text text-anchor="start" x="315.5" y="-119.367" font-family="Bitstream-Vera Sans" font-size="7.00">apiuser</text>
-<polygon fill="none" stroke="black" points="293,-113 293,-115 366,-115 366,-113 293,-113"/>
-<text text-anchor="start" x="295" y="-105.867" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; name : VARCHAR</text>
-<text text-anchor="start" x="295" y="-94.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; apikey : VARCHAR</text>
+<polygon fill="none" stroke="black" points="309,-89.5 309,-138.5 401,-138.5 401,-89.5 309,-89.5"/>
+<text text-anchor="start" x="341" y="-129.367" font-family="Bitstream-Vera Sans" font-size="7.00">apiuser</text>
+<polygon fill="none" stroke="black" points="310,-123 310,-125 400,-125 400,-123 310,-123"/>
+<text text-anchor="start" x="312" y="-115.867" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; name : VARCHAR(100)</text>
+<text text-anchor="start" x="312" y="-104.867" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; ng_kunde : INTEGER</text>
+<text text-anchor="start" x="312" y="-93.8667" font-family="Bitstream-Vera Sans" font-size="7.00">&#45; apikey : VARCHAR(50)</text>
 </g>
 <!-- job&#45;&gt;apiuser -->
 <g id="edge10" class="edge"><title>job&#45;&gt;apiuser</title>
-<path fill="none" stroke="black" d="M243.641,-106.489C253.891,-106.791 264.704,-107.109 275.063,-107.414"/>
-<ellipse fill="none" stroke="black" cx="279.255" cy="-107.537" rx="4" ry="4"/>
-<text text-anchor="middle" x="274.069" y="-109.312" font-family="Bitstream-Vera Sans" font-size="7.00">+ name</text>
-<text text-anchor="middle" x="252.825" y="-100.232" font-family="Bitstream-Vera Sans" font-size="7.00">+ user</text>
+<path fill="none" stroke="black" d="M259.827,-110.763C270.366,-111.121 281.558,-111.502 292.424,-111.872"/>
+<ellipse fill="none" stroke="black" cx="296.657" cy="-112.015" rx="4" ry="4"/>
+<text text-anchor="middle" x="291.453" y="-113.767" font-family="Bitstream-Vera Sans" font-size="7.00">+ name</text>
+<text text-anchor="middle" x="269.028" y="-104.547" font-family="Bitstream-Vera Sans" font-size="7.00">+ user</text>
 </g>
 <!-- apiuser&#45;&gt;userright -->
 <g id="edge6" class="edge"><title>apiuser&#45;&gt;userright</title>
-<path fill="none" stroke="black" d="M374.664,-96.2408C387.32,-92.7048 401.136,-88.8443 414.071,-85.23"/>
-<text text-anchor="middle" x="406.48" y="-89.4392" font-family="Bitstream-Vera Sans" font-size="7.00">+ name</text>
-<text text-anchor="middle" x="382.256" y="-87.4316" font-family="Bitstream-Vera Sans" font-size="7.00">+ user</text>
+<path fill="none" stroke="black" d="M409.32,-99.2191C422.569,-95.6138 436.713,-91.7653 449.858,-88.1883"/>
+<text text-anchor="middle" x="442.223" y="-92.3458" font-family="Bitstream-Vera Sans" font-size="7.00">+ name</text>
+<text text-anchor="middle" x="416.955" y="-90.4616" font-family="Bitstream-Vera Sans" font-size="7.00">+ user</text>
 </g>
 <!-- offer&#45;&gt;userright -->
 <g id="edge8" class="edge"><title>offer&#45;&gt;userright</title>
-<path fill="none" stroke="black" d="M378.099,-47.3578C389.816,-50.5456 402.347,-53.9546 414.141,-57.1634"/>
-<text text-anchor="middle" x="404.286" y="-56.5621" font-family="Bitstream-Vera Sans" font-size="7.00">+ name</text>
-<text text-anchor="middle" x="387.954" y="-43.3591" font-family="Bitstream-Vera Sans" font-size="7.00">+ offer</text>
+<path fill="none" stroke="black" d="M413.521,-49.924C425.531,-53.192 438.098,-56.6116 449.865,-59.8135"/>
+<text text-anchor="middle" x="440.01" y="-59.2118" font-family="Bitstream-Vera Sans" font-size="7.00">+ name</text>
+<text text-anchor="middle" x="423.375" y="-45.9257" font-family="Bitstream-Vera Sans" font-size="7.00">+ offer</text>
 </g>
 </g>
 </svg>
--- a/doc/index.html	Fri Mar 30 16:39:12 2012 +0200
+++ b/doc/index.html	Mon Apr 23 21:38:30 2012 +0200
@@ -19,7 +19,7 @@
 		<div id="head">
 			<h1 id="logo"><a href="index.html" class="logo" title="Netzguerilla"><span>Netzguerilla</span></a></h1>
 			<ul id="menu">
-				<li><a href="index.html" class="menu active">Iro</a></li><li><a href="current.html" class="menu">API Documentation</a></li><li><a href="new.html" class="menu">geplante API Documentation</a></li><li><a href="database.html" class="menu">Datenbank Schema</a></li><li><a href="impressum.html" class="menu">Impressum</a></li>
+				<li><a href="index.html" class="menu active">Iro</a></li><li><a href="current.html" class="menu">API Documentation</a></li><li><a href="database.html" class="menu">Datenbase Schema</a></li><li><a href="about.html" class="menu">About us</a></li>
 			</ul>
 		</div>
 	</div>
@@ -28,8 +28,29 @@
 			<div id="main" class="grid_9">
 				<h2>Iro</h2>
 				<div class="item">
+			<h3>What it is all about?</h3>
 			<p>
-				Iro ist toll, ist aber noch nicht fertig.
+			Iro is a non blocking server for sending a message to a bunsh of recipient. It can handle diffrent types of message typs and can be extended easially.
+			It was initially written for sms backend of <a href="http://castorticker.de">castorticker.de</a>. Diffrent backends are supportes by Iro.
+			</p>
+		</div><div class="item">
+			<h3>Supported Backends</h3>
+			<p>
+			A backend is a provider, that actually sends the message.
+			<ul>
+				<li><b>smtp</b> with TLS and SSL</li>
+				<li><b><a href="http://smstrade.de">smstrade</a></b> all diffrent routes are selectable</li>
+				<li><b><a href="http://sipgate.de">sipgate</a></b> fax and sms</li>
+			</ul>
+			</p>
+		</div><div class="item">
+			<h3>Installation</h3>
+			<p>
+			You'll find the installtion instruction under <a href="dev/install.html">dev/install</a>.
+			</p>
+			<h3>Documentation</h3>
+			<p>
+				All documentation for extending iro see <a href="dev/index.html">dev</a>
 			</p>
 		</div>
 			</div>
--- a/doc/tmpl/current.html	Fri Mar 30 16:39:12 2012 +0200
+++ b/doc/tmpl/current.html	Mon Apr 23 21:38:30 2012 +0200
@@ -5,66 +5,91 @@
 	xmlns:py="http://genshi.edgewall.org/">
 	<xi:include href="layout.tmpl" />
 	<head>
-		<title>API docs</title>
+		<title>api docs current</title>
 	</head>
 	<body>
-		<title>API Dokumentation</title>
+		<title>API Documentation</title>
 		<div class="item">
 			<p>
-				
+
 			</p>
 			<ol>
-				<li value="1">1. <a href="#api-intro">Einführung</a></li>
+				<li value="1">1. <a href="#api-intro">Intro</a></li>
 				<li value="2">2. 
-					<a href="#api-interfaces">Interfaces</a>
-					<ol>
-						<li value="2.1">2.1 <a href="#interface-xmlrpc">XML-RPC</a></li>
-					</ol>
+				<a href="#api-interfaces">Interfaces</a>
+				<ol>
+					<li value="2.1">2.1 <a href="#interface-xmlrpc">XML-RPC</a></li>
+					<li value="2.1">2.2 <a href="#interface-soap">SOAP</a></li>
+					<li value="2.3">2.3 <a href="#interface-json">JSON</a></li>
+					<li value="2.4">2.4 <a href="#interface-jsonp">JSONP</a></li>
+				</ol>
 				</li>
 				<li value="3">3. 
-					<a href="#api-methods">Methoden</a>
+					<a href="#api-methods">Methods</a>
 					<ol>
 						<li py:for="(key,method) in enumerate(current)" value="3.${key+1}">3.${key+1} <a href="#method-${method.name}">${method.title}</a></li>
 					</ol>				
 				</li>
+
 			</ol>
 		</div>
 		<div class="item" id="api-intro">
-			<h3>Einführung</h3>
+			<h3>Intro</h3>
 			<p>
-				Die Iro API enthält Funktion, die für den Massenversand nützlich sind.
+				Iro API has many methods, that are usefull if you want to send a bunch of messages. This Site describes the API for Iro 1.0.
 			</p>
 		</div>
 		<div class="item" id="api-interfaces">
 			<h3>Interfaces</h3>
 			<p>
-				Die Iro API stellt zur Zeit nur ein Interfaces bereit.
+				You can use diffrent interfaces to get to same result.
 			</p>
 			<div class="item" id="interface-xmlrpc">
 				<h4>XML-RPC</h4>
 				<p>
-				Interface-URI: <code>https://<em>&lt;benutzer&gt;</em>:<em>&lt;passwort&gt;</em>@localhost:8000</code>
+					Interface-URI: <code>http://localhost:8000/xmlrpc</code>
+				</p>
+			</div>
+			<div class="item" id="interface-soap">
+				<h4>SOAP</h4>
+				<p>
+					Interface-URI: <code>http://localhost:8000/soap</code>
+				</p>
+			</div>
+			<div class="item" id="interface-json">
+				<h4>JSON</h4>
+				<p>
+					Interface-URI: <code>http://localhost:8000/json/<em>&lt;methode&gt;</em></code>
 				</p>
 				<p>
-					Die aufgerufene Methode wird dabei im <code>&lt;methodName /&gt;</code> übergeben.
+					Not yet implementet
+				</p>
+			</div>
+			<div class="item" id="interface-jsonp">
+				<h4>JSONP</h4>
+				<p>
+					Interface-URI: <code>http://localhost:8000/jsonp/<em>&lt;methode&gt;</em>?callback=&lt;callback&gt;</code>
+				</p>
+				<p>
+					Not yet implementet
 				</p>
 			</div>
 		</div>
 		<div class="item" id="api-methods">
-			<h3>Methoden</h3>
+			<h3>Methods</h3>
 			<div py:for="method in current" class="item" id="method-${method.name}">
 				<h4>${method.title}</h4>
 				<p><code>${method.name}${method.func_line}</code></p>
 				<p py:content="method.description">
-					Diese Methode at bis jetzt noch keine Beschreibung.
+					No description
 				</p>
 				<h5>Parameter</h5>
 				<table class="docs">
 					<thead>
 						<tr>
-							<td>Parameter</td>
-							<td>Typ</td>
-							<td>Beschreibung</td>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
 						</tr>					
 					</thead>
 					<tbody>
@@ -76,13 +101,13 @@
 					</tbody>
 				</table>
 				<py:if test="method.rets">
-				<h5>Ausgabe</h5>
+				<h5>Return</h5>
 				<table class="docs">
 					<thead>
 						<tr>
-							<td>Parameter</td>
-							<td>Typ</td>
-							<td>Beschreibung</td>
+							<td>parameter</td>
+							<td>type</td>
+							<td>description</td>
 						</tr>					
 					</thead>
 					<tbody>
--- a/doc/tmpl/database.html	Fri Mar 30 16:39:12 2012 +0200
+++ b/doc/tmpl/database.html	Mon Apr 23 21:38:30 2012 +0200
@@ -5,18 +5,18 @@
 	xmlns:py="http://genshi.edgewall.org/">
 	<xi:include href="layout.tmpl" />
 	<head>
-		<title>Datenbank</title>
+		<title>Datenbase</title>
 	</head>
 	<body>
-		<title>Datenbank Schema</title>
+		<title>Datenbase Schema</title>
 		<div class="item">
 			<p>
 
 			</p>
 			<ol>
-				<li value="1">1. <a href="#schema">Datenbankschema</a></li>
+				<li value="1">1. <a href="#schema">Datenbase schema</a></li>
 				<li value="3">3. 
-					<a href="#tables">Tabellen</a>
+					<a href="#tables">Tables</a>
 					<ol>
 						<li py:for="(key,table) in enumerate(tables)" value="2.${key+1}">2.${key+1} <a href="#table-${table.tablename}">${table.title}</a></li>
 					</ol>				
@@ -28,14 +28,14 @@
 		<div class="item" id="schema">
 			<h3>Schema</h3>
 			<img src="images/db-schema.svg" />
-			<p>Dies ist eine Übersicht der benutzen Tabellen die Iro benötigt.</p>
+			<p>Overview of used tables.</p>
 		</div>
 		<div class="item" id="tables">
-			<h3>Tabellen</h3>
+			<h3>Tables</h3>
 			<div py:for="table in tables" class="item" id="table-${table.tablename}">
 				<h4>${table.title}</h4>
-				<p py:content="Markup(table.description)">
-					Dieser Tabelle fehlt noch die Beschreibung.
+				<p py:content="table.description">
+					No description available.
 				</p>
 			</div>
 		</div>
--- a/doc/tmpl/index.html	Fri Mar 30 16:39:12 2012 +0200
+++ b/doc/tmpl/index.html	Mon Apr 23 21:38:30 2012 +0200
@@ -10,8 +10,33 @@
 	<body>
 		<title>Iro</title>
 		<div class="item">
+			<h3>What it is all about?</h3>
 			<p>
-				Iro ist toll, ist aber noch nicht fertig.
+			Iro is a non blocking server for sending a message to a bunsh of recipient. It can handle diffrent types of message typs and can be extended easially.
+			It was initially written for sms backend of <a href="http://castorticker.de">castorticker.de</a>. Diffrent backends are supportes by Iro.
+			</p>
+		</div>
+		<div class="item">
+			<h3>Supported Backends</h3>
+			<p>
+			A backend is a provider, that actually sends the message. 
+			<ul>
+				<li><b>smtp</b> with TLS and SSL</li>
+				<li><b><a href="http://smstrade.de">smstrade</a></b> all diffrent routes are selectable</li>
+				<li><b><a href="http://sipgate.de">sipgate</a></b> fax and sms</li>
+			</ul>
+			</p>
+
+		</div>
+		<div class="item">
+			<h3>Installation</h3>
+			<p>
+			You'll find the installtion instruction under <a href="dev/install.html">dev/install</a>.
+			</p>
+
+			<h3>Documentation</h3>
+			<p>
+				All documentation for extending iro see <a href="dev/index.html">dev</a>
 			</p>
 		</div>
 	</body>
--- a/doc/tmpl/new.html	Fri Mar 30 16:39:12 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,164 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
-"http://www.w3.org/TR/html4/strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-	xmlns:xi="http://www.w3.org/2001/XInclude"
-	xmlns:py="http://genshi.edgewall.org/">
-	<xi:include href="layout.tmpl" />
-	<head>
-		<title>api docs new</title>
-	</head>
-	<body>
-		<title>geplante API Dokumentation</title>
-		<div class="item">
-			<p>
-
-			</p>
-			<ol>
-				<li value="1">1. <a href="#api-intro">Einführung</a></li>
-				<li value="2">2. 
-				<a href="#api-interfaces">Interfaces</a>
-				<ol>
-					<li value="2.1">2.1 <a href="#interface-xmlrpc">XML-RPC</a></li>
-					<li value="2.1">2.1 <a href="#interface-soap">SOAP</a></li>
-					<li value="2.2">2.2 <a href="#interface-xml">XML</a></li>
-					<li value="2.3">2.3 <a href="#interface-json">JSON</a></li>
-					<li value="2.4">2.4 <a href="#interface-jsonp">JSONP</a></li>
-					<li value="2.5">2.5 <a href="#interface-php">PHP</a></li>
-				</ol>
-				</li>
-				<li value="3">3. 
-					<a href="#api-methods">Methoden</a>
-					<ol>
-						<li py:for="(key,method) in enumerate(new)" value="3.${key+1}">3.${key+1} <a href="#method-${method.name}">${method.title}</a></li>
-					</ol>				
-				</li>
-
-			</ol>
-		</div>
-		<div class="item" id="api-intro">
-			<h3>Einführung</h3>
-			<p>
-				Die Iro API enthält Funktion, die für den Massenversand nützlich sind.
-			</p>
-		</div>
-		<div class="item" id="api-interfaces">
-			<h3>Interfaces</h3>
-			<p>
-
-				Die Iro API wird über verschiedene Interfaces bereit gestellt, die unterschiedlich angesprochen werden, aber das selbe tun.
-			</p>
-			<div class="item" id="interface-xmlrpc">
-				<h4>XML-RPC</h4>
-				<p>
-					Interface-URI: <code>http://localhost:8000/xmlrpc</code>
-				</p>
-				<p>
-					Die aufgerufene Methode wird dabei im <code>&lt;methodName /&gt;</code> übergeben.
-				</p>
-			</div>
-			<div class="item" id="interface-soap">
-				<h4>SOAP</h4>
-				<p>
-					Interface-URI: <code>http://localhost:8000/soap</code>
-				</p>
-				<p>
-					Die aufgerufene Methode wird dabei im <code>&lt;methodName /&gt;</code> übergeben.
-				</p>
-			</div>
-			<div class="item" id="interface-xml">
-				<h4>XML</h4>
-				<p>
-					Interface-URI: <code>http://localhost:8000/xml/<em>&lt;methode&gt;</em></code>
-				</p>
-				<p>
-					Die aufgerufene Methode wird im Pfad der Interface-URI übergeben.
-				</p>
-				<p>
-					Parameter können via HTTP per GET oder POST im Format <em>application/x-www-form-urlencoded</em> übergeben werden.
-				</p>
-				<p>
-					Die Ausgabe erfolgt als XML Markup.
-				</p>
-			</div>
-			<div class="item" id="interface-json">
-				<h4>JSON</h4>
-				<p>
-					Interface-URI: <code>http://localhost:8000/json/<em>&lt;methode&gt;</em></code>
-				</p>
-				<p>
-					Die aufgerufene Methode wird im Pfad der Interface-URI übergeben.
-				</p>
-				<p>
-					Parameter können via HTTP per GET oder POST im Format <em>application/x-www-form-urlencoded</em> oder JSON-Objekt übergeben werden.
-				</p>
-				<p>
-					Die Ausgabe erfolgt als JSON-Objekt.
-				</p>
-			</div>
-			<div class="item" id="interface-jsonp">
-				<h4>JSONP</h4>
-				<p>
-					Interface-URI: <code>http://localhost:8000/jsonp/<em>&lt;methode&gt;</em>?callback=&lt;callback&gt;</code>
-				</p>
-				<p>
-					Die aufgerufene Methode wird im Pfad der Interface-URI übergeben.
-				</p>
-				<p>
-					Der Name für die Callback-Methode wird als Parameter Callback übergeben.
-				</p>
-				<p>
-					Parameter können via HTTP per GET im Format <em>application/x-www-form-urlencoded</em> übergeben werden.
-				</p>
-				<p>
-					Die Ausgabe erfolgt als Javascript-Funktionsaufruf mit einem JSON-Objekt als Parameter.
-				</p>
-			</div>
-		</div>
-		<div class="item" id="api-methods">
-			<h3>Methoden</h3>
-			<div py:for="method in new" class="item" id="method-${method.name}">
-				<h4>${method.title}</h4>
-				<p><code>${method.name}${method.func_line}</code></p>
-				<p py:content="method.description">
-					Diese Methode at bis jetzt noch keine Beschreibung.
-				</p>
-				<h5>Parameter</h5>
-				<table class="docs">
-					<thead>
-						<tr>
-							<td>Parameter</td>
-							<td>Typ</td>
-							<td>Beschreibung</td>
-						</tr>					
-					</thead>
-					<tbody>
-						<tr py:for="arg in method.args">
-							<td>${arg.name}</td>
-							<td>${arg.typ}</td>
-							<td>${arg.description}</td>
-						</tr>
-					</tbody>
-				</table>
-				<py:if test="method.rets">
-				<h5>Ausgabe</h5>
-				<table class="docs">
-					<thead>
-						<tr>
-							<td>Parameter</td>
-							<td>Typ</td>
-							<td>Beschreibung</td>
-						</tr>					
-					</thead>
-					<tbody>
-						<tr py:for="arg in method.rets">
-							<td>${arg.name}</td>
-							<td>${arg.typ}</td>
-							<td>${arg.description}</td>
-						</tr>
-					</tbody>
-				</table>	
-				</py:if>
-			</div>
-		</div>
-	</body>
-</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/tmpl/old.html	Mon Apr 23 21:38:30 2012 +0200
@@ -0,0 +1,100 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+"http://www.w3.org/TR/html4/strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:xi="http://www.w3.org/2001/XInclude"
+	xmlns:py="http://genshi.edgewall.org/">
+	<xi:include href="layout.tmpl" />
+	<head>
+		<title>API docs old</title>
+	</head>
+	<body>
+		<title>Alte API Dokumentation</title>
+		<div class="item">
+			<p>
+				
+			</p>
+			<ol>
+				<li value="1">1. <a href="#api-intro">Einführung</a></li>
+				<li value="2">2. 
+					<a href="#api-interfaces">Interfaces</a>
+					<ol>
+						<li value="2.1">2.1 <a href="#interface-xmlrpc">XML-RPC</a></li>
+					</ol>
+				</li>
+				<li value="3">3. 
+					<a href="#api-methods">Methoden</a>
+					<ol>
+						<li py:for="(key,method) in enumerate(old)" value="3.${key+1}">3.${key+1} <a href="#method-${method.name}">${method.title}</a></li>
+					</ol>				
+				</li>
+			</ol>
+		</div>
+		<div class="item" id="api-intro">
+			<h3>Einführung</h3>
+			<p>
+				Die Iro API enthält Funktion, die für den Massenversand nützlich sind.
+			</p>
+		</div>
+		<div class="item" id="api-interfaces">
+			<h3>Interfaces</h3>
+			<p>
+				Die Iro API stellt zur Zeit nur ein Interfaces bereit.
+			</p>
+			<div class="item" id="interface-xmlrpc">
+				<h4>XML-RPC</h4>
+				<p>
+				Interface-URI: <code>https://<em>&lt;benutzer&gt;</em>:<em>&lt;passwort&gt;</em>@localhost:8000</code>
+				</p>
+				<p>
+					Die aufgerufene Methode wird dabei im <code>&lt;methodName /&gt;</code> übergeben.
+				</p>
+			</div>
+		</div>
+		<div class="item" id="api-methods">
+			<h3>Methoden</h3>
+			<div py:for="method in old" class="item" id="method-${method.name}">
+				<h4>${method.title}</h4>
+				<p><code>${method.name}${method.func_line}</code></p>
+				<p py:content="method.description">
+					Diese Methode at bis jetzt noch keine Beschreibung.
+				</p>
+				<h5>Parameter</h5>
+				<table class="docs">
+					<thead>
+						<tr>
+							<td>Parameter</td>
+							<td>Typ</td>
+							<td>Beschreibung</td>
+						</tr>					
+					</thead>
+					<tbody>
+						<tr py:for="arg in method.args">
+							<td>${arg.name}</td>
+							<td>${arg.typ}</td>
+							<td>${arg.description}</td>
+						</tr>
+					</tbody>
+				</table>
+				<py:if test="method.rets">
+				<h5>Ausgabe</h5>
+				<table class="docs">
+					<thead>
+						<tr>
+							<td>Parameter</td>
+							<td>Typ</td>
+							<td>Beschreibung</td>
+						</tr>					
+					</thead>
+					<tbody>
+						<tr py:for="arg in method.rets">
+							<td>${arg.name}</td>
+							<td>${arg.typ}</td>
+							<td>${arg.description}</td>
+						</tr>
+					</tbody>
+				</table>	
+				</py:if>
+			</div>
+		</div>
+	</body>
+</html>