def earth2mars(lat, log): """ 地球转火星 :param lat: 北纬 :param log: 东经 """ return redis_encode_batch('earth2mars', lat, log)
def encode(push_alert, push_custom_payload, compile_type, bundle_id, device_token): """ 水果推送协议编码 :param push_alert: 水果推送标题 """ if not (push_alert and isinstance(push_alert, str)): raise ValueError('alert not str: %s' % type(push_alert)) if not (push_custom_payload and isinstance(push_custom_payload, dict)): raise ValueError('payload not dict: %s' % type(push_custom_payload)) # payload = { # 'aps': { # 'alert': push_alert, # 'badge': 1, # 'sound': 'Voicemail.caf' # } # } payload = { 'aps': { 'content-available': 1, 'data': push_alert, } } payload.update(push_custom_payload) payload = msgpack.packb(payload, use_bin_type=True) return redis_encode_batch(compile_type, bundle_id, device_token, payload)
def save_memcache(pid, lg, la, ts, from_, radius, addr, token, cmd, battery=0): logger.debug('mc gps: {0}, {1}, {2}, {3}, {4}'.format( pid, lg, la, ts, from_)) if lg is None: return if not isinstance(lg, numbers.Real) and not isinstance(la, numbers.Real): return if not isinstance(ts, int): logger.warn('ts invalid: {0}'.format(ts)) return if not isinstance(from_, int): logger.warn('from_ invalid: {0}'.format(from_)) return if not isinstance(radius, int): logger.warn('radius invalid: {0}'.format(radius)) return if not (isinstance(addr, str) and isinstance(token, (int, long)) and isinstance(cmd, str)): logger.warn('args invalid: {0}, {1}'.format(token, cmd)) return lg = conv_raw(lg) la = conv_raw(la) return ':'.join( ('gps_loc', pid)), redis_encode_batch(lg, la, ts, from_, radius, battery, token, cmd, addr)
def encode(*files): """ 支持多个文件名 带有文件后缀 :param files: 带后缀的文件名 """ return redis_encode_batch(*files)
def zone_event(pid, lat, log, ts, road, token, battery, low_power, *wifis): """ 投递定位事件 需要注意火星坐标问题,该函数默认为火星坐标 :param battery: 电池电量 :param token: 定位事件token :param log: :param lat: :param pid: 设备id :param ts: 定位事件时间,int :param road: 道路名 :param low_power: 是否低电量 :param wifis: wifi列表 """ if not (pid and isinstance(pid, str)): raise ValueError('pid not str: %s' % type(pid)) if not (lat and isinstance(lat, float) and log and isinstance(log, float)): raise ValueError('lat or log not float: %s, %s' % (type(lat), type(log))) if not (ts and isinstance(ts, (int, long, float))): raise ValueError('ts not int: %s' % (type(ts))) if not isinstance(road, str): raise ValueError('road not str: %s' % type(road)) if not (token and isinstance(token, (int, long))): raise ValueError('token not int: %s' % type(token)) return redis_encode_batch('ze', pid, lat, log, ts, road, token, battery, low_power, *wifis)
def encode(api_key, target_id, push_payload): """ 长连接推送协议编码 :param api_key: 开发者帐号 :param target_id: 目标设备id :param push_payload: """ return redis_encode_batch(api_key, target_id, push_payload)
def cdma_bs_fix(bs_lat, bs_log, an_lat, an_log): """ cdma基站修正 :param bs_lat: :param bs_log: :param an_lat: :param an_log: :return: """ return redis_encode_batch('cdma_bs_fix', bs_lat, bs_log, an_lat, an_log)
def encode(tid, uid, sms_body): """ :param tid: :param uid: :param sms_body: :return: """ if 20 != len(tid): raise ValueError('term_id invalid: %s' % tid) if len(sms_body) > 140: raise ValueError('sms_body too long: %r' % sms_body) return redis_encode_batch(tid, uid, sms_body)
def encode(lang, mobile, ts, account, typ, delay=600): """ 合并短信编码 :param lang: 翻译语言 :param mobile: :param ts: :param account: 通过帐号判定使用谁家的短信通道 :param typ: :param delay: :return: """ if not (ts and isinstance(ts, int)): raise ValueError('ts not time') if not (delay and isinstance(delay, int)): raise ValueError('delay not int') #帐号默认为空,新增参数,兼容之前无帐号调用 return redis_encode_batch(lang, mobile, ts, account, typ, delay)
def encode(cmd, expire, lvl_fn, lvl_body=None): """ leveldb请求编码 :param cmd: 执行动作,get/put/snapshot :param expire: 文件有效期,0表示长期有效,单位秒 :param lvl_fn: 文件名 :param lvl_body: 文件体 """ if cmd not in ('get', 'put', 'snapshot', 'delete'): raise ValueError('cmd invalid: {0}'.format(cmd)) if not isinstance(expire, int): raise ValueError('expire not int, but %s' % type(expire)) if not isinstance(lvl_fn, str): raise ValueError('lvl_fn invalid: {0}'.format(lvl_fn)) if not (lvl_body is None or isinstance(lvl_body, str)): raise ValueError('lvl_body invalid: {0}'.format(lvl_body)) return redis_encode_batch(cmd, expire, lvl_fn, lvl_body or '')
def resolve(cmd, expire, fn, value=None): """ 过期策略:暂时不计较expire的具体值,统一按1天处理 """ global lvl_db_map now = datetime.now() _clear_yesterday(now) func = globals().get(cmd) if not func: #只支持get/put/snapshot return redis_encode_batch() cur_root = path.expanduser('~/leveldb_files' if 0 == expire else _root_date(now)) if cur_root not in lvl_db_map: lvl_db_map.update({cur_root: plyvel.DB(cur_root, create_if_missing=True)}) return func(lvl_db_map.get(cur_root), fn, value)
def zone_batch(pid, *zones): """ 需要注意火星坐标的问题,该打包函数不负责坐标系转换 批量设置安全区 :param zones: { 'lat': 0, 'log': 1, 'radius': 2, 'name': 'xx', } """ params = ['zb', pid] for z in zones: params.append(z.get('lat')) params.append(z.get('log')) params.append(z.get('radius')) params.append(z.get('name')) return redis_encode_batch(*params)
def handle_req(req): queue_push(apns_conf, *req.args) req.write(redis_encode_batch(1)) req.finish()