Ejemplo n.º 1
0
Archivo: api.py Proyecto: ralfeus/order
def validate_subcustomer():
    payload = request.get_json()
    if not payload or not payload.get('subcustomer'):
        abort(Response('No subcustomer data was provided', status=400))

    current_app.logger.debug(f"Validating subcustomer {payload}")
    try:
        subcustomer, _is_new = parse_subcustomer(payload['subcustomer'])
        atomy_login(subcustomer.username,
                    subcustomer.password,
                    run_browser=False)
        return jsonify({'result': 'success'})
    except SubcustomerParseError as ex:
        return jsonify({'result': 'failure', 'message': str(ex)})
    except AtomyLoginError:
        current_app.logger.info("Couldn't validate subcustomer %s", payload)
        return jsonify({'result': 'failure'})
Ejemplo n.º 2
0
 def post_purchase_order(self, purchase_order):
     ''' Posts a purchase order to Atomy based on provided data '''
     self.__logger = self.__original_logger.getChild(purchase_order.id)
     # First check whether purchase date set is in acceptable bounds
     if not self.__is_purchase_date_valid(purchase_order.purchase_date):
         self.__logger.info("Skip <%s>: purchase date is %s",
             purchase_order.id, purchase_order.purchase_date)
         return purchase_order
     self.__purchase_order = purchase_order
     self.__logger.info("Logging in...")
     try:
         self.__session_cookies = atomy_login(
             purchase_order.customer.username,
             purchase_order.customer.password,
             run_browser=False)
         # return self.__send_order_post_request()
         self.__init_quick_order(purchase_order)
         ordered_products = self.__add_products(purchase_order.order_products)
         self.__set_purchase_date(purchase_order.purchase_date)
         self.__set_purchase_order_id(purchase_order.id[11:]) # Receiver name
         self.__set_local_shipment(purchase_order, ordered_products)
         self.__set_receiver_mobile(purchase_order.contact_phone)
         self.__set_receiver_address(purchase_order.address)
         self.__set_payment_method()
         self.__set_payment_mobile(purchase_order.payment_phone)
         self.__set_payment_destination(purchase_order.bank_id)
         self.__set_tax_info(purchase_order.company.tax_id)
         # self.__set_mobile_consent()
         po_params = self.__submit_order()
         purchase_order.vendor_po_id = po_params[0]
         purchase_order.payment_account = po_params[1]
         self._set_order_products_status(ordered_products, OrderProductStatus.purchased)
         return purchase_order
     except AtomyLoginError as ex:
         self.__logger.warning("Couldn't log on as a customer %s", str(ex.args))
         raise ex
     except PurchaseOrderError as ex:
         self.__logger.warning(ex)
         if ex.retry:
             self.__logger.warning("Retrying %s", purchase_order.id)
             return self.post_purchase_order(purchase_order)
         raise ex
     except Exception as ex:
         # Saving page for investigation
         # with open(f'order_complete-{purchase_order.id}.html', 'w') as f:
         #     f.write(self.__browser.page_source)
         self.__logger.exception("Failed to post an order %s", purchase_order.id)
         raise ex
Ejemplo n.º 3
0
    def update_purchase_order_status(self, purchase_order):
        logger = self.__logger.getChild('update_purchase_order_status')
        logger.info('Updating %s status', purchase_order.id)
        logger.debug("Logging in as %s", purchase_order.customer.username)
        self.__session_cookies = atomy_login(
            purchase_order.customer.username,
            purchase_order.customer.password,
            run_browser=False)
        logger.debug("Getting POs from Atomy...")
        vendor_purchase_orders = self.__get_purchase_orders()
        self.__logger.debug("Got %s POs", len(vendor_purchase_orders))
        for o in vendor_purchase_orders:
            logger.debug(str(o))
            if o['id'] == purchase_order.vendor_po_id:
                purchase_order.status = o['status']
                return purchase_order

        raise NoPurchaseOrderError(
            'No corresponding purchase order for Atomy PO <%s> was found' %
            o['id'])
Ejemplo n.º 4
0
 def update_purchase_orders_status(self, subcustomer, purchase_orders):
     logger = self.__logger.getChild('update_purchase_orders_status')
     logger.info('Updating %s POs status', len(purchase_orders))
     self.__logger.debug('Attempting to log in as %s...', subcustomer.name)
     self.__session_cookies = atomy_login(
         subcustomer.username,
         subcustomer.password,
         run_browser=False)
     logger.debug('Getting subcustomer\'s POs')
     vendor_purchase_orders = self.__get_purchase_orders()
     logger.debug('Got %s POs', len(vendor_purchase_orders))
     for o in vendor_purchase_orders:
         logger.debug(str(o))
         filtered_po = [po for po in purchase_orders 
                           if po and po.vendor_po_id == o['id']]
         try:
             filtered_po[0].status = o['status']
         except IndexError:
             logger.warning(
                 'No corresponding purchase order for Atomy PO <%s> was found', 
                 o['id'])
Ejemplo n.º 5
0
 def test_login(self):
     atomy_login('23426444', 'atomy#01', run_browser=False)
     atomy_login('23426444', 'atomy#01', run_browser=False)
     with self.assertRaises(AtomyLoginError):
         atomy_login('11111111', '1', run_browser=False)
Ejemplo n.º 6
0
 def __create_session(self):
     with threading.Lock():
         self.__session = atomy_login(username=self.__username,
                                      password=self.__password,
                                      run_browser=False)