Ejemplo n.º 1
0
    def _handle_request(self):
        body = {}
        if self.parse_from_body:
            try:
                body = json.loads(request.data)

                # 统一打印下请求参数
                for key, value in body.iteritems():
                    if key == "common_param":
                        self.common_param = value
                        self.os = self.common_param["device_type"]
                        self.app_version = self.common_param["app_version"]

                        self.cuid = self.common_param["cuid"]  # 游客id
                        self.user_id = self.common_param["user_id"]  # 用户id

                logger.debug(body)
            except Exception, ex:
                logger.error("[%s] request.body not json str, ex: %s",
                             self.trace_id,
                             ex,
                             exc_info=1)
                self.ret_code = errcode.JSON_BODY_DECODE_ERROR
                self.ret_msg = "request.body not json str"
                return False
Ejemplo n.º 2
0
 def get_action_code(self):
     if not self.check_input_arguments(["phone"]):
         return self._response(error_msg.PARAMS_ERROR)
     code = "".join([str(random.randint(0, 9)) for i in range(4)])
     url = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS" 
     try:
         m = hashlib.md5()
         sid = "4bb28e9c0f194975bfe28214941690bd"
         token = "be9da0e2c8d04b5c86c9a105ac6e4a5d"
         ts = datetime.datetime.now().strftime("%Y%m%d%H%m%s")
         m.update("{0}{1}{2}".format(sid, token, ts).encode('utf-8'))
         sig = m.hexdigest()
         payload = {
                 "accountSid": sid,
                 "sig": sig,
                 "timestamp": ts,
                 "templateid": settings.TEMPLATEID,
                 "param": code,
                 "to": self._input["phone"]
                 }
         r = requests.post(url, data=payload)
         if r.json().get("respCode", "1") == "00000":
             return self._response(data=int(code))
         return self._response(error_msg.PHONE_NUMBER_ERROR)
     except Exception as e:
         logger.error("requets miaodiyun error {0}".format(e))
         return self._response(error_msg.SERVER_ERROR)
Ejemplo n.º 3
0
    def _check_sid(self):
        """
        校验每一个请求的sid,后台服务,就是通过sid来控制整个app的生命账户的生命周期!!
        :return:
        """

        # 检查接口是否允许空字符串的sid,如登录、注册、忘记密码等可以允许空字符串
        if self.sid_control_level == constant.SID_CAN_BE_NULL:
            logger.info("sid can be null...")
            return True

        # 调试模式,可以不带sid
        if config.debug_mode == 1:
            try:
                logger.info("调试模式开启,不检查sid!")
                sid = self.common_param["sid"]
                sid_info = sid_manager.SidManager.sid2info(sid)
                if sid_info:
                    self.uid = sid_info.userid  # 这个是医生、用户的id,可能是游客id
                    self.user_type = sid_info.user_type  # 这个是用户类型,0-游客,1-用户,2-医生
                else:
                    self.uid = 0
                    self.user_type = 0

                return True
            except Exception, ex:
                logger.error(ex, exc_info=1)
                self.ret_code = errcode.SID_NOT_CORRECT
                self.ret_msg = "common_param sid not correct..."
                logger.error("common_param sid not correct...")
                return False
Ejemplo n.º 4
0
 def do_filter(self, **kwargs):
     session = kwargs.get("session", None)
     if session is None:
         return None
     pk = kwargs.get("id", None)
     try:
         filter_obj = session.query(self._model)
         if pk is not None:
             return filter_obj.filter_by(id=pk)
         value = {
             k: self._clean_value(kwargs[k])
             for k in self._filter_value(kwargs)
         }
         filter_obj = filter_obj.filter_by(**value)
         kv = kwargs.get("like", None)
         if kv is not None:
             k, v = kv.split("^")
             filter_obj = filter_obj.filter(
                 getattr(self._model, k).like("%%%s%%" % v))
         id_list = kwargs.get("id_list", None)
         if id_list is not None:
             filter_obj = filter_obj.filter(
                 getattr(self._model, "id").in_(id_list))
         filter_condition = kwargs.get('filter_condition', None)
         if filter_condition is not None:
             filter_obj = filter_obj.filter(filter_condition)
         return filter_obj
     except Exception as e:
         logger.error(u"查询%s出错. %s, %s" %
                      (self._model.__tablename__, e, kwargs))
         return None
