def test_encode_message(): addstuff() changestuff() session = Session() message = PushMessage() message.add_unversioned_operations() message.set_node(session.query(models.Node).first()) assert message.to_json() == json.loads(json.dumps(message.to_json()))
def test_create_message(): addstuff() changestuff() session = Session() message = PushMessage() message.add_unversioned_operations() message.set_node(session.query(models.Node).first()) assert message.to_json() == PushMessage(message.to_json()).to_json()
def request_push( push_url, extra_data=None, encode=None, decode=None, headers=None, timeout=None, extensions=True, session=None ): message = PushMessage() message.latest_version_id = core.get_latest_version_id(session=session) compress(session=session) message.add_unversioned_operations(session=session, include_extensions=extensions) message.set_node(session.query(Node).order_by(Node.node_id.desc()).first()) data = message.to_json() data.update({"extra_data": extra_data or {}}) code, reason, response = post_request(push_url, data, encode, decode, headers, timeout) if (code // 100 != 2) or response is None: if suggests_pull is not None and suggests_pull(code, reason, response): raise PullSuggested(code, reason, response) raise PushRejected(code, reason, response) new_version_id = response.get("new_version_id") if new_version_id is None: raise PushRejected(code, reason, {"error": "server didn't respond with new version id", "response": response}) # Who should set the dates? Maybe send a complete Version from the # server. For now the field is ignored, so it doesn't matter. session.add(Version(version_id=new_version_id, created=datetime.datetime.now())) for op in message.operations: op.version_id = new_version_id # return the response for the programmer to do what she wants # afterwards return response
def request_push(push_url: str, extra_data=None, encode=None, decode=None, headers=None, timeout=None, extensions=True, session=None) -> Dict[str, Any]: message = PushMessage() message.latest_version_id = core.get_latest_version_id(session=session) compress(session=session) message.add_unversioned_operations(session=session, include_extensions=extensions) if not message.operations: return {} message.set_node(session.query(Node).order_by(Node.node_id.desc()).first()) data = message.to_json() data.update({'extra_data': extra_data or {}}) code, reason, response = post_request(push_url, data, encode, decode, headers, timeout) if (code // 100 != 2) or response is None: if suggests_pull is not None and suggests_pull(code, reason, response): raise PullSuggested(code, reason, response) raise PushRejected(code, reason, response) new_version_id = response.get('new_version_id') if new_version_id is None: raise PushRejected( code, reason, { 'error': "server didn't respond with new version id", 'response': response }) # Who should set the dates? Maybe send a complete Version from the # server. For now the field is ignored, so it doesn't matter. session.add( Version(version_id=new_version_id, created=datetime.datetime.now())) for op in message.operations: op.version_id = new_version_id # return the response for the programmer to do what she wants # afterwards return response