def unsubscribe_from_anime(self, anime_doc_id: str): try: anime = client.query( q.get(q.ref(q.collection(animes), anime_doc_id))) client.query( q.let( { 'anime_ref': q.ref(q.collection(animes), anime_doc_id), 'bot_user': q.ref(q.collection(users), self.chat_id), 'followers': q.select(['data', 'followers'], q.get(q.var('anime_ref'))), }, q.do( q.update( q.var('anime_ref'), { 'data': { 'followers': q.subtract( q.var('followers'), 1) } }), q.update( q.var('bot_user'), { 'data': { 'animes_watching': q.filter_( q.lambda_( 'watched_anime_ref', q.not_( q.equals( q.var('watched_anime_ref'), q.var('anime_ref')))), q.select(['data', 'animes_watching'], q.get(q.var('bot_user')))) } }), q.if_(q.equals(q.var('followers'), 1), q.delete(q.var('anime_ref')), 'successful!')))) updater.bot.send_message(chat_id=self.chat_id, text='You have stopped following ' + anime['data']['title']) except errors.NotFound: logger.info( 'Somehow, a user {0} almost unsubscribed from an anime that did not exist' .format(self.chat_id)) except Exception as err: log_error(err)
def create_transaction(client, num_customers, max_txn_amount): # # This method is going to create a random transaction that moves a random amount # from a source customer to a destination customer. Prior to committing the transaction # a check will be performed to insure that the source customer has a sufficient balance # to cover the amount and not go into an overdrawn state. # uuid = uuid4().urn[9:] source_id = randint(1, num_customers) dest_id = randint(1, num_customers) while dest_id == source_id: dest_id = randint(1, num_customers) amount = randint(1, max_txn_amount) transaction = {"uuid": uuid, "sourceCust": source_id, "destCust": dest_id , "amount": amount} res = client.query( q.let( {"source_customer": q.get(q.match(q.index("customer_by_id"), source_id)), "dest_customer": q.get(q.match(q.index("customer_by_id"), dest_id))}, q.let( {"source_balance": q.select(["data", "balance"], q.var("source_customer")), "dest_balance": q.select(["data", "balance"], q.var("dest_customer"))}, q.let( {"new_source_balance": q.subtract(q.var("source_balance"), amount), "new_dest_balance": q.add(q.var("dest_balance"), amount)}, q.if_( q.gte(q.var("new_source_balance"), 0), q.do( q.create(q.class_("transactions"), {"data": transaction}), q.update(q.select("ref", q.var("source_customer")), {"data": {"txnID": uuid, "balance": q.var("new_source_balance")}}), q.update(q.select("ref", q.var("dest_customer")), {"data": {"txnID": uuid, "balance": q.var("new_dest_balance")}}) ), "Error. Insufficient funds." ) ) ) ) )
def wordPartsGenerator(word): return q.let( { "indexes": q.map_( # Reduce this array if you want less ngrams per word. # Setting it to [ 0 ] would only create the word itself, Setting it to [0, 1] would result in the word itself # and all ngrams that are one character shorter, etc.. lambda index: q.subtract(q.length(word), index), maxNgrams), "indexesFiltered": q.filter_( # left min parts length 3 lambda l: q.gte(l, 3), q.var('indexes')), "ngramsArray": q.distinct( q.union( q.map_(lambda l: q.ngram(q.lowercase(word), l, l), q.var('indexesFiltered')))) }, q.var('ngramsArray'))
def test_subtract(self): self.assertJson(query.subtract(1), '{"subtract":1}') self.assertJson(query.subtract(1, 2, 3), '{"subtract":[1,2,3]}') self.assertJson(query.subtract([1, 2, 3]), '{"subtract":[1,2,3]}')
def test_subtract(self): self.assertEqual(self._q(query.subtract(2, 3, 5)), -6) self.assertEqual(self._q(query.subtract(2)), 2) self._assert_bad_query(query.subtract())