Ejemplo n.º 5
0
 def keys(self, pattern='*'):
     try:
         return self.r.keys(pattern)
     except Exception, ex:
         logger.error(ex, exc_info=1)
         self.is_w_working = False
         return None
Ejemplo n.º 6
0
    def insert(cls, _dic):
        """
        插入Something...
        :param _dic: 新增的字典
        :return:
        """

        key_value_lst = []
        for key, value in _dic.items():
            # 普通字符串
            if type(value) == str or type(value) == unicode:
                value = _mysql.escape_string(value)
                item = "'%s'" % value
            else:
                item = "%s" % value

            key_value_lst.append(item)
        sql = "insert into {db}.{tbl}({column_list}) values ({value_list})". \
            format(db=cls.db_name,
                   tbl=cls.table_name,
                   column_list=','.join(["`%s`" % v for v in _dic.keys()]),
                   value_list=','.join(key_value_lst))

        logger.info("base_insert===> %s" % sql)

        if cls.db_name == db_name_config.DOCTOR_DB:
            ret = doctor_conn.execute_with_exception(sql)
        elif cls.db_name == db_name_config.DOCTOR_USER_DB:
            ret = doctor_user_conn.execute_with_exception(sql)
        elif cls.db_name == db_name_config.DOCTOR_QUESTION_DB:
            ret = doctor_question_conn.execute_with_exception(sql)
        else:
            logger.error("error db...")
            ret = None
        return ret
Ejemplo n.º 7
0
    def _wrap_items(self, _items):
        """
        精简返回值
        :param _items:
        :return:
        """
        for item in _items:
            if "id" in item:
                del item["id"]
            if "obj_id" in item:
                del item["obj_id"]
            if "ui_type" in item:
                del item["ui_type"]

            # 解析desc
            if "desc" in item:
                if "{" in item["desc"]:
                    try:
                        item["desc"] = json.loads(item["desc"])
                    except Exception, ex:
                        logger.error(ex, exc_info=1)
                        item["desc"] = {}

                if "[" in item["desc"]:
                    try:
                        item["desc"] = json.loads(item["desc"])
                    except Exception, ex:
                        logger.error(ex, exc_info=1)
                        item["desc"] = []
Ejemplo n.º 8
0
    def sid2info(cls, sid):
        """
        SID ==> INFO对象
         "%s|%s|%s|%s|%s|%s" % (
            self.user_type, self.userid, self.version, self.timestamp, self.device_type, self.cuid)
        :param sid:
        :return:
        """
        try:
            if not sid:
                logger.info("sid -> info: sid is null.")
                return None

            if config.SID_ENCRYPT_KEY:  # 加密
                sid = base64.b64decode(sid)
                sid = MyDESCryptUtil.decrypt(sid)

            values = sid.split('|')
            if len(values) < 6:
                logger.info("sid -> info: sid trans error...")
                return None

            sid_info = SidInfo(*values)

            if sid_info.is_expired():
                logger.info("SID=%s 过期" % sid_info.to_string())
                return None
            return sid_info
        except Exception, ex:
            logger.error("sid -> info失败:%s" % str(ex), exc_info=1)
            logger.error(sid)
            return None
Ejemplo n.º 9
0
    def _parse_and_check_parameters(self):
        """
        1、解析参数 -> self.para_map中。
        2、检验参数是否正确?是否必传的参数没有传?

        :return: True, False
        """
        body = json.loads(request.data)

        for key, default_value in self.expected_para.iteritems():
            value = body.get(key, default_value)
            if isinstance(value, unicode):
                value = value.encode("utf-8")
            self.para_map[key] = value
        if request.cookies:
            for key, default_value in self.expected_para.iteritems():
                value = request.cookies.get(key, default_value)
                if value != default_value:
                    self.para_map[key] = value

        for key in self.required_para:
            if self.para_map[key] is None:
                logger.error("request param is blank:%s" % key)
                self.ret_code = errcode.PARAM_REQUIRED_IS_BLANK
                self.ret_msg = "request param is blank"
                return False
        return True
Ejemplo n.º 10
0
 def scan_iter(self, match=None, count=None):
     try:
         return self.r.scan_iter(match, count)
     except Exception, ex:
         self.is_r_working = False
         logger.error("redis r connect error:%s", str(ex))
         return None
Ejemplo n.º 11
0
 def exists(self, name):
     try:
         return self.r.exists(name)
     except Exception, ex:
         logger.error(ex, exc_info=1)
         self.is_w_working = False
         return None
