Python, работающий в Ubuntu - TypeError: Объект типа 'Point' не поддерживает сериализацию в формате JSON - PullRequest
0 голосов
/ 25 сентября 2018

Я потратил довольно много времени, пытаясь решить эту проблему, я погуглил и просмотрел сообщения, но безуспешно.У меня есть скрипт на python, который прекрасно работает на моем компьютере macOsx, но мне нужно было запустить скрипт в Интернете, поэтому я использую для этого digitalOcean.

У меня есть HTTP-запрос, где я публикую данные с помощью почтальона наПриложение Flask

@app.route('/addtransaction', methods = ['POST'])
def add_transaction():
    data = request.get_json()
    private = account.get_private_key()
    public = account.get_public_key()


    transaction = account.create_transaction(data)
    string_transaction = str(transaction)
    signature = ecdsa.sign(string_transaction, private, curve=curve.secp256k1, 
                  hashfunc=ecdsa.sha256)

    index = blockchain.add_transaction(public, transaction, signature, 
              string_transaction) 

    #Broadcast the transaction to the Peer Network 
    #First create the transaction object 
    trans_object = {'sender_id': public, 
                'transaction': transaction,
                'signature': signature, 
                'string_transaction': string_transaction }

     #Then broadcast using the Transaction Publisher we created above
     peerServer.broadcast_transaction(trans_object, transaction_pu)

     is_valid = ecdsa.verify(signature, string_transaction, public, 
            curve.secp256k1, ecdsa.sha256)

     transaction_id = transaction['transaction_id']
     response = {'message': f'Transaction id: {transaction_id} will be 
     added to block {index}',
            'transaction_details': string_transaction, 'signature_valid': 
            is_valid }
     return jsonify(response), 201

Я получаю ошибку во время метода Broadcast Transaction, когда пытаюсь запустить jsondumps - метод ниже

def broadcast_transaction(self, transaction, publisher):
    j_transaction = json.dumps(transaction, sort_keys=True)
    publisher.send_json(j_transaction)
    print(f'Just broadcasted transaction: {j_transaction}')
    return 

Я получаю ошибку TypeError: Объект типа 'Point'не JSON-сериализуемый

Полный отчет:

Traceback (most recent call last):
  File "/home/matshidiso/blockchainProjects/blockchain/myprojectenv/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/matshidiso/blockchainProjects/blockchain/myprojectenv/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/matshidiso/blockchainProjects/blockchain/myprojectenv/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/matshidiso/blockchainProjects/blockchain/myprojectenv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/home/matshidiso/blockchainProjects/blockchain/myprojectenv/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/matshidiso/blockchainProjects/blockchain/myprojectenv/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "pythonBlockchain.py", line 330, in add_transaction
    peerServer.broadcast_transaction(trans_object, transaction_pu)
  File "pythonBlockchain.py", line 211, in broadcast_transaction
    j_transaction = json.dumps(transaction, sort_keys=True)
  File "/usr/lib/python3.6/json/__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "/usr/lib/python3.6/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python3.6/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/usr/lib/python3.6/json/encoder.py", line 180, in default
    o.__class__.__name__)
TypeError: Object of type 'Point' is not JSON serializable

Я запутался, потому что этот же скрипт прекрасно работает на моем персональном MacBook без ошибок, что заставляет меня думать, что, возможно, проблема в том,с операционной системой.Что мне здесь не хватает?

Существуют ли различия при запуске скрипта Python на MacBook и сервере Ubuntu?

...