iro/controller/viewinterface.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 27 Jan 2012 21:21:41 +0100
branchdevel
changeset 117 351a02310dd8
parent 115 323d06431100
child 119 3462c2c90f95
permissions -rw-r--r--
model restructuring
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
117
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
     2
from ..model.decorators import vUser, vRoute, dbdefer, vTyp
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
     3
from ..model.schema import User
115
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
     4
from ..validate import validate, vBool, vHash, vTel, vEmail
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
     5
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
class Interface(object):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     7
    '''class for a xmlrpc user
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     8
    '''
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     9
    
115
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    10
    @validate(kwd="detailed", func=vBool, need=False)
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    11
    @validate(kwd="id", func=vHash, need=False, maxlength=40)
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    12
    @vUser
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    13
    def status(self, user, id=None, detailed=False):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    14
        '''Gibt den aktuellen Status eines Auftrages oder Mehreren zurück.
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    15
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    16
        Keywords:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    17
        apikey[string]: Der API Key
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    18
        id[hash]: Eine Auftragsnummer
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    19
        detailed[boolean]: Details ausgeben
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    20
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    21
        Return:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    22
        jobs[list]: Eine Liste der Aufträge.
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    23
        job.name[string]: Angebener Name
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    24
        job.status[string]: Status des Auftrages
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    25
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    27
        '''
114
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 109
diff changeset
    28
        if id or detailed:
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 109
diff changeset
    29
            return str(user),id,detailed
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 109
diff changeset
    30
        else:
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 109
diff changeset
    31
            return str(user)
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
        #return user.status(id,detailed)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    33
        return ""
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    34
115
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    35
    @vUser
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    36
    @validate(kwd="id", func=vHash,maxlength=40)
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    37
    def stop(self, user, id):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    38
        '''Stoppt den angegeben Auftrag.
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    39
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    40
        Keywords:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    41
        apikey[string]: Der API Key
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    42
        id[hash]: Eine Auftragsnummer
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    43
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    44
        Return:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    45
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    46
        '''
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    47
        return ""
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    48
    
115
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    49
    @validate(kwd="recipients",func=vTel)
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    50
    @vUser
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    51
    @vRoute(typ="sms")
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    52
    def sms(self, user, message, recipients, route="default", info=""):
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    53
        '''Versendet eine SMS.
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    54
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    55
        Keywords:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    56
        apikey[string]: Der API Key
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    57
        message[string]: Nachricht
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    58
        recipients[list]: eine Liste von Emfänger-Nummern (gemäß ITU-T E.123)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    59
        route[string|list]: Route über den geschickt werden soll, 
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    60
                            oder eine Liste von Routen, um Fallbacks anzugeben
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    61
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    62
        Return:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    63
        id[hash]: Die ID des Auftrages
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    64
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    65
        '''
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    66
        return ""
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    67
   
115
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    68
    @validate(kwd="recipients",func=vTel)
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    69
    @vUser
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    70
    @vRoute(typ="fax")
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    71
    def fax(self, user, subject, fax, recipients, route="default", info=""):
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    72
        '''Versendet ein FAX.
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    73
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    74
        Keywords:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    75
        apikey[string]: Der API Key
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    76
        subject[string]: Der Betreff
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    77
        fax[string]: Das PDF base64 kodiert
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    78
        recipients[list]: Eine Liste von Emfänger-Nummern (gemäß ITU-T E.123)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    79
        route[string|list]: Route über den geschickt werden soll, 
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    80
                            oder eine Liste von Routen, um Fallbacks anzugeben
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    81
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    82
        Return:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    83
        id[hash]: Die ID des Auftrages
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    84
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    85
        '''
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    86
        return ""
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    87
115
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    88
    @validate(kwd="recipients",func=vEmail)
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    89
    @vUser
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    90
    @vRoute(typ="mail")
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    91
    def mail(self, user, subject,  body, recipients, frm, route="default", info=""):
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    92
        '''Versendet eine Email.
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    93
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    94
        Keywords:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    95
        apikey[string]: Der API Key
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    96
        subject[string]: Der Betreff
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    97
        body[string]: Der Email Body
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    98
        recipients[list]: Eine Liste von Emailadressen
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    99
        frm[string]: Die Absender Emailadresse
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   100
        route[string|list]: Route über den geschickt werden soll, 
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   101
                            oder eine Liste von Routen, um Fallbacks anzugeben
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   102
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   103
        Return:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   104
        id[hash]: Die ID des Auftrages
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   105
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   106
        '''
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   107
        return ""
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   108
       
115
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
   109
    @validate(kwd="typ", func=vTyp)
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
   110
    @vUser
117
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
   111
    @dbdefer
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
   112
    def routes(self, user, typ, session):
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   113
        '''Gibt eine Liste aller verfügbaren Provider zurück.
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   114
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   115
        Keywords:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   116
        apikey[string]: Der API Key
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   117
        typ[string]: Der Typ zu dem die Providerloste ausgeben werden soll
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   118
                     Einer der Liste ["sms","fax","mail"]
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   119
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   120
        Return:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   121
        providerlist[list]: Eine Liste aller möglichen Provider
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   122
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   123
        '''
117
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
   124
        user = session.query(User).filter_by(name=user.name).first()
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
   125
        return [u.offer_name for u in user.rights]
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   126
        
115
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
   127
    @validate(kwd="typ", func=vTyp)
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
   128
    @vUser
117
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
   129
    @dbdefer
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
   130
    def defaultRoute(self, user, typ, session):
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   131
        '''Gibt den Standardprovider zurück.
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   132
 
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   133
        Keywords:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   134
        apikey[string]: Der API Key
109
935b5fcaf152 little typos
Sandro Knauß <knauss@netzguerilla.net>
parents: 106
diff changeset
   135
        typ[string]: Der Typ zu dem die Providerliste ausgeben werden soll
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   136
                     Einer der Liste ["sms","fax","mail"]
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   137
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   138
        Return:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   139
        provider[string]: Der Standardprovider für den angeben Typ
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   140
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   141
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   142
        '''
117
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
   143
        user = session.query(User).filter_by(name=user.name).first()
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
   144
        return [u.offer_name for u in user.rights if u.isDefault == True]
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   145
115
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
   146
    @vUser
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   147
    def statistic(self, user):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   148
        '''Gibt eine Statik zurück über die versendendeten Nachrichten und des Preises.
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   149
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   150
        Keywords:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   151
        apikey[string]: Der API Key
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   152
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   153
        Return:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   154
        statistic[list]: Eine Liste nach Nachrichtentypen
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   155
        '''
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   156
        return ""
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   157
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   158