Ejemplo n.º 12
0
 def check_r_conn(self):
     try:
         r_connecting = self.r.ping()
         self.is_r_working = r_connecting
     except Exception, ex:
         self.is_r_working = False
         logger.error("redis r connect error:%s", str(ex))
Ejemplo n.º 13
0
 def get(self, key):
     try:
         ret_v = self.r.get(key)
         return ret_v
     except Exception, ex:
         self.is_r_working = False
         logger.error("redis r connect error:%s", str(ex))
Ejemplo n.º 14
0
 def post_action_decode_tx(self):
     if not self.check_input_arguments(["tx_hex"]):
         return self._response(error_msg.PARAMS_ERROR)
     url = "https://live.blockcypher.com/btc/decodetx/"
     try:
         r = requests.post(
             url,
             data={
                 "tx_hex": self._input["tx_hex"],
                 "coin_symbol": "btc",
                 "csrfmiddlewaretoken": "0x7JG1aNt03Ovn4vPL7wz05s8F8DtUDq"
             },
             cookies={"csrftoken": "0x7JG1aNt03Ovn4vPL7wz05s8F8DtUDq"})
         find_key = "<pre><small>"
         s = r.text.find(find_key)
         if s == -1:
             return self._response(error_msg.PARAMS_ERROR)
         else:
             e = r.text.find("</small>", s)
             result = r.text[s + len(find_key):e].replace("\n", "")
             self._data = json.loads(result)
             return self._response()
     except Exception as e:
         logger.error("decode tx_hex http error {0}".format(e))
         return self._response(error_msg.SERVER_ERROR)
Ejemplo n.º 15
0
 def hexists(self, name, key):
     "Returns a boolean indicating if ``key`` exists within hash ``name``"
     try:
         return self.r.hexists(name, key)
     except Exception, ex:
         logger.error(ex, exc_info=1)
         self.is_w_working = False
         return None
Ejemplo n.º 16
0
 def _do_put(self):
     try:
         if self._controller_obj.update_item(**self._input):
             return True
         else:
             return False
     except Exception as e:
         logger.error("put method error: %s" % e)
         return False
Ejemplo n.º 17
0
 def get_action_fee(self):
     url = "https://bitcoinfees.earn.com/api/v1/fees/list"
     try:
         r = requests.get(url).json().get("fees", [])
         for i in r:
             if int(i["memCount"]) < 50 and int(i["dayCount"] > 1000):
                 return self._response(data=i["minFee"])
     except Exception as e:
         logger.error("fee error", e)
     return self._response(data=15)
Ejemplo n.º 18
0
 def get_action_block(self):
     url = "{}/latestblock".format(self.URL)
     try:
         r = requests.get(url).json()
         height = r.get("height", 0)
     except Exception as e:
         logger.error("requests lateblock error{}".format(e))
         return self._response(error_msg.SERVER_ERROR)
     self._data = height
     return self._response()
Ejemplo n.º 19
0
 def post_action_broadcast(self):
     if not self.check_input_arguments(["tx_hex"]):
         return self._response(error_msg.PARAMS_ERROR)
     try:
         NetworkAPI.broadcast_tx(self._input.get("tx_hex", None))
     except Exception as e:
         logger.error("broadcast_tx error tx:{0}. error:{1}".format(
             self._input.get("tx_hex"), e))
         return self._response(error_msg.SERVER_ERROR)
     return self._response()
Ejemplo n.º 20
0
 def _do_delete(self):
     try:
         if self._controller_obj.delete_item(**self._input):
             return True
         else:
             logger.error("delete method error")
             return False
     except Exception as e:
         logger.error("delete method error: %s" % e)
         return False
Ejemplo n.º 21
0
 def get_model_pk(self):
     """
     获取model主键
     :return: Column
     """
     try:
         ins = inspect(self._model)
         return ins.primary_key[0]
     except Exception as e:
         logger.error("获取主键失败e" % e)
         return None
Ejemplo n.º 22
0
 def _do_post(self):
     try:
         if self._controller_obj.new_item(**self._input):
             return True
         else:
             logger.error("post method error")
             return False
     except Exception as e:
         self._ret, self._msg = error_msg.SERVER_ERROR
         logger.error("post method error: %s" % e)
         return False
