mirror of
https://gitlab.com/0xDEAD10CC/pycoindroid
synced 2025-07-06 21:11:08 -07:00
Initial commit
This commit is contained in:
commit
310b1ae5e4
6 changed files with 346 additions and 0 deletions
92
src/Droid.py
Normal file
92
src/Droid.py
Normal file
|
@ -0,0 +1,92 @@
|
|||
import logging
|
||||
from CoindroidAPI import CoindroidAPITask
|
||||
from gevent import sleep
|
||||
|
||||
# todo Flesh out getting events to Droids and having them act accordingly
|
||||
|
||||
class DroidTask(CoindroidAPITask):
|
||||
def __init__(self, **kwargs):
|
||||
"""
|
||||
This is a DroidTask
|
||||
It performs actions on events received from:w
|
||||
|
||||
:param \**kwargs:
|
||||
See below
|
||||
:Keyword Arguments:
|
||||
* *apiUrl* (``str``) --
|
||||
Coindroids API URL.
|
||||
Default is ``https://api.coindroids.com/``
|
||||
* *pause* (``int``) --
|
||||
Time to wait between requests
|
||||
"""
|
||||
super(EventTask, self).__init__(**kwargs)
|
||||
self.logger = logging.getLogger(__name__)
|
||||
self.updateEvents()
|
||||
|
||||
def updateEvents(self):
|
||||
while True:
|
||||
try:
|
||||
request = self.apiSession.get(self.apiUrl + "event",
|
||||
params={"order" : "block_height.desc",
|
||||
"currency_id": "eq.2"})
|
||||
# "involved_droids": ""}).json()
|
||||
except:
|
||||
self.logger.exception("Unable to get events!")
|
||||
self.logger.error("Waiting for update...")
|
||||
sleep(self.pause)
|
||||
continue
|
||||
self.currentTransaction = request.json()
|
||||
self.logger.info("Retrieved events from Coindroids...")
|
||||
self.logger.debug("{} events found...".format(len(self.currentTransaction)))
|
||||
if not self.lastTransaction:
|
||||
self.logger.info("No previous events available... Waiting for update...")
|
||||
self.lastTransaction = self.currentTransaction.copy()
|
||||
self.currentTransaction = None
|
||||
sleep(self.pause)
|
||||
continue
|
||||
break
|
||||
|
||||
def compareEvents(self):
|
||||
"""
|
||||
Compares old events to new events
|
||||
:return: list of events
|
||||
"""
|
||||
setLastEventsIDs = set([x.get("action_id") for x in self.lastTransaction])
|
||||
setEventsIDs = set([x.get("action_id") for x in self.currentTransaction])
|
||||
setRemovedEvents = setLastEventsIDs - setEventsIDs
|
||||
setAddedEvents = setEventsIDs - setLastEventsIDs
|
||||
ret = []
|
||||
if setRemovedEvents:
|
||||
self.logger.debug("Events removed from this update: {}".format(setRemovedEvents))
|
||||
if setAddedEvents:
|
||||
self.logger.debug("Added events:")
|
||||
for event_id in setAddedEvents:
|
||||
for event in self.currentTransaction:
|
||||
if event:
|
||||
if event["action_id"] == event_id:
|
||||
ret.append(event)
|
||||
self.logger.debug("At block_height {}, action_id {} - {}({}):{}({}) did {} on {}".format(
|
||||
*(event.get(i) for i in ("block_height",
|
||||
"action_id", "player_username", "player_id",
|
||||
"droid_name", "droidID", "action_type",
|
||||
"target"))))
|
||||
else:
|
||||
self.logger.error("Found empty event!")
|
||||
return ret
|
||||
|
||||
def _run(self):
|
||||
self.logger.info("Running {}".format(self.__class__.__name__))
|
||||
while True:
|
||||
if self.eventsEvent.ready():
|
||||
self.logger.debug("{} woken up...".format(self.__class__.__name__))
|
||||
for _ in range(5):
|
||||
self.logger.debug("Trying to get updated events ({}/5)".format(_))
|
||||
update = self.compareEvents()
|
||||
if update:
|
||||
self.logger.debug("TODO: Send events to queue for worker threads")
|
||||
break
|
||||
else:
|
||||
self.logger.debug("No events detected")
|
||||
sleep(5)
|
||||
sleep(self.pause)
|
||||
continue
|
Loading…
Add table
Add a link
Reference in a new issue