示例#1
0
 def _delete_bid(self, payload):
     transaction_id = self._get_transaction_id(payload)
     delete_bid_response_channel = f'{self.channel_prefix}/response/delete_bid'
     if not check_for_connected_and_reply(
             self.redis, delete_bid_response_channel, self.connected):
         return
     try:
         arguments = json.loads(payload["data"])
         if ("bid" in arguments and arguments["bid"] is not None) and \
                 not self.is_bid_posted(self.market, arguments["bid"]):
             raise Exception(
                 "Bid_id is not associated with any posted bid.")
     except Exception as e:
         self.redis.publish_json(
             delete_bid_response_channel, {
                 "command":
                 "bid_delete",
                 "error":
                 f"Incorrect delete bid request. Available parameters: (bid)."
                 f"Exception: {str(e)}",
                 "transaction_id":
                 transaction_id
             })
     else:
         self.pending_requests.append(
             IncomingRequest("delete_bid", arguments,
                             delete_bid_response_channel))
示例#2
0
文件: pv.py 项目: insignal-ai/d3a
 def _offer(self, payload):
     transaction_id = self._get_transaction_id(payload)
     offer_response_channel = f'{self.channel_prefix}/response/offer'
     if not check_for_connected_and_reply(
             self.redis, offer_response_channel, self.connected):
         return
     try:
         arguments = json.loads(payload["data"])
         assert set(
             arguments.keys()) == {'price', 'energy', 'transaction_id'}
         arguments['seller'] = self.device.name
         arguments['seller_origin'] = self.device.name
     except Exception as e:
         logging.error(
             f"Incorrect offer request. Payload {payload}. Exception {str(e)}."
         )
         self.redis.publish_json(
             offer_response_channel, {
                 "command": "offer",
                 "error":
                 "Incorrect offer request. Available parameters: (price, energy).",
                 "transaction_id": transaction_id
             })
     else:
         self.pending_requests.append(
             IncomingRequest("offer", arguments, offer_response_channel))
示例#3
0
文件: pv.py 项目: insignal-ai/d3a
 def _delete_offer(self, payload):
     transaction_id = self._get_transaction_id(payload)
     delete_offer_response_channel = f'{self.channel_prefix}/response/delete_offer'
     if not check_for_connected_and_reply(
             self.redis, delete_offer_response_channel, self.connected):
         return
     try:
         arguments = json.loads(payload["data"])
         if ("offer" in arguments and arguments["offer"] is not None) and \
                 not self.offers.is_offer_posted(self.market.id, arguments["offer"]):
             raise Exception(
                 "Offer_id is not associated with any posted offer.")
     except Exception as e:
         logging.error(
             f"Error when handling delete offer request. Payload {payload}. "
             f"Exception {str(e)}.")
         self.redis.publish_json(
             delete_offer_response_channel, {
                 "command": "offer_delete",
                 "error":
                 "Incorrect delete offer request. Available parameters: (offer).",
                 "transaction_id": transaction_id
             })
     else:
         self.pending_requests.append(
             IncomingRequest("delete_offer", arguments,
                             delete_offer_response_channel))
示例#4
0
文件: load.py 项目: rimaaugustine/d3a
    def bid(self, payload):
        transaction_id = self._get_transaction_id(payload)
        required_args = {"price", "energy", "transaction_id"}
        allowed_args = required_args.union(
            {"replace_existing", "attributes", "requirements"})

        bid_response_channel = f"{self.channel_prefix}/response/bid"
        if not check_for_connected_and_reply(self.redis, bid_response_channel,
                                             self.connected):
            return
        try:
            arguments = json.loads(payload["data"])

            # Check that all required arguments have been provided
            assert all(arg in arguments.keys() for arg in required_args)
            # Check that every provided argument is allowed
            assert all(arg in allowed_args for arg in arguments.keys())

        except Exception:
            self.redis.publish_json(
                bid_response_channel, {
                    "command":
                    "bid",
                    "error": ("Incorrect bid request. ",
                              f"Required parameters: {required_args}"
                              f"Available parameters: {allowed_args}."),
                    "transaction_id":
                    transaction_id
                })
        else:
            self.pending_requests.append(
                IncomingRequest("bid", arguments, bid_response_channel))
示例#5
0
 def _list_bids(self, payload):
     list_bids_response_channel = f'{self.device_name}/bids/response'
     if not check_for_connected_and_reply(
             self.redis, list_bids_response_channel, self.connected):
         return
     try:
         filtered_bids = [{
             "id": v.id,
             "price": v.price,
             "energy": v.energy
         } for _, v in self.market.get_bids().items()
                          if v.buyer == self.device_name]
         self.redis.publish_json(list_bids_response_channel, {
             "status": "ready",
             "bid_list": filtered_bids
         })
     except Exception as e:
         logging.error(
             f"Error when handling list bids on area {self.device_name}: "
             f"Exception: {str(e)}")
         self.redis.publish_json(
             list_bids_response_channel, {
                 "status":
                 "error",
                 "error_message":
                 f"Error when listing bids on area {self.device_name}."
             })
