def add_virtual_tn(): """ The VirtualTN resource endpoint for adding VirtualTN's from the pool. """ body = request.json try: value = str(body['value']) assert len(value) <= 18 except (AssertionError, KeyError): raise InvalidAPIUsage("Required argument: 'value' (str, length <= 18)", payload={'reason': 'invalidAPIUsage'}) virtual_tn = VirtualTN(value) try: db_session.add(virtual_tn) db_session.commit() except IntegrityError: db_session.rollback() msg = ("Did not add virtual TN {} to the pool " "-- already exists").format(value) log.info({"message": msg}) raise InvalidAPIUsage("Virtual TN already exists", payload={'reason': 'duplicate virtual TN'}) return Response(json.dumps({ "message": "Successfully added TN to pool", "value": value }), content_type="application/json")
def add_virtual_tn(): """ The VirtualTN resource endpoint for adding VirtualTN's from the pool. """ body = request.json try: value = str(body["value"]) assert len(value) <= 18 except (AssertionError, KeyError): raise InvalidAPIUsage("Required argument: 'value' (str, length <= 18)", payload={"reason": "invalidAPIUsage"}) virtual_tn = VirtualTN(value) try: db_session.add(virtual_tn) db_session.commit() except IntegrityError: db_session.rollback() msg = ("Did not add virtual TN {} to the pool " "-- already exists").format(value) log.info({"message": msg}) raise InvalidAPIUsage("Virtual TN already exists", payload={"reason": "duplicate virtual TN"}) return Response( json.dumps({"message": "Successfully added TN to pool", "value": value}), content_type="application/json" )
def add_proxy_session(): """ The ProxySession resource endpoint for adding a new ProxySession to the pool. """ body = request.json try: participant_a = body['participant_a'] participant_b = body['participant_b'] assert len(participant_a) <= 18 assert len(participant_b) <= 18 except (AssertionError, KeyError): raise InvalidAPIUsage( ("Required argument: 'participant_a' (str, length <= 18)" ", 'participant_b' (str, length <= 18)"), payload={'reason': 'invalidAPIUsage'}) if 'expiry_window' in body: expiry_window = body['expiry_window'] else: expiry_window = None # Release any VirtualTNs from expired ProxySessions back to the pool ProxySession.clean_expired() virtual_tn = VirtualTN.get_next_available() if virtual_tn is None: msg = "Could not create a new session -- No virtual TNs available." log.critical({"message": msg, "status": "failed"}) return Response(json.dumps({ "message": msg, "status": "failed" }), content_type="application/json", status=400) else: session = ProxySession(virtual_tn.value, participant_a, participant_b, expiry_window) try: virtual_tn.session_id = session.id db_session.add(session) db_session.add(virtual_tn) db_session.commit() except IntegrityError: db_session.rollback() msg = "There were two sessions attempting to reserve the same virtual tn. Please retry." log.error({"message": msg, "status": "failed"}) return Response(json.dumps({ "message": msg, "status": "failed" }), content_type="application/json", status=500) expiry_date = session.expiry_date.strftime( '%Y-%m-%d %H:%M:%S') if session.expiry_date else None recipients = [participant_a, participant_b] try: send_message(recipients, virtual_tn.value, SESSION_START_MSG, session.id, is_system_msg=True) except InternalSMSDispatcherError as e: db_session.delete(session) virtual_tn.session_id = None db_session.add(virtual_tn) db_session.commit() raise e msg = "ProxySession {} started with participants {} and {}".format( session.id, participant_a, participant_b) log.info({"message": msg, "status": "succeeded"}) return Response(json.dumps({ "message": "Created new session", "status": "succeeded", "session_id": session.id, "expiry_date": expiry_date, "virtual_tn": virtual_tn.value, "participant_a": participant_a, "participant_b": participant_b }), content_type="application/json")
def add_proxy_session(): """ The ProxySession resource endpoint for adding a new ProxySession to the pool. """ body = request.json try: participant_a = body["participant_a"] participant_b = body["participant_b"] assert len(participant_a) <= 18 assert len(participant_b) <= 18 except (AssertionError, KeyError): raise InvalidAPIUsage( ("Required argument: 'participant_a' (str, length <= 18)" ", 'participant_b' (str, length <= 18)"), payload={"reason": "invalidAPIUsage"}, ) if "expiry_window" in body: expiry_window = body["expiry_window"] else: expiry_window = None # Release any VirtualTNs from expired ProxySessions back to the pool ProxySession.clean_expired() virtual_tn = VirtualTN.get_next_available() if virtual_tn is None: msg = "Could not create a new session -- No virtual TNs available." log.critical({"message": msg, "status": "failed"}) return Response(json.dumps({"message": msg, "status": "failed"}), content_type="application/json", status=400) else: session = ProxySession(virtual_tn.value, participant_a, participant_b, expiry_window) try: virtual_tn.session_id = session.id db_session.add(session) db_session.add(virtual_tn) db_session.commit() except IntegrityError: db_session.rollback() msg = "There were two sessions attempting to reserve the same virtual tn. Please retry." log.error({"message": msg, "status": "failed"}) return Response( json.dumps({"message": msg, "status": "failed"}), content_type="application/json", status=500 ) expiry_date = session.expiry_date.strftime("%Y-%m-%d %H:%M:%S") if session.expiry_date else None recipients = [participant_a, participant_b] try: send_message(recipients, virtual_tn.value, SESSION_START_MSG, session.id, is_system_msg=True) except InternalSMSDispatcherError as e: db_session.delete(session) virtual_tn.session_id = None db_session.add(virtual_tn) db_session.commit() raise e msg = "ProxySession {} started with participants {} and {}".format(session.id, participant_a, participant_b) log.info({"message": msg, "status": "succeeded"}) return Response( json.dumps( { "message": "Created new session", "status": "succeeded", "session_id": session.id, "expiry_date": expiry_date, "virtual_tn": virtual_tn.value, "participant_a": participant_a, "participant_b": participant_b, } ), content_type="application/json", )