Ejemplo n.º 23
0
 def filter_item(self, **kwargs):
     session = kwargs.get("session", None)
     if session is None:
         return None, None
     start = int(kwargs.get("start", -1))
     end = int(kwargs.get("end", -1))
     compare_key = kwargs.get("compare_key", None)
     gte = kwargs.get("gte", None)
     gt = kwargs.get("gt", None)
     lte = kwargs.get("lte", None)
     lt = kwargs.get("lt", None)
     pk = kwargs.get("id", None)
     try:
         filter_obj = self.do_filter(**kwargs)
         if not filter_obj:
             return None, None
         if compare_key and hasattr(self._model, compare_key):
             if gte:
                 filter_obj = filter_obj.filter(
                     getattr(self._model, compare_key) >= gte)
             if gt:
                 filter_obj = filter_obj.filter(
                     getattr(self._model, compare_key) > gt)
             if lte:
                 filter_obj = filter_obj.filter(
                     getattr(self._model, compare_key) <= lte)
             if lt:
                 filter_obj = filter_obj.filter(
                     getattr(self._model, compare_key) < lt)
         if pk:
             return filter_obj.first(), 1
         order_by = kwargs.get("order_by", None)
         order_method = kwargs.get("order_method", None)
         if order_by is None:
             filter_obj = filter_obj.order_by(desc("id"))
         else:
             if order_method == "desc":
                 filter_obj = filter_obj.order_by(desc(order_by))
             else:
                 filter_obj = filter_obj.order_by(order_by)
         if start == -1 and end == -1:
             data = filter_obj.all()
             return data, len(data)
         else:
             pk = self.get_model_pk()
             if pk is None:
                 return None, None
             return filter_obj[start:end], filter_obj.with_entities(
                 func.count(pk)).scalar()
     except Exception as e:
         logger.error(u"查询%s出错. %s, %s" %
                      (self._model.__tablename__, e, kwargs))
         return None, None
Ejemplo n.º 24
0
 def info2sid(cls, sid_info):
     '''SidInfo -> SID'''
     if not sid_info:
         return ""
     try:
         if config.SID_ENCRYPT_KEY:
             _str = MyDESCryptUtil.encrypt(sid_info.to_string())
             return base64.b64encode(_str)
         return sid_info.to_string()
     except Exception, ex:
         logger.error("info -> sid失败:%s" % str(ex), exc_info=1)
         return ""
Ejemplo n.º 25
0
    def update(cls, dic, where_col='id', where_col_str=False):
        """
        更新Something...
        :param dic: 字典
        :return:
        """
        key_value_lst = []
        for key, value in dic.items():
            logger.info("%s=%s" % (key, value))
            if key == where_col:
                continue

            # 普通字符串
            if type(value) == str or type(value) == unicode:
                value = _mysql.escape_string(value)
                item = "%s='%s'" % (key, value)

            # 需要追加的int,比如 like_num: (1, True),那么是like_num = like_num + 1
            elif type(value) == tuple and len(value) == 2:
                if value[1]:
                    item = "%s=%s+%s" % (key, key, value[0])
                else:
                    item = "%s=%s" % (key, value[0])

            # 普通int, 比如 del_flag: 1, 直接 def_flag = 1
            else:
                item = "%s=%s" % (key, value)

            key_value_lst.append(item)

        sql = "update {db}.{tbl} set ".format(db=cls.db_name,
                                              tbl=cls.table_name)
        sql += ",".join(key_value_lst)

        # where 列默认是id
        where_value = dic[where_col]
        if where_col_str:
            sql += " where %s = '%s'" % (where_col, where_value)
        else:
            sql += ' where %s = %s' % (where_col, where_value)

        logger.info("base_update: %s" % sql)

        if cls.db_name == db_name_config.DOCTOR_DB:
            ret = doctor_conn.execute_with_exception(sql)
        elif cls.db_name == db_name_config.DOCTOR_USER_DB:
            ret = doctor_user_conn.execute_with_exception(sql)
        elif cls.db_name == db_name_config.DOCTOR_QUESTION_DB:
            ret = doctor_question_conn.execute_with_exception(sql)
        else:
            logger.error("error db...")
            ret = None
        return ret