示例#6
0
 def _area_stats(self, payload):
     area_stats_response_channel = f'{self.device_name}/stats/response'
     if not check_for_connected_and_reply(
             self.redis, area_stats_response_channel, self.connected):
         return
     try:
         device_stats = {
             k: v
             for k, v in self.owner.stats.aggregated_stats.items()
             if v is not None
         }
         market_stats = {
             k: v
             for k, v in self.area.stats.aggregated_stats.items()
             if v is not None
         }
         self.redis.publish_json(
             area_stats_response_channel, {
                 "status": "ready",
                 "device_stats": device_stats,
                 "market_stats": market_stats
             })
     except Exception as e:
         logging.error(
             f"Error reporting stats for area {self.device_name}: "
             f"Exception: {str(e)}")
         self.redis.publish_json(
             area_stats_response_channel, {
                 "status":
                 "error",
                 "error_message":
                 f"Error reporting stats for area {self.device_name}."
             })
示例#7
0
 def _list_offers(self, payload):
     self._get_transaction_id(payload)
     list_offers_response_channel = f'{self.channel_prefix}/response/list_offers'
     if not check_for_connected_and_reply(self.redis, list_offers_response_channel,
                                          self.connected):
         return
     arguments = json.loads(payload["data"])
     self.pending_requests.append(
         IncomingRequest("list_offers", arguments, list_offers_response_channel))
示例#8
0
 def _delete_bid(self, payload):
     delete_bid_response_channel = f'{self.device_name}/delete_bid/response'
     if not check_for_connected_and_reply(
             self.redis, delete_bid_response_channel, self.connected):
         return
     try:
         arguments = json.loads(payload["data"])
         assert set(arguments.keys()) == {'bid'}
     except Exception:
         self.redis.publish_json(
             delete_bid_response_channel, {
                 "error":
                 "Incorrect delete bid request. Available parameters: (bid)."
             })
     else:
         self._delete_bid_impl(arguments, delete_bid_response_channel)
示例#9
0
文件: pv.py 项目: xg86/d3a
 def _delete_offer(self, payload):
     delete_offer_response_channel = f'{self.device_name}/delete_offer/response'
     if not check_for_connected_and_reply(self.redis, delete_offer_response_channel,
                                          self.connected):
         return
     try:
         arguments = json.loads(payload["data"])
         assert set(arguments.keys()) == {'offer'}
     except Exception as e:
         logging.error(f"Error when handling delete offer request. Payload {payload}. "
                       f"Exception {str(e)}.")
         self.redis.publish_json(
             delete_offer_response_channel,
             {"error": "Incorrect delete offer request. Available parameters: (offer)."}
         )
     else:
         self._delete_offer_impl(arguments, delete_offer_response_channel)
示例#10
0
 def _bid(self, payload):
     bid_response_channel = f'{self.device_name}/bid/response'
     if not check_for_connected_and_reply(self.redis, bid_response_channel,
                                          self.connected):
         return
     try:
         arguments = json.loads(payload["data"])
         assert set(arguments.keys()) == {'price', 'energy'}
         arguments['buyer_origin'] = self.device_name
     except Exception:
         self.redis.publish_json(
             bid_response_channel, {
                 "error":
                 "Incorrect bid request. Available parameters: (price, energy)."
             })
     else:
         self._bid_impl(arguments, bid_response_channel)
示例#11
0
文件: pv.py 项目: xg86/d3a
 def _offer(self, payload):
     offer_response_channel = f'{self.device_name}/offer/response'
     if not check_for_connected_and_reply(self.redis, offer_response_channel,
                                          self.connected):
         return
     try:
         arguments = json.loads(payload["data"])
         assert set(arguments.keys()) == {'price', 'energy'}
         arguments['seller'] = self.device_name
         arguments['seller_origin'] = self.device_name
     except Exception as e:
         logging.error(f"Incorrect offer request. Payload {payload}. Exception {str(e)}.")
         self.redis.publish_json(
             offer_response_channel,
             {"error": "Incorrect offer request. Available parameters: (price, energy)."}
         )
     else:
         self._offer_impl(arguments, offer_response_channel)
示例#12
0
 def _bid(self, payload):
     transaction_id = self._get_transaction_id(payload)
     bid_response_channel = f'{self.channel_prefix}/response/bid'
     if not check_for_connected_and_reply(self.redis, bid_response_channel, self.connected):
         return
     try:
         arguments = json.loads(payload["data"])
         assert set(arguments.keys()) == {'price', 'energy', 'transaction_id'}
         arguments['buyer'] = self.device.name
         arguments['buyer_origin'] = self.device.name
     except Exception:
         self.redis.publish_json(
             bid_response_channel,
             {"command": "bid",
              "error": "Incorrect bid request. Available parameters: (price, energy).",
              "transaction_id": transaction_id})
     else:
         self.pending_requests.append(
             IncomingRequest("bid", arguments, bid_response_channel))