示例#1
0
    def count(self, model, **kwargs):
        """

        :param model: model
        :param kwargs: filter parameters
        :return: number of row
        """
        try:
            return self.session.query(model).filter_by(**kwargs).count()
        except Exception as e:
            saas_logger.error(e)
            raise HTTPInternalServerError(description=CRITICAL_ERROR_MESSAGE)
示例#2
0
 def send_to_chat_channel(self, body):
     """
     we try to send data to chat channel
     :param body:
     :return:
     """
     data_format = "```json\n{}\n```".format(json.dumps(body, indent=4))
     data = {"text": data_format}
     data = json.dumps(data).encode('utf8')
     url = CHAT_CHANNEL_ENDPOINT
     req = Request(url=url,
                   data=data,
                   headers={"Content-Type": "application/json"})
     try:
         urlopen(req, context=insecure_context)
     except URLError as e:
         saas_logger.error(e)
示例#3
0
    def get(self, model, **kwargs):
        """
        Get data from database.
        Args:
            model: Which model class used to get data
            **kwargs: Extra conditions for filtering data.
        Returns:
            model: Data. If data not found return None
        """
        # params = self.append_default_params(**kwargs)
        try:
            q = self.session.query(model).filter_by(**kwargs)
            return q.scalar()

        except Exception as e:
            saas_logger.error(e)
            raise HTTPInternalServerError(description=CRITICAL_ERROR_MESSAGE)
示例#4
0
 def process_response(self, req, resp, resource, req_succeeded):
     if req_succeeded:
         try:
             self.db.session.commit()
         except IntegrityError as e:
             self.db.session.rollback()
             saas_logger.error(e)
             raise HTTPConflict(
                 description="There is an conflict please change input value"
             )
         except Exception as e:
             self.db.session.rollback()
             saas_logger.error(e)
             raise HTTPInternalServerError(
                 description=
                 "Critical error occurred. We handle this error as soon as "
                 "possible time")
     else:
         self.db.session.rollback()
     Session.remove()
示例#5
0
def send_mailgun(data, testing_mode=False):
    """
    data format: {
              "from": ADDRESS_FROM,
              "to": "[email protected],
              "subject": "Mail Subject,
              "text": "Mail Text",
                }
    if you want to send additional header , add data "h:X-Example-Header": "example data"
    :param data:
    :param testing_mode:
    :return:
    """
    if testing_mode:
        data['o:testmode'] = "true"

    data = urlencode(data)

    data = data.encode('ascii')

    auth_handler = request.HTTPBasicAuthHandler()
    auth_handler.add_password(realm='MG API',
                              user="******",
                              passwd=MAIL_GUN_API_KEY,
                              uri=MAIL_GUN_URL)
    opener = request.build_opener(auth_handler)

    request.install_opener(opener)
    try:
        response = request.urlopen(MAIL_GUN_URL, data)
    except URLError as e:
        saas_logger.error("Send MailGun Raise Error: {}".format(e))
        raise HTTPFailedDependency(
            description=
            "An error occurred while interacting with an external service, please try again later."
        )
    response_body = response.read()
    response_body = json.loads(response_body)
    mail_id = response_body['id'][1:-1]
    return mail_id
示例#6
0
    def filter(self, model, order_field=None, descending=True, **kwargs):
        """

        :param model:
        :param order_field:
        :param descending:
        :param kwargs:
        :return:
        """
        # params = self.append_default_params(**kwargs)
        try:
            q = self.session.query(model).filter_by(**kwargs)
            if order_field:
                order_field = getattr(model, order_field)
                if descending:
                    q = q.order_by(desc(order_field))
                else:
                    q = q.order_by(asc(order_field))
            return q.all()
        except Exception as e:
            saas_logger.error(e)
            raise HTTPInternalServerError(description=CRITICAL_ERROR_MESSAGE)
示例#7
0
    def paginated_filter(self, model, order_field, page_size, page, descending=True, **kwargs):
        """
        Filter with page size, page, model, and order_field

        If you want to take first 20 log row sorting with descending order and filtered with kwargs value
        example: paginated_filter(Log,Log.creation_time, 20, 0, **kwargs)

        paginated_filter
        :param model: model
        :param order_field: order field format model.field
        :param page_size:
        :param page:
        :param descending: default true. if descending set false then sorted with ascending order
        :param kwargs: filter parameters
        """
        try:
            order = desc(order_field) if descending else asc(order_field)
            q = self.session.query(model).filter_by(**kwargs)
            return q.order_by(order).limit(page_size).offset(page * page_size).all()

        except Exception as e:
            saas_logger.error(e)
            raise HTTPInternalServerError(description=CRITICAL_ERROR_MESSAGE)