def install(self, request):
        """
            Installation / app preferences service handler.

            Creates a new store object if it doesn't exists with
            all the shopify API shop attributes.
        """

        self.before_install(request)

        token = request.session.get('shopify', {}).get("access_token")
        domain = request.session.get('shopify', {}).get("shop_url")

        shop = APIWrapper(token=token, api_domain=domain, log=True).current_shop()
        shop_model, created = self.get_or_create(shop_id=shop["id"])

        for field in shop_model.update_fields():
            setattr(shop_model, field, shop.get(field))

        shop_model.token = token

        self.before_save(shop_model, request)

        shop_model.save()

        self.post_install(request)

        if not self._check_active_plan(shop_model):

            redirect_url = self.get_upgrade_plan_url(shop_model)
            LogService().log_shopify_request(redirect_url)

            return shop_model, redirect_url

        return shop_model, False
    def is_valid_token(self, token, shop_url):

        try:
            api_wrapper = APIWrapper(token=token, shop_url=shop_url)
            api_wrapper.current_shop()
            return True
        except:
            return False