def test_from_url(self): """Test to check if creating a product by url works as intended""" # Create a product by url - needs a network connection my_p = Product.from_url(self.p.url) self.assertEqual(type(my_p), Product) self.assertEqual(my_p.id, self.p.entity_id) self.assertEqual(my_p.name, self.p.name) self.assertEqual(my_p.url, self.p.url) # The price obviously can't be checked by a precise value self.assertEqual(type(my_p.price), float) self.assertGreater(my_p.price, 0.1) # Make sure that wrong urls lead to exceptions with self.assertRaises(InvalidWishlistURLException): failed_p = Product.from_url("http://example.com")
def add_entity(update, context): msg = update.message text = update.message.text t_user = update.effective_user logger.info("Adding new entity for user '{}'".format(t_user.id)) reply_markup = InlineKeyboardMarkup([[cancel_button]]) user = User(user_id=t_user.id, first_name=t_user.first_name, last_name=t_user.last_name, username=t_user.username, lang_code=t_user.language_code) core.add_user_if_new(user) try: entity_type = core.get_type_by_url(text) url = core.get_e_url(text, entity_type) logger.info("Valid URL for new entity is '{}'".format(url)) except InvalidURLException: logger.warning("Invalid url '{}' sent by user {}!".format(text, t_user)) msg.reply_text(text="Die URL ist ungültig!", reply_markup=reply_markup) return try: if entity_type == EntityType.WISHLIST: entity = Wishlist.from_url(url) elif entity_type == EntityType.PRODUCT: entity = Product.from_url(url) else: raise ValueError("EntityType '{}' not found!".format(entity_type)) except HTTPError as e: logger.error(e) if e.response.status_code == 403: msg.reply_text(text="Die URL ist nicht öffentlich einsehbar, daher wurde kein neuer Preisagent erstellt!") elif e.response.status_code == 429: msg.reply_text(text="Entschuldige, ich bin temporär bei Geizhals blockiert und kann keine Preise auslesen. Bitte probiere es später noch einmal.") except (ValueError, Exception) as e: # Raised when price could not be parsed logger.error(e) msg.reply_text(text="Name oder Preis konnte nicht ausgelesen werden! Preisagent wurde nicht erstellt!") else: core.add_entity_if_new(entity) try: logger.debug("Subscribing to entity.") core.subscribe_entity(user, entity) entity_data = EntityType.get_type_article_name(entity_type) msg.reply_html("Preisagent für {article} {type} {link_name} erstellt! Aktueller Preis: {price}".format( article=entity_data.get("article"), type=entity_data.get("name"), link_name=link(entity.url, entity.name), price=bold(price(entity.price, signed=False))), disable_web_page_preview=True) context.user_data["state"] = State.IDLE except AlreadySubscribedException: logger.debug("User already subscribed!") msg.reply_text("Du hast bereits einen Preisagenten für diese URL! Bitte sende mir eine andere URL.", reply_markup=InlineKeyboardMarkup([[cancel_button]]))
def add_product(bot, update): text = update.message.text user = update.message.from_user logger.info("Adding new product for user '{}'".format(user.id)) reply_markup = InlineKeyboardMarkup([[cancel_button]]) add_user_if_new(user) try: url = get_p_url(text) logger.info("Valid URL for new product is '{}'".format(url)) except InvalidURLException: logger.warning("Invalid url '{}' sent by user {}!".format(text, user)) bot.sendMessage(chat_id=user.id, text="Die URL ist ungültig!", reply_markup=reply_markup) return try: product = Product.from_url(url) except HTTPError as e: logger.error(e) if e.code == 403: bot.sendMessage( chat_id=user.id, text= "Das Produkt ist nicht zugänglich! Preisagent wurde nicht erstellt!" ) elif e.code == 429: bot.sendMessage( chat_id=user.id, text= "Entschuldige, ich bin temporär bei Geizhals blockiert und kann keine Preise auslesen. Bitte probiere es später noch einmal." ) except ValueError as valueError: # Raised when price could not be parsed logger.error(valueError) bot.sendMessage( chat_id=user.id, text= "Name oder Preis konnte nicht ausgelesen werden! Preisagent wurde nicht erstellt!" ) except Exception as e: logger.error(e) bot.sendMessage( chat_id=user.id, text= "Name oder Preis konnte nicht ausgelesen werden! Wunschliste nicht erstellt!" ) else: add_product_if_new(product) try: logger.debug("Subscribing to product.") subscribe_entity(user, product) bot.sendMessage( user.id, "Preisagent für das Produkt {link_name} erstellt! Aktueller Preis: {price}" .format(link_name=link(product.url, product.name), price=bold(price(product.price, signed=False))), parse_mode="HTML", disable_web_page_preview=True) rm_state(user.id) except AlreadySubscribedException: logger.debug("User already subscribed!") bot.sendMessage( user.id, "Du hast bereits einen Preisagenten für dieses Produkt! Bitte sende mir eine andere URL.", reply_markup=InlineKeyboardMarkup([[cancel_button]]))