source: products/PloneSMSCommunicator/trunk/pyXIAM.py @ 2284

Last change on this file since 2284 was 1, checked in by myroslav, 18 years ago

Building directory structure

File size: 6.1 KB
Line 
1# Author: Melnychuk Taras
2# Contact: fenix@quintagroup.com
3# Date: $Date: 2005-12-23 11:56:23 +0200 (Fri, 23 Dec 2005) $
4# Copyright: quintagroup.com
5
6"""
7pyXIAM is module that defines such classes and functions:
8
9    - `SMSsubmitRequest`, this class define SMSsubmitRepuest type and takes responsibility
10                          for creating instance of this class and converting it to xml format.
11
12    Methods:
13
14            - `SMSsubmitRequest.genSMS_id`: generate id for message
15            - `SMSsubmitRequest.toXML`: convert SMSsubmitRequest instance to xml format
16    Functions:
17
18            - `getAllTextFromTag`: return list of text elements that is nested in 'tag_name'
19
20    Exception classes:
21
22        - `DestinatioNumberError`
23        - `NoOriginatorError`
24
25"""
26
27__docformat__ = 'restructuredtext'
28
29from DateTime import DateTime
30from xml.dom.minidom import *
31
32def getAllTextFromTag(doc, tag_name):
33    """
34    return list of text elements that is nested in 'tag_name'
35     Parameters:
36
37      - `doc`: this parameter must contain xml document
38      - `tag_name`: this is the name of needed tag
39    """
40    text = ''
41    result = []
42    bad_char = False
43    list_tag_elements = doc.getElementsByTagName(tag_name)
44    for tag in list_tag_elements:
45        list_subelements = tag.getElementsByTagName('*')
46        list_subelements.insert(0, tag)
47        for element in list_subelements:
48            if element.childNodes[0].nodeValue:
49                text += element.childNodes[0].nodeValue.strip()
50        result.append(text)
51        text = ''
52
53    return result
54
55'''def response_message(id):
56
57    doctype = DocumentType(""" xiamSMS SYSTEM "xiamSMSMessage.dtd" """)
58    doc = Document()
59    doc.appendChild(doctype)
60
61    #create a 'xiamSMS' tag
62    xiam_element = doc.createElement("xiamSMS")
63    xiam_element.setAttribute("status", "OK")
64    doc.appendChild(xiam_element)
65
66    #create a 'submitRequest' tag
67    response_element=doc.createElement("submitRsponse")
68    response_element.setAttribute("id", id)
69    response = doc.createTextNode('XML contained your response messages')
70    response_element.appendChild(response)
71    xiam_element.appendChild(response_element)
72
73    return doc.toxml()'''
74
75"""class xiamSMS:
76
77    def __init__(self, id, originator, recipients, request, req_time = None, response = None, res_time = None):
78        self.id = id
79        self.originator = originator
80        self.recipients = recipients
81        self.request = request
82        self.req_time = req_time
83        self.response = response
84        self.response_status = None
85        self.res_time = res_time
86
87    def setOriginator(self, originator):
88        setattr(self, 'originator', originator)
89
90    def setRecipients(self, recipients):
91        setattr(self, 'recipients', recipients)
92
93    def setRequest(self, request):
94        setattr(self, 'request', request)
95
96    def setReq_time(self, req_time):
97        setattr(self, 'req_time', req_time)
98
99    def setResponse(self, response):
100        setattr(self, 'response', response)
101
102    def setResponse_status(self, response_status):
103        setattr(self, 'response_status', response_status)
104
105    def setRes_time(self, res_time):
106        setattr(self, 'res_time', res_time)
107
108    def getOriginator(self):
109        return getattr(self, 'originator')
110
111    def getRecipients(self):
112        return getattr(self, 'recipients')
113
114    def getRequest(self):
115        return getattr(self, 'request')
116
117    def getReq_time(self):
118        return getattr(self, 'req_time')
119
120    def getResponse(self):
121        return getattr(self, 'response')
122
123    def getResponse_status(self):
124        return getattr(self, 'response_status')
125
126    def getRes_time(self):
127        return getattr(self, 'res_time')"""
128
129class SMSsubmitRequest:
130    """
131    This class define SMSsubmitRepuest type and takes responsibility
132    for creating instance of this class and converting it to xml format.
133
134    Fields:
135
136        - id: sms id
137        - originator: contains phone number of message originator
138        - destination: contains phone number of destination
139        - body: this is the text of your message
140    """
141    def __init__(self, originator, destination, body):
142        self.id = self.genSMS_id()
143        self.originator=originator
144        self.destination=destination
145        self.body=body
146
147    def genSMS_id(self):
148        """
149        generate id for message
150        """
151        sms_id = "quinta%s" % DateTime().strftime("%Y%m%d%H%M%S")
152        return sms_id
153
154    def toXML(self):
155        """
156        convert SMSsubmitRequest instance to xml format
157        """
158        if not self.id:
159            id = "quinta5"
160
161        #create a document
162        doctype = DocumentType(""" xiamSMS SYSTEM "xiamSMSMessage.dtd" """)
163        doc = Document()
164        doc.appendChild(doctype)
165
166        #create a 'xiamSMS' tag
167        xiam_element = doc.createElement("xiamSMS")
168        doc.appendChild(xiam_element)
169
170        #create a 'submitRequest' tag
171        request_element=doc.createElement("submitRequest")
172        xiam_element.appendChild(request_element)
173        request_element.setAttribute("id", self.id)
174
175        #create a 'from' tag
176        if not self.originator:
177            raise NoOriginatorError("There is no sender number")
178        originator_element=doc.createElement("from")
179        number=doc.createTextNode(str(self.originator))
180        originator_element.appendChild(number)
181        request_element.appendChild(originator_element)
182
183        #create a 'to' tag
184        if not self.destination:
185            raise DestinatioNumberError ("There is no one destination number")
186        for pn in self.destination:
187            destination_element=doc.createElement("to")
188            number=doc.createTextNode(str(pn))
189            destination_element.appendChild(number)
190            request_element.appendChild(destination_element)
191
192        #create a 'content' tag
193        content_element=doc.createElement("content")
194        content_element.setAttribute("type", "text")
195        body=doc.createTextNode(str(self.body))
196        content_element.appendChild(body)
197        request_element.appendChild(content_element)
198
199        return doc.toxml(encoding = "UTF-8")
200
201class DestinatioNumberError(Exception):
202    pass
203
204class NoOriginatorError(Exception):
205    pass
Note: See TracBrowser for help on using the repository browser.