Advertisement
Guest User

Untitled

a guest
Apr 24th, 2017
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.62 KB | None | 0 0
  1. # encoding: utf8
  2. import logging, ConfigParser
  3. from random import randint
  4. from spyne import Application, rpc, ServiceBase, Iterable, Integer, Unicode, ComplexModel, Array
  5. from lxml import etree
  6. from base64 import b64decode, b64encode
  7. from spyne.protocol.soap import Soap11
  8. from spyne.protocol.json import JsonDocument
  9.  
  10. from spyne.server.wsgi import WsgiApplication
  11. import psycopg2
  12.  
  13. config = ConfigParser.RawConfigParser(allow_no_value=True)
  14. config.read('/etc/imei/imeidb.conf')
  15. db_host = config.get('db', 'host')
  16. db_user = config.get('db', 'user')
  17. db_password = config.get('db', 'password')
  18. db_dbname = config.get('db', 'dbname')
  19. logfile = config.get('log', 'logfile')
  20. print 'logfile = %s' %logfile
  21. logging.basicConfig(filename=logfile, format='%(asctime)s %(levelname)s %(message)s', level=logging.INFO)
  22. logging.info('Json Service started')
  23. logging.getLogger('spyne.protocol.xml').setLevel(logging.DEBUG)
  24.  
  25.  
  26. class Auth(ComplexModel):
  27. username = Unicode
  28. password = Unicode
  29.  
  30. class Request(ComplexModel):
  31. requestId = Integer
  32. imeiId = Integer
  33. dublicateCount = Integer
  34.  
  35. class Answer(ComplexModel):
  36. answer = Unicode
  37.  
  38. class Service2(ServiceBase):
  39. @rpc(_returns=Unicode)
  40. def ImeiWithDublicate(ctx):
  41. r = randint(1000000, 9999999)
  42. #print ctx
  43. in_query_b64 = b64encode(str(ctx.in_body_doc))
  44. logging.info('ID:%s Input query (base64) %s' %(r, in_query_b64))
  45. d = ctx.in_body_doc['ImeiWithDublicate']
  46. try:
  47. username = d['username']
  48. password = d['password']
  49. requestId = d['requestId']
  50. imeiId = d['imeiId']
  51. dublicateCount = d['dublicateCount']
  52. in_data = str(ctx.in_body_doc)
  53. in_data_b64 = b64encode(in_data)
  54. print 'in_data_b64 = %s' %in_data_b64
  55. print 'username = %s, password = %s, requestId = %s, imeiId = %s, dublicateCount = %s' % (
  56. username, password, requestId, imeiId, dublicateCount)
  57. eventInfo = u'Получено от %s следующие данные: requestId=%s, imei=%s,dublicateCount=%s' % (
  58. username, requestId, imeiId, dublicateCount)
  59. except:
  60. return 'Unvalid parameters'
  61.  
  62. print 'd = %s' %d
  63. try:
  64. conn = psycopg2.connect(
  65. "host = %s dbname = %s user = %s password = %s" % (db_host, db_dbname, db_user, db_password))
  66. cur = conn.cursor()
  67. except psycopg2.DatabaseError, err:
  68. logging.error('ID:%s %s' %(r, err))
  69. return 'Database connection error!'
  70. print 'After DB connection'
  71. cur.execute(
  72. "select users.id, users.role_id , users.organization_id from users where users.username = %s and users.password = md5(%s)",
  73. (username, password))
  74. c = cur.fetchall()
  75. if c:
  76. for i in c:
  77. orgId = i[2]
  78. userId = i[0]
  79. try:
  80. logging.info('ID:%s search relate requestId: %s and imeiId: %s' %(r, requestId, imeiId))
  81. cur.execute("select imei from imei_received where request_id = %s and imei = %s", (requestId, imeiId))
  82. logging.info('ID:%s search relate requestId: %s and imeiId: %s executed successfully' % (r, requestId, imeiId))
  83. if not cur.fetchall():
  84. logging.warn('ID:%s Not related request ID or imei. Sent this warning to client.' %r)
  85. ## insert into catalog_change_log (users_id, event_info) values (?, ?)
  86. ### такой то такой то не правильно отправил
  87. return 'Not related request ID or imei'
  88. except psycopg2.DatabaseError, err:
  89. logging.error('ID:%s %s' %(r, err))
  90. return 'Not related request ID or imei'
  91. try:
  92. request_status_id = 2
  93.  
  94. logging.info(
  95. 'ID:%s try insert to imei_processed : imeiId = %s, orgId = %s, userId = %s, requestId = %s, dublicateCount = %s, request_status_id = %s' % (r,
  96. imeiId, orgId, userId, requestId, dublicateCount, request_status_id))
  97.  
  98. cur.execute(
  99. "insert into imei_processed(imei,organization_id,user_id,request_id,response_code,response_body) values(%s,%s,%s,%s,%s,%s) "
  100. "ON CONFLICT ON CONSTRAINT imei_processed_imei_org_req_unique "
  101. "DO UPDATE SET last_date_update = 'now'::timestamp, user_id = %s, response_code = %s, response_body = %s where imei_processed.request_id = %s and "
  102. "imei_processed.organization_id = %s and imei_processed.imei = %s returning id",
  103. (imeiId, orgId, userId, requestId, dublicateCount, in_data_b64,userId,dublicateCount,in_data_b64,requestId,orgId,imeiId))
  104. c = cur.fetchall()
  105. print 'c = %s' %c
  106. for i in c:
  107.  
  108. i = i[0]
  109. print 'i = %s' % i
  110. logging.info('ID:%s try execute: insert into catalog_change_log (users_id, event_info, imei_processed_id) values (%s, %s, %s)"' %(r, userId, eventInfo, i))
  111. cur.execute("insert into catalog_change_log (users_id, event_info, imei_processed_id) values (%s, %s, %s)", (userId, eventInfo,i))
  112.  
  113. ## insert into catalog_change_log (users_id, event_info) values (?, ?);
  114. #event_info - получит от того этот (reqId, imei, orgId, dubl)
  115. #
  116.  
  117. # select count(imei) from imei_received where request_id = ?
  118.  
  119. # select count(imei) from imei_processed where request_id = ?
  120. # UPDATE request_proccess SET request_status_id = ?, lastupdate = 'now'::timestamp, user_id = ?, request_body = ?, descriptions = ? where request_id = ? organization_id = ?
  121. #request_status_id = 6
  122. description = 'Json query'
  123. cur.execute("select count(imei) from imei_received where request_id = %s", (requestId,))
  124. c_received = cur.fetchall()
  125. for c1 in c_received:
  126. c1=c1
  127. print 'c1 = %s' %c1
  128. cur.execute("select count(imei) from imei_processed where request_id = %s", (requestId,))
  129. c_processed = cur.fetchall()
  130. for c2 in c_processed:
  131. c2=c2
  132. print 'c2 = %s' % c2
  133. if c1 == c2:
  134. print 'equal'
  135. try:
  136. logging.info('ID:%s try execute: UPDATE request_proccess SET request_status_id = 6, lastupdate = \'now\'::timestamp, user_id = %s, request_body = %s, descriptions = %s '
  137. 'where request_id = %s organization_id = %s returning id' %(r, userId, in_data_b64, description, requestId, orgId))
  138. cur.execute("insert into request_proccess(request_id,organization_id,request_status_id,user_id,request_body,descriptions) "
  139. "values(%s,%s,6, %s,%s,%s) ON CONFLICT ON CONSTRAINT request_status_by_org_unique DO UPDATE SET "
  140. "request_status_id = 6, lastupdate = 'now'::timestamp, user_id = %s, request_body = %s, descriptions = %s "
  141. "where request_proccess.request_id = %s and request_proccess.organization_id = %s returning id", (requestId, orgId, userId, in_data_b64, description, userId, in_data_b64, description, requestId, orgId, ))
  142.  
  143. c_update = cur.fetchall()
  144.  
  145. for c_id in c_update:
  146. request_proccessed_id = c_id
  147. print 'request_proccessed_id = %s' % request_proccessed_id
  148. cur.execute("insert into catalog_change_log (users_id, event_info, request_proccessed_id) values (%s, %s, %s)", (userId, eventInfo, request_proccessed_id))
  149. except psycopg2.DatabaseError, err:
  150. logging.error('ID:%s Error while execute' %r)
  151. logging.error('ID:%s %s' %(r, err))
  152. a = 'Query error'
  153. logging.warn('ID:%s Sent Query error' % r)
  154. return a
  155.  
  156.  
  157. logging.info('ID:%s insert finished' %r)
  158. print 'Before write log to db'
  159.  
  160. #try:
  161.  
  162. #cur.execute(
  163. #"insert into request_proccess(request_id,organization_id,request_status_id,user_id,request_body,descriptions) values(%s,%s,%s,%s,%s,%s)",
  164. #(requestId, orgId, request_status_id, userId, in_data, 'Json query'))
  165. #logging.info('ID:%s inserted successfully' %r)
  166. #except psycopg2.DatabaseError, err:
  167. #logging.error('ID:%s insert error' %r)
  168. #logging.error('ID:%s %s' %(r, err))
  169.  
  170.  
  171.  
  172. logging.info('ID:%s try to commit' %r)
  173. conn.commit()
  174. a = 'Success'
  175.  
  176. logging.info('ID:%s Sent success answer' %r)
  177. return a
  178.  
  179. except:
  180. a = 'Query error'
  181. logging.warn('ID:%s Sent Query error' %r)
  182. return a
  183. else:
  184. a = 'Authentication error!'
  185. logging.warn('ID:%s Sent Authentication error' %r)
  186. return a
  187.  
  188.  
  189.  
  190. app = Application([Service2], 'ImeiAndDublicate',
  191. in_protocol=JsonDocument(validator='soft'),
  192. out_protocol=JsonDocument())
  193.  
  194.  
  195. application = WsgiApplication(app)
  196.  
  197. if __name__ == '__main__':
  198. import logging
  199. from wsgiref.simple_server import make_server
  200. server = make_server('0.0.0.0', 8000, application)
  201. server.serve_forever()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement