- deserteagle
- Archived posts: 1
- Joined: Dec 14, 2017
Python API Trouble
I have been trying futilely to convert the call function in the API example from JavaScript to Python. The issue is that I don't think it is accepting my API key parameter. I have tried various encodings of the parameter but the only output I get back when I run this (for the call) is:
On the other hand, the deferred subscription appears to be working as intended. Can anyone help me format the call function so that I get back usable state information that I can use to set the initial state?
Quote <Future finished result=[]>In other words, I'm getting an empty array back?
On the other hand, the deferred subscription appears to be working as intended. Can anyone help me format the call function so that I get back usable state information that I can use to set the initial state?
Code:
#!/usr/bin/env python3
import ssl
from autobahn.asyncio.wamp import ApplicationSession
from autobahn.asyncio.wamp import ApplicationRunner
from autobahn.wamp import auth
try:
import asyncio
except ImportError:
print("Couldn't import asyncio")
# Trollius >= 0.3 was renamed
#import trollius as asyncio
user = "web"
secret = "web"
class ProhashingComponent(ApplicationSession):
def onConnect(self):
self.join(self.config.realm, [u"wampcra"], user)
#def onClose(self, wasClean, code, reason):
# print("Closing connection")
def onDisconnect(self):
print("Force quitting")
#sendClose(code=1000, reason="User quit")
asyncio.get_event_loop().stop()
def onChallenge(self, challenge):
if challenge.method == u"wampcra":
print("WAMP-CRA challenge received: {}".format(challenge))
if u'salt' in challenge.extra:
# salted secret
key = auth.derive_key(secret,
challenge.extra['salt'],
challenge.extra['iterations'],
challenge.extra['keylen'])
else:
# plain, unsalted secret
key = secret
# compute signature for challenge, using the key
signature = auth.compute_wcs(key, challenge.extra['challenge'])
# return the signature to the router for verification
return signature
else:
raise Exception("Invalid authmethod {}".format(challenge.method))
@asyncio.coroutine
def onJoin(self, details):
def onAllMinerInit(*args):
print("**MINER INITIALIZATION**:", args)
for arg in args:
print ("another arg:", arg)
loop = asyncio.get_event_loop()
# Schedule a call to hello_world()
loop.call_soon(runSubscription, loop)
def runSubscription(*args):
for arg in args:
print ("another arg:", arg)
tempX = '282b8...rest...of...api...key...here...5c4dc396'
self.subscribe(onAllMinerUpdates, 'miner_updates_'+tempX)
def onAllMinerUpdates(*args):
for arg in args:
print ("another arg:", arg)
print("All miner updates event received:", args)
def testCoRoutine(myThingToPrint):
print(myThingToPrint)
def onProfitabilityUpdates(*args):
for arg in args:
print ("another arg:", arg)
print("Profitability Updates event received:", args)
try:
temp_list = []
temp_list.append("282b8...rest...of...api...key...here...5c4dc396")
temp_list2 = "['282b8...rest...of...api...key...here...5c4dc396']"
temp3 = '282b8...rest...of...api...key...here...5c4dc396';
temp4 = {'282b8...rest...of...api...key...here...5c4dc396'}
temp5 = "{ \"arg1\":[\"282b8...rest...of...api...key...here...5c4dc396\"]}"
testCoRoutine("Initializing ProHash Python client")
self.call(u'f_all_miner_updates', temp5).add_done_callback(onAllMinerInit)
#res = yield from self.call(onAllMinerUpdates, u'f_all_miner_updates_'+temp3)
#print("call result: {}".format(res))
#d2 = self.call(u'f_all_miner_updates', temp_list2)
#res = yield self.call(u'f_all_miner_updates', temp_list2, options=CallOptions(on_progress=onAllMinerUpdates))
#yield from testCoRoutine("Hi there")
#yield from self.subscribe(onProfitabilityUpdates, 'profitability_updates')
#await self.subscribe(on_heartbeat, u'com.myapp.heartbeat', options=SubscribeOptions(details_arg='details'))
#wampSession.call('f_all_miner_updates', ['0a7a6fade943f7b6b9e96b4d1516bfcc733b5158af18d1b43aeec7e45a238c02']).then(initialSessionUpdatesReceived);
#yield from self.subscribe(onAllMinerUpdates, 'miner_updates_'+temp3)
except Exception as e:
print("Could not subscribe to topic:", e)
print("call error: {0}".format(e))
except KeyboardInterrupt:
print("Generated keyboard interrupt")
pass
finally:
print("Going until we quit.")
def main():
context = ssl.create_default_context()
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE
runner = ApplicationRunner(u"wss://live.prohashing.com:443/ws", u"mining", ssl=context)
#runner = ApplicationRunner(u"wss://prohashing.com:444/ws", u"mining", ssl=context)
runner.run(ProhashingComponent)
if __name__ == "__main__":
main()