示例#1
0
文件: rest.py 项目: RipaEx/dpos
 def _manage_response(req, returnKey, error=None):
     # print(req.url)
     if req.status_code < 300:
         try:
             data = req.json()
         except Exception as error:
             data = {
                 "success": True,
                 "except": True,
                 "data": req.text,
                 "error": "%r" % error
             }
         else:
             tmp = data.get(returnKey, False)
             if not tmp:
                 if returnKey:
                     data["warning"] = "returnKey %s not found" % returnKey
             else:
                 data = tmp
                 if isinstance(tmp, dict):
                     data = filter_dic(tmp)
         return data
     else:
         return {
             "success": False,
             "except": True,
             "error": "status code %s returned" % req.status_code
         }
示例#2
0
class Delegate(dposlib.blockchain.Content):

    wallet = property(lambda cls: Wallet(cls.address), None, None, "")
    voters = property(
        lambda cls: list(sorted(
            [
                filter_dic(dic) for dic in
                loadPages(GET.api.delegates.__getattr__(cls.username).voters)
            ],
            key=lambda e: e["balance"],
            reverse=True
        )),
        None, None, ""
    )
    lastBlock = property(
        lambda cls: Block(cls.blocks["last"]["id"]), None, None, ""
    )

    def __init__(self, username, **kw):
        dposlib.blockchain.Content.__init__(
            self, GET.api.delegates, username,
            **dict({"returnKey": "data"}, **kw)
        )

    def getRecentBlocks(self, limit=50):
        return loadPages(
            GET.api.delegates.__getattr__(self.username).blocks,
            limit=limit
        )
示例#3
0
	def lastTransactions(self, limit=50):
		received, sent, count = [], [], 0
		while count < limit:
			sent.extend(rest.GET.api.transactions(senderId=self.address, orderBy="timestamp:desc", returnKey="data", offset=len(sent)))
			received.extend(rest.GET.api.transactions(recipientId=self.address, orderBy="timestamp:desc", returnKey="data", offset=len(received)))
			tmpcount = len(sent)+len(received)
			count = limit if count == tmpcount else tmpcount
		return [filter_dic(dic) for dic in sorted(received+sent, key=lambda e:e["timestamp"].get("epoch", None), reverse=True)[:limit]]
示例#4
0
def _call(method="GET", *args, **kwargs):
    returnKey = kwargs.pop("returnKey", False)
    response = req.EndPoint._open(
        req.EndPoint.build_req(method, *args, **kwargs))
    if returnKey and returnKey in response:
        return filter_dic(response[returnKey])
    else:
        return response
示例#5
0
 def voters(self):
     voters = misc.loadPages(
         dposlib.rest.GET.api.delegates.__getattr__(
             self.username).__getattr__("voters"))
     return list(
         sorted([filter_dic(dic) for dic in voters],
                key=lambda e: e["balance"],
                reverse=True))
示例#6
0
 def voters(self):
     voters = [
         a for a in rest.GET.api.delegates.voters(publicKey=self.publicKey,
                                                  returnKey="accounts")
         if a["balance"] not in [0, "0"]
     ]
     return list(
         sorted([filter_dic(dic) for dic in voters],
                key=lambda e: e["balance"],
                reverse=True))
示例#7
0
 def transactions(self, limit=50):
     sent = misc.loadPages(dposlib.rest.GET.api.wallets.__getattr__(
         self.address).__getattr__("transactions").__getattr__("sent"),
                           limit=limit)
     received = misc.loadPages(dposlib.rest.GET.api.wallets.__getattr__(
         self.address).__getattr__("transactions").__getattr__("received"),
                               limit=limit)
     return [
         filter_dic(dic) for dic in sorted(
             received + sent,
             key=lambda e: e.get("timestamp", {}).get("epoch"),
             reverse=True)
     ][:limit]
示例#8
0
文件: api.py 项目: Moustikitos/dpos
class Block(Content):

    previous = property(lambda cls: Block(cls._Data__dict["previous"]), None,
                        None, "")

    transactions = property(
        lambda cls: [
            filter_dic(dic) for dic in loadPages(
                GET.api.blocks.__getattr__(cls.id).transactions, limit=False)
        ], None, None, "")

    def __init__(self, blk_id, **kw):
        Content.__init__(self, GET.api.blocks, blk_id,
                         **dict({"returnKey": "data"}, **kw))
示例#9
0
 def _GET(*args, **kwargs):
     # API response contains several fields and wanted one can be extracted using
     # a returnKey that match the field name
     return_key = kwargs.pop('returnKey', False)
     peer = kwargs.pop('peer', False)
     peer = peer if peer else random.choice(cfg.peers)
     try:
         req = requests.get(peer + "/".join(args),
                            params=dict([k.replace('and_', 'AND:'), v]
                                        for k, v in kwargs.items()),
                            headers=cfg.headers,
                            verify=cfg.verify,
                            timeout=cfg.timeout)
         # print(req.url)
         data = req.json()
     except Exception as error:
         data = {"success": False, "error": "%r" % error, "except": True}
     else:
         if return_key in data:
             data = data.get(return_key, {})
             if isinstance(data, dict):
                 data = filter_dic(data)
     return data
示例#10
0
	def voters(self):
		voters = [a for a in rest.GET.api.delegates(self.username, "voters", returnKey="data") if a["balance"] not in [0, "0"]]
		return list(sorted([filter_dic(dic) for dic in voters], key=lambda e:e["balance"], reverse=True))
示例#11
0
	def forged(self):
		result = filter_dic(rest.GET.api.delegates.forging.getForgedByAccount(generatorPublicKey=self.publicKey))
		result.pop("success", False)
		return result
示例#12
0
 def forged(self):
     return filter_dic(self._Data__dict["forged"])