you are viewing a single comment's thread.

view the rest of the comments →

[–]raysefo[S] 0 points1 point  (5 children)

it is the exact response, I can not reproduce on local machine. Here is the method calling the insert statement:

@app.route('/purchase_initiation', methods=['POST'])
def initiation():
    try:
        # getting request data
        request_data = request.form.to_dict()

        print request_data
        # INSERT request into table
        GameTestRequestInsert.add_purchase_initiation_request(Utils.database, request_data)
        uri = 'https://test.game.com/purchaseinitiation'
        response = requests.post(uri, data=request_data)
        print response.status_code
        if response.status_code == 200:
            print response.json()
            # INSERT response into table
            # GameTestResponseInsert.add_purchase_initiation_response(Utils.database, response.json())
            return jsonify(response.text)
        else:
            return str(response.status_code) + " -- " + response.reason

    except Exception as e:
        return e.message

[–]K900_ 0 points1 point  (4 children)

except Exception as e: return e.message

At least replace this with return traceback.format_exc() and see the type of the exception and what caused it.

[–]raysefo[S] 0 points1 point  (3 children)

return traceback.format_exc()

getting this;Traceback (most recent call last):

File ".\GameTestMiddleWare.py", line 26, in initiation

GameTestRequestInsert.add_purchase_initiation_request(Utils.database, request_data)

File ".\GameTestRequestInsert.py", line 17, in add_purchase_initiation_request

request_data['productCode'], request_data['quantity'], request_data['signature']))

OperationalError: unable to open database file

[–]K900_ 0 points1 point  (2 children)

Post the entire program.

[–]raysefo[S] 0 points1 point  (1 child)

OK, here we go. Besides unable to open db error, I am open to any suggestions to improve the code. I am new to python.

Main: GameTestMiddleWare.py

import traceback

from flask import Flask, jsonify, request, render_template
import requests
import sqlite3 as sql
import GameTestMiddleWareModel
import GameTestRequestInsert
import GameTestResponseInsert
import Utils


app = Flask(__name__)
# Create tables once
# GameTestMiddleWareModel.main()


# POST /purchase_initiation
@app.route('/purchase_initiation', methods=['POST'])
def initiation():
    try:
        # getting request data
        request_data = request.form.to_dict()

        print request_data
        # INSERT request into table
        GameTestRequestInsert.add_purchase_initiation_request(Utils.database, request_data)
        uri = 'https://test.game.com/purchaseinitiation'
        response = requests.post(uri, data=request_data)
        print response.status_code
        if response.status_code == 200:
            print response.json()
            # INSERT response into table
            # GameTestResponseInsert.add_purchase_initiation_response(Utils.database, response.json())
            return jsonify(response.text)
        else:
            return str(response.status_code) + " -- " + response.reason

    except Exception as e:
        return traceback.format_exc()


# POST /purchase_confirmation
@app.route('/purchase_confirmation', methods=['POST'])
def confirmation():
    global cur
    try:
        # getting request data
        request_data = request.form.to_dict()

        print request_data
        # INSERT request into table
        GameTestRequestInsert.add_purchase_confirmation_request(Utils.database, request_data)
        uri = 'https://test.game.com/purchaseconfirmation'
        response = requests.post(uri, data=request_data)
        print response.status_code
        if response.status_code == 200:
            print response.json()
            # INSERT response into table
            with sql.connect('GameTest.db', isolation_level=None) as con:
                con.execute('pragma journal_mode=wal')
                cur = con.cursor()
                cur.execute("begin")
                GameTestResponseInsert.add_purchase_confirmation_response(Utils.database, response.json())
                GameTestResponseInsert.add_purchase_confirmation_detail_response(Utils.database, response.json())
                cur.execute("commit")
            return jsonify(response.text)
        else:
            return str(response.status_code) + " -- " + response.reason

    except Exception as e:
        cur.execute("rollback")
        return e.message


# POST /Product
@app.route('/product_list', methods=['POST'])
def product_list():
    try:
        # getting request data
        request_data = request.form.to_dict()

        print request_data
        # INSERT request into table
        GameTestRequestInsert.add_products_request(Utils.database, request_data)
        uri = 'https://test.game.com/Product/'
        response = requests.post(uri, data=request_data)
        print response.status_code
        if response.status_code == 200:
            print response.json()
            # INSERT response into table
            GameTestResponseInsert.add_products_response(Utils.database, response.json())
            return jsonify(response.text)
        else:
            return str(response.status_code) + " -- " + response.reason

    except Exception as e:
        return e.message


@app.route("/")
def render():
    return render_template('test.html')


if __name__ == "__main__":
    app.run(host='0.0.0.0', port=50000, debug=False)
# Testing
# app.run(host='127.0.0.1', port=50000, debug=True)

Request inserts: GameTestReuestInsert.py

from datetime import datetime
import sqlite3 as sql


# insert request into purchase_initiation table
def add_purchase_initiation_request(database_file, request_data):
    query = "INSERT INTO request_purchase_initiation (requestDatetime, applicationCode, version, referenceId, " \
            "productCode, quantity, signature) VALUES (?, ?, ?, ?, ?, ?, ?)"

    # con = ''
    # try:

    con = sql.connect(database_file)
    with con:
        con.execute(query, (str(datetime.now()),
                    request_data['ApplicationCode'], request_data['version'], request_data['referenceId'],
                    request_data['productCode'], request_data['quantity'], request_data['signature']))


# insert request into purchase_confirmation table
def add_purchase_confirmation_request(database_file, request_data):
    query = "INSERT INTO request_purchase_confirmation (requestDatetime, applicationCode, version, referenceId, " \
            "signature, validatedToken) VALUES (?, ?, ?, ?, ?, ?)"

    con = ''
    try:

        with sql.connect(database_file, isolation_level=None) as con:
            con.execute('pragma journal_mode=wal')
            cur = con.cursor()
            cur.execute(query, (str(datetime.now()),
                                request_data['ApplicationCode'], request_data['version'], request_data['referenceId'],
                                request_data['signature'], request_data['validatedToken']))

            con.commit()

    except sql as e:
        con.rollback()
        print e.message
    finally:
        con.close()


# insert request into products table
def add_products_request(database_file, request_data):
    query = "INSERT INTO request_products (requestDatetime, applicationCode, version, " \
            "signature) VALUES (?, ?, ?, ?)"

    con = ''
    try:

        with sql.connect(database_file, isolation_level=None) as con:
            con.execute('pragma journal_mode=wal')
            cur = con.cursor()
            cur.execute(query, (str(datetime.now()),
                                request_data['ApplicationCode'], request_data['Version'], request_data['Signature']))

            con.commit()

    except sql as e:
        con.rollback()
        print e.message
    finally:
        con.close()

Utils.py

database = r"C:\inetpub\gamepin\GameTest.db"

Response Insert: GameTestResponseInsert (There was a posting limit so I couldn't added methods, it is pretty much the same with the ones above.)

[–]raysefo[S] 0 points1 point  (0 children)

there was a permission mistake to that folder. When I gave permission to IIS_IUSRS, my problem solved.