Ejemplo n.º 26
0
    def get_by_location_and_section(cls, province_code, city_code, area_code,
                                    section_outer, section_inner, page_num,
                                    page_size):
        """
        分页获取...

        :return:
        """

        # 省市区
        location_str = ""
        if province_code != 0 and city_code == 0 and area_code == 0:
            location_str = " and province={province} ".format(
                province=province_code)
        elif province_code != 0 and city_code != 0 and area_code == 0:
            location_str = " and province={province} and city={city} ". \
                format(province=province_code,
                       city=city_code)
        elif province_code != 0 and city_code != 0 and area_code != 0:
            location_str = " and province={province} and city={city} and area={area} ". \
                format(province=province_code,
                       city=city_code,
                       area=area_code)

        # 科室
        section_str = ""
        if section_outer and section_inner:
            section_str = " and section_p='{section_outer}' and section_c='{section_inner}' ". \
                format(section_outer=section_outer,
                       section_inner=section_inner
                       )
        elif section_outer and not section_inner:
            section_str = " and section_p='{section_outer}' ". \
                format(section_outer=section_outer,
                       )
        # 分页
        offset = (page_num - 1) * page_size

        sql = "select * from {db}.{table} where del_flag=0 " \
              "{location_str} {section_str} " \
              "limit {offset},{limit}". \
            format(db=cls.db_name,
                   table=cls.table_name,
                   offset=offset,
                   limit=page_size,
                   location_str=location_str,
                   section_str=section_str,
                   )
        logger.error(sql)
        item_list = doctor_conn.fetchall(sql)
        return item_list
Ejemplo n.º 27
0
 def _do_get(self, disable_output=None, transform_json=True):
     try:
         data, total = self._controller_obj.filter_item(**self._input)
         self._data["total"] = total
         if transform_json:
             self._data["list"] = utility.to_obj(
                 data, without_fields=disable_output)
         else:
             self._data["list"] = data
         return True
     except Exception as e:
         traceback.print_exc()
         logger.error("get method error: %s" % e)
         return False
Ejemplo n.º 28
0
 def delete_item(self, **kwargs):
     session = kwargs.get("session", None)
     if session is None:
         return False
     try:
         filter_obj = self.do_filter(**kwargs)
         if filter_obj:
             filter_obj.delete()
             return True
         else:
             return False
     except Exception as e:
         logger.error(u"删除%s出错. %s, %s" %
                      (self._model.__tablename__, e, kwargs))
         return False
Ejemplo n.º 29
0
    def post(self):
        self.request = request
        logger.debug("[%s ###### START]", self.trace_id)

        ret = self._handle_request()
        if ret is False:
            return self._handle_return()

        # 在最上层处理异常
        try:
            self._version_control()
            self._process_imp()
        except Exception, ex:
            logger.error(ex, exc_info=1)
            self.ret_code = errcode.DB_OPERATION_ERROR
            self.ret_msg = "operation error"
Ejemplo n.º 30
0
    def _handle_request(self):
        body = {}
        if self.parse_from_body:
            try:
                body = json.loads(request.data)

                # 统一打印下请求参数
                for key, value in body.iteritems():
                    if key == "common_param":
                        self.common_param = value
                        self.os = self.common_param["device_type"]
                        self.app_version = self.common_param["app_version"]

                        self.cuid = self.common_param["cuid"]  # 游客id
                        self.user_id = self.common_param["user_id"]  # 用户id

                        # tid 游客(tourist) id
                        # rid 注册用户(registed user) id
                        self.tid = self.common_param[
                            "tid"] if "tid" in self.common_param else 0
                        self.rid = self.common_param[
                            "rid"] if "rid" in self.common_param else 0

                        # 用户类型
                        self.user_type = constant.USER_SOURCE_UNKNOWN
                        if self.tid > 0:
                            self.user_type = constant.USER_SOURCE_TOURIST
                        if self.rid > 0:
                            self.user_type = constant.USER_SOURCE_LOGIN_USER

                        # 摇摆用户变量, 要么是tid,要么是rid
                        if self.user_type == constant.USER_SOURCE_LOGIN_USER:
                            self.swing_id = self.rid
                        elif self.user_type == constant.USER_SOURCE_TOURIST:
                            self.swing_id = self.tid
                        else:
                            self.swing_id = 0

                logger.debug(body)
            except Exception, ex:
                logger.error("[%s] request.body not json str, ex: %s",
                             self.trace_id,
                             ex,
                             exc_info=1)
                self.ret_code = errcode.JSON_BODY_DECODE_ERROR
                self.ret_msg = "request.body not json str"
                return False