def debug_clear_service(): if not project_settings.TESTS_RUNNING: return tt_api.sync_request(url=conf.game_settings.TT_ENERGY_DEBUG_CLEAR_SERVICE_URL, data=bank_pb2.DebugClearServiceRequest(), AnswerType=bank_pb2.DebugClearServiceResponse)
def change_cards(account_id, operation_type, to_add=(), to_remove=(), storage=relations.STORAGE.FAST): operations = [] for card in to_remove: operations.append( storage_pb2.Operation(destroy=storage_pb2.OperationDestroy( item_id=card.uid.hex, owner_id=account_id, operation_type=operation_type))) for card in to_add: operations.append( storage_pb2.Operation(create=storage_pb2.OperationCreate( item_id=card.uid.hex, owner_id=account_id, storage_id=storage.value, base_type=card.item_base_type, full_type=card.item_full_type, data=s11n.to_json(card.serialize()), operation_type=operation_type))) tt_api.sync_request(url=conf.settings.TT_STORAGE_APPLY_URL, data=storage_pb2.ApplyRequest(operations=operations), AnswerType=storage_pb2.ApplyResponse)
def remove_old_system_messages(): tt_api.sync_request( url=conf.settings.TT_REMOVE_OLD_MESSAGES_URL, data=personal_messages_pb2.RemoveOldMessagesRequest( accounts_ids=[accounts_logic.get_system_user_id()], barrier=conf.settings.SYSTEM_MESSAGES_LEAVE_TIME.total_seconds()), AnswerType=personal_messages_pb2.RemoveOldMessagesResponse)
def cmd_debug_clear_service(self): if not project_settings.TESTS_RUNNING: return tt_api.sync_request(url=self.entry_point + 'debug-clear-service', data=impacts_pb2.DebugClearServiceRequest(), AnswerType=impacts_pb2.DebugClearServiceResponse)
def debug_clear_service(): if not project_settings.TESTS_RUNNING: return tt_api.sync_request(url=conf.settings.TT_STORAGE_DEBUG_CLEAR_SERVICE_URL, data=storage_pb2.DebugClearServiceRequest(), AnswerType=storage_pb2.DebugClearServiceResponse)
def cmd_scale_impacts(self, target_types, scale): data = impacts_pb2.ScaleImpactsRequest( target_types=[target_type.value for target_type in target_types], scale=scale) tt_api.sync_request(url=self.entry_point + 'scale-impacts', data=data, AnswerType=impacts_pb2.ScaleImpactsResponse)
def debug_clear_service(): if not project_settings.TESTS_RUNNING: return tt_api.sync_request( url=conf.accounts_settings.TT_PLAYERS_TIMERS_DEBUG_CLEAR_SERVICE_URL, data=timers_pb2.DebugClearServiceRequest(), AnswerType=timers_pb2.DebugClearServiceResponse)
def change_cards_timer_speed(account_id, speed): try: tt_api.sync_request( url=conf.accounts_settings.TT_PLAYERS_TIMERS_CHANGE_SPEED, data=timers_pb2.ChangeSpeedRequest( owner_id=account_id, entity_id=0, type=relations.PLAYER_TIMERS_TYPES.CARDS_MINER.value, speed=speed), AnswerType=timers_pb2.ChangeSpeedResponse) except common_exceptions.TTAPIUnexpectedAPIStatus: raise exceptions.CanNotChangeCardsTimerSpeed()
def place_sell_lots(lots): raw_lots = [] for lot in lots: raw_lots.append( market_pb2.Lot(item_type=lot.full_type, item_id=lot.item_id.hex, owner_id=lot.owner_id, price=lot.price)) tt_api.sync_request(url=conf.payments_settings.TT_PLACE_SELL_LOT_URL, data=market_pb2.PlaceSellLotRequest(lots=raw_lots), AnswerType=market_pb2.PlaceSellLotResponse)
def create_cards_timer(account_id): try: tt_api.sync_request( url=conf.accounts_settings.TT_PLAYERS_TIMERS_CREATE_TIMER, data=timers_pb2.CreateTimerRequest( owner_id=account_id, entity_id=0, type=relations.PLAYER_TIMERS_TYPES.CARDS_MINER.value, speed=logic_cards_constants.NORMAL_PLAYER_SPEED, border=logic_cards_constants.RECEIVE_TIME, resources=0, callback_data=''), AnswerType=timers_pb2.CreateTimerResponse) except common_exceptions.TTAPIUnexpectedAPIStatus: raise exceptions.CanNotCreateCardsTimer()
def cmd_get_impacters_ratings(self, targets, actor_types, limit): data = impacts_pb2.GetImpactersRatingsRequest( targets=[ impacts_pb2.Object(type=target_type.value, id=target_id) for target_type, target_id in targets ], actor_types=[actor_type.value for actor_type in actor_types], limit=limit) answer = tt_api.sync_request( url=self.entry_point + 'get-impacters-ratings', data=data, AnswerType=impacts_pb2.GetImpactersRatingsResponse) ratings = {} for answer_rating in answer.ratings: target = (OBJECT_TYPE(answer_rating.target.type), answer_rating.target.id) rating = [ PowerImpact(type=self.impact_type, actor_type=OBJECT_TYPE(record.actor.type), actor_id=record.actor.id, target_type=target[0], target_id=target[1], amount=record.amount) for record in answer_rating.records ] ratings[target] = rating return ratings
def has_cards(account_id, cards_ids): answer = tt_api.sync_request(url=conf.settings.TT_STORAGE_HAS_ITEMS_URL, data=storage_pb2.HasItemsRequest( owner_id=account_id, items_ids=[id.hex for id in cards_ids]), AnswerType=storage_pb2.HasItemsResponse) return answer.has
def get_diary(account_id): answer = tt_api.sync_request( url=conf.heroes_settings.DIARY_URL, data=diary_pb2.DiaryRequest(account_id=account_id), AnswerType=diary_pb2.DiaryResponse) return answer.diary
def new_messages_number(account_id): answer = tt_api.sync_request( url=conf.settings.TT_NEW_MESSAGES_NUMBER_URL, data=personal_messages_pb2.NewMessagesNumberRequest( account_id=account_id), AnswerType=personal_messages_pb2.NewMessagesNumberResponse) return answer.number
def diary_version(account_id): answer = tt_api.sync_request( url=conf.heroes_settings.DIARY_VERSION_URL, data=diary_pb2.VersionRequest(account_id=account_id), AnswerType=diary_pb2.VersionResponse) return answer.version
def change_cards_storage(account_id, operation_type, cards, old_storage, new_storage): operations = [] for card in cards: operations.append( storage_pb2.Operation( change_storage=storage_pb2.OperationChangeStorage( item_id=card.uid.hex, owner_id=account_id, old_storage_id=old_storage.value, new_storage_id=new_storage.value, operation_type=operation_type))) tt_api.sync_request(url=conf.settings.TT_STORAGE_APPLY_URL, data=storage_pb2.ApplyRequest(operations=operations), AnswerType=storage_pb2.ApplyResponse)
def item_type_prices(item_type, owner_id): answer = tt_api.sync_request( url=conf.payments_settings.TT_ITEM_TYPE_PRICES_URL, data=market_pb2.ItemTypePricesRequest(item_type=item_type, owner_id=owner_id), AnswerType=market_pb2.ItemTypePricesResponse) return dict(answer.prices), dict(answer.owner_prices)
def get_message(account_id, message_id): data = personal_messages_pb2.GetMessageRequest(account_id=account_id, message_id=message_id) answer = tt_api.sync_request(url=conf.settings.TT_GET_MESSAGE_URL, data=data, AnswerType=personal_messages_pb2.GetMessageResponse) if answer.HasField('message'): return answer.message return None
def get_conversation(account_id, partner_id, text=None, offset=None, limit=None): data = personal_messages_pb2.GetConversationRequest(account_id=account_id, partner_id=partner_id, text=text, offset=offset, limit=limit) answer = tt_api.sync_request(url=conf.settings.TT_GET_CONVERSATION_URL, data=data, AnswerType=personal_messages_pb2.GetConversationResponse) return answer.total, answer.messages
def get_sent_messages(account_id, text=None, offset=None, limit=None): data = personal_messages_pb2.GetMessagesRequest(account_id=account_id, type=personal_messages_pb2.OwnerType.DESCRIPTOR.values_by_name['SENDER'].number, text=text, offset=offset, limit=limit) answer = tt_api.sync_request(url=conf.settings.TT_GET_MESSAGES_URL, data=data, AnswerType=personal_messages_pb2.GetMessagesResponse) return answer.total, answer.messages
def list_sell_lots(owner_id): answer = tt_api.sync_request( url=conf.payments_settings.TT_LIST_SELL_LOTS_URL, data=market_pb2.ListSellLotsRequest(owner_id=owner_id), AnswerType=market_pb2.ListSellLotsResponse) return [ objects.Lot(owner_id=owner_id, full_type=lot.item_type, item_id=uuid.UUID(lot.item_id), price=lot.price, created_at=datetime.datetime.fromtimestamp(lot.created_at)) for lot in answer.lots ]
def history(page, records_on_page): answer = tt_api.sync_request(url=conf.payments_settings.TT_HISTORY_URL, data=market_pb2.HistoryRequest( page=page, records_on_page=records_on_page), AnswerType=market_pb2.HistoryResponse) records = [ objects.LogRecord(item_type=record.item_type, created_at=datetime.datetime.fromtimestamp( record.created_at), price=record.price) for record in answer.records ] return answer.page, answer.total_records, records
def statistics(time_from, time_till): answer = tt_api.sync_request( url=conf.payments_settings.TT_STATISTICS_URL, data=market_pb2.StatisticsRequest( time_from=time.mktime(time_from.timetuple()) + time_from.microsecond / 10**6, time_till=time.mktime(time_till.timetuple()) + time_till.microsecond / 10**6), AnswerType=market_pb2.StatisticsResponse) return { 'sell_lots_placed': answer.sell_lots_placed, 'sell_lots_closed': answer.sell_lots_closed, 'turnover': answer.turnover }
def handle(self, *args, **options): now = datetime.datetime.utcnow() for account in models.Account.objects.all().order_by('id').iterator(): print('process account {}'.format(account.id)) speed = logic_cards_constants.NORMAL_PLAYER_SPEED if now < account.premium_end_at: speed = logic_cards_constants.PREMIUM_PLAYER_SPEED tt_api.sync_request( url=conf.accounts_settings.TT_PLAYERS_TIMERS_CREATE_TIMER, data=timers_pb2.CreateTimerRequest( owner_id=account.id, entity_id=0, type=relations.PLAYER_TIMERS_TYPES.CARDS_MINER.value, speed=speed, border=logic_cards_constants.RECEIVE_TIME, resources=random.randint( 0, logic_cards_constants.RECEIVE_TIME - 1), callback_data=''), AnswerType=timers_pb2.CreateTimerResponse)
def cancel_lot(item_type, price, owner_id): answer = tt_api.sync_request( url=conf.payments_settings.TT_CANCEL_SELL_LOT_URL, data=market_pb2.CancelSellLotRequest(item_type=item_type, price=price, number=1, owner_id=owner_id), AnswerType=market_pb2.CancelSellLotResponse) return [ objects.Lot(owner_id=lot.owner_id, full_type=lot.item_type, item_id=uuid.UUID(lot.item_id), price=lot.price) for lot in answer.lots ]
def load_cards(account_id): answer = tt_api.sync_request( url=conf.settings.TT_STORAGE_GET_ITEMS_URL, data=storage_pb2.GetItemsRequest(owner_id=account_id), AnswerType=storage_pb2.GetItemsResponse) cards = {} for item in answer.items: id = uuid.UUID(item.id) cards[id] = objects.Card.deserialize(uid=id, data=s11n.from_json(item.data), storage=relations.STORAGE( item.storage_id)) return cards
def get_owner_timers(account_id): answer = tt_api.sync_request( url=conf.accounts_settings.TT_PLAYERS_TIMERS_GET_OWNER_TIMERS, data=timers_pb2.GetOwnerTimersRequest(owner_id=account_id), AnswerType=timers_pb2.GetOwnerTimersResponse) return [ objects.Timer( id=timer.id, owner_id=timer.owner_id, entity_id=timer.entity_id, type=relations.PLAYER_TIMERS_TYPES(timer.type), speed=timer.speed, border=timer.border, resources=timer.resources, resources_at=datetime.datetime.fromtimestamp(timer.resources_at), finish_at=datetime.datetime.fromtimestamp(timer.finish_at)) for timer in answer.timers ]
def cmd_get_actor_impacts(self, actor_type, actor_id, target_types): data = impacts_pb2.GetActorImpactsRequest( actor=impacts_pb2.Object(type=actor_type.value, id=actor_id), target_types=[target_type.value for target_type in target_types]) answer = tt_api.sync_request( url=self.entry_point + 'get-actor-impacts', data=data, AnswerType=impacts_pb2.GetActorImpactsResponse) return [ PowerImpact(type=self.impact_type, actor_type=actor_type, actor_id=actor_id, target_type=OBJECT_TYPE(impact.target.type), target_id=impact.target.id, amount=impact.amount) for impact in answer.impacts ]
def cmd_get_targets_impacts(self, targets): data = impacts_pb2.GetTargetsImpactsRequest(targets=[ impacts_pb2.Object(type=target_type.value, id=target_id) for target_type, target_id in targets ]) answer = tt_api.sync_request( url=self.entry_point + 'get-targets-impacts', data=data, AnswerType=impacts_pb2.GetTargetsImpactsResponse) return [ PowerImpact(type=self.impact_type, actor_type=None, actor_id=None, target_type=OBJECT_TYPE(impact.target.type), target_id=impact.target.id, amount=impact.amount) for impact in answer.impacts ]
def info(owner_id=None): request = market_pb2.InfoRequest() if owner_id is not None: request.owner_id = owner_id answer = tt_api.sync_request(url=conf.payments_settings.TT_INFO_URL, data=request, AnswerType=market_pb2.InfoResponse) data = [] for info in answer.info: data.append( objects.ItemTypeSummary(full_type=info.item_type, sell_number=info.sell_number, min_sell_price=info.min_sell_price, max_sell_price=info.max_sell_price, owner_sell_number=info.owner_sell_number)) return data
def diary_version(account_id): answer = tt_api.sync_request(url=conf.heroes_settings.DIARY_VERSION_URL, data=diary_pb2.VersionRequest(account_id=account_id), AnswerType=diary_pb2.VersionResponse) return answer.version
def get_diary(account_id): answer = tt_api.sync_request(url=conf.heroes_settings.DIARY_URL, data=diary_pb2.DiaryRequest(account_id=account_id), AnswerType=diary_pb2.DiaryResponse) return answer.diary