Advertisement
Guest User

Untitled

a guest
May 24th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.89 KB | None | 0 0
  1. import settings
  2.  
  3. import json
  4.  
  5.  
  6. class JSONResponse:
  7.  
  8. # Конструктор в качестве аргументов принимает исключительно "сырые" данные
  9. # Внутри конструктора "сырые" данные преобразуются в словарь
  10. def __init__(self, message_bytes):
  11.  
  12. message_str = message_bytes.decode(settings.ENCODING)
  13.  
  14. self._envelope = json.loads(message_str)
  15.  
  16.  
  17. @property
  18. def code(self):
  19.  
  20. # Read only свойство code
  21. code = self._envelope.get('code')
  22.  
  23. return code
  24.  
  25.  
  26. @property
  27. def action(self):
  28.  
  29. # Read only свойство action
  30. action = self._envelope.get('action')
  31.  
  32. return action
  33.  
  34.  
  35. @property
  36. def headers(self):
  37.  
  38. # Read only свойство headers
  39. # Свойство headers содержит дополнительные данные об ответе сервера, например время его совершения
  40. headers = self._envelope.get('headers')
  41.  
  42. for key, value in headers.items():
  43.  
  44. yield key, value
  45.  
  46.  
  47. @property
  48. def body(self):
  49.  
  50. # Read only свойство body
  51. # Свойство body содержит тело ответа сервера
  52. body = self._envelope.get('body')
  53.  
  54. return body
  55.  
  56.  
  57. # Request-объект - используется для приведения python-объекта в байтовый вид (для генерации "сырых" данных)
  58. class JSONRequest:
  59.  
  60. # Конструктор в качестве аргументов принимает основные данные о запросе
  61. def __init__(self, action, body, **headers):
  62.  
  63. self._headers = headers
  64.  
  65. self._action = action
  66.  
  67. self._body = body
  68.  
  69.  
  70. # Метод add_header - используется для добавления дополнительных данных о запросе, например времени его совершения
  71. def add_header(self, key, value):
  72.  
  73. self._headers.update({key:value})
  74.  
  75.  
  76. # Метод add_header - используется для удаления дополнительных данных о запросе, если во время его заполнения была допущена ошибка
  77. def remove_header(self, key):
  78.  
  79. del self._headers[key]
  80.  
  81.  
  82. # Метод to_bytes - используется для преобразования данных о запросе в байты
  83. def to_bytes(self):
  84.  
  85. envelope = dict()
  86.  
  87. envelope.update({'action':self._action})
  88.  
  89. envelope.update({'headers':self._headers})
  90.  
  91. envelope.update({'body':self._body})
  92.  
  93. data_str = json.dumps(envelope)
  94.  
  95. return data_str.encode(settings.ENCODING)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement