程序扩展性的一个实例(下)
程序扩展性的一个实例(下)<div id="cnblogs_post_body">上代码,主要是整个流程。细节忽略
<div class="cnblogs_code">1 #! /usr/bin/env python2 # -*- coding: utf-8 -*-3 """4 @author: zhoujiebing5 @contact: zhoujiebing@maimiaotech.com6 @date: 2012-11-16 11:307 @version: 1.0.08 @license: Copyright maimiaotech.com9 @copyright: Copyright maimiaotech.com 10 11 """ 12 import sys 13 sys.path.append('http://www.cnblogs.com/') 14 from shop_info_db import ShopInfoDB 15 from database_operator import DBOpsCampaignSelect, DBOpsItemsSelect, DBOpsKeyword, DBOpsActionLog, DBOpsShopInfo 16 MONGODB_HOST = 'localhost' 17 MONGODB_PORT = 2006 18 from pymongo import Connection 19 mongoConn = Connection(host = MONGODB_HOST, port = MONGODB_PORT) 20 21 class Rule: 22 """ 23 Base Rule Class 24 """ 25 def __init__(self): 26 self.child_rule = [] 27 28 def judge_rule(self, shop_id, result): 29 return False 30 31 class AccessTokenRule(Rule): 32 """ 33 judge AccessToken 34 """ 35 def __init__(self, shop_status_dict): 36 Rule.__init__(self) 37 self.shop_status_dict = shop_status_dict 38 39 def judge_rule(self, shop_id, result): 40 shop_status = self.shop_status_dict 41 if shop_status['session_expired']: 42 resultinfo = ['Invalid AccessToken', shop_id] 43 result.append(resultinfo) 44 return True 45 if shop_status['insuff_level']: 46 resultinfo = ['R1 AccessToken', shop_id] 47 result.append(resultinfo) 48 return True 49 return False 50 51 class CampaignRule(Rule): 52 """ 53 judge campaign self 54 """ 55 def __init__(self): 56 Rule.__init__(self) 57 58 def judge_rule(self, shop_id, result): 59 campaign_select_db_ops = DBOpsCampaignSelect(mongoConn, str(shop_id)) 60 campaigns = campaign_select_db_ops.get_all() 61 if len(campaigns) != 1: 62 resultinfo = ['No Campaign', shop_id] 63 result.append(resultinfo) 64 return True 65 66 if not campaigns['init_success']: 67 resultinfo = ['Campaign init Fail', shop_id] 68 result.append(resultinfo) 69 return True 70 return False 71 72 class ItemRule(Rule): 73 """ 74 judge items 75 """ 76 def __init__(self): 77 Rule.__init__(self) 78 79 def judge_rule(self, shop_id, result): 80 item_select_db_ops = DBOpsItemsSelect(mongoConn, str(shop_id)) 81 items_num = len(item_select_db_ops.get_active_items_all()) 82 if items_num <= 10: 83 resultinfo = ['Item few', shop_id, str(items_num)] 84 result.append(resultinfo) 85 return True 86 return False 87 88 class KeywordRule(Rule): 89 """ 90 judge keyword 91 """ 92 def __init__(self): 93 Rule.__init__(self) 94 95 def judge_rule(self, shop_id, result): 96 keyword_db_ops = DBOpsKeyword(mongoConn, str(shop_id)) 97 keywords_num = keyword_db_ops.coll.find().count() 98 if keywords_num <= 100: 99 resultinfo = ['Keyword few', shop_id, str(keywords_num)]100 result.append(resultinfo)101 return True102 return False103 104 class ActionRule(Rule):105 """106 judge action107 """108 def __init__(self):109 Rule.__init__(self)110 111 def judge_rule(self, shop_id, result):112 action_db_ops = DBOpsActionLog(mongoConn, str(shop_id))113 accumulate = action_db_ops.get_last_week_action()114 action_num = accumulate['add_words'] + accumulate['delete_words'] + accumulate['change_price']115 if action_num <= 100:116 resultinfo = ['Action few', shop_id, str(action_num)]117 return True118 return False119 120 def judge_rule(shop_id, unnormal_result, rule_relation):121 """122 judge the shop 123 """124 while 1:125 if rule_relation.judge_rule(shop_id, unnormal_result):126 break127 if not rule_relation.child_rule:128 break129 if len(rule_relation.child_rule) == 1:130 rule_relation = rule_relation.child_rule131 else:132 for rule_relation in rule_relation.child_rule:133 if judge_rule(shop_id, unnormal_result, rule_relation):134 return 135 136 if __name__ == '__main__':137 file_name = 'unnormal_data.csv'138 file_obj = file(file_name, 'w')139 140 shop_info = ShopInfoDB(mongoConn)141 shop_id_list = shop_info.get_all_shop_id_list()142 shop_status_dict = {}143 for shop in shop_info.shop_status.find():144 shop_status_dict'_id'])] = shop145 #rule init146 rule_relation = Rule()147 access_token_rule = AccessTokenRule(shop_status_dict)148 campaign_rule = CampaignRule()149 item_rule = ItemRule()150 keyword_rule = KeywordRule()151 action_rule = ActionRule()152 153 #rule relation init154 rule_relation.child_rule.append(access_token_rule)155 access_token_rule.child_rule.append(campaign_rule)156 campaign_rule.child_rule.append(item_rule)157 campaign_rule.child_rule.append(keyword_rule)158 campaign_rule.child_rule.append(action_rule)159 160 unnormal_result = []161 for shop_id in shop_id_list:162 judge_rule(shop_id, unnormal_result, rule_relation)163 unnormal_result.sort(key = lambda x:x) 164 for info in unnormal_result:165 shop_id = info]166 info = str(shop_id)167 nick = shop_status_dict['nick']168 info.insert(2, nick)169 file_obj.write(','.join(info))170 file_obj.write('\n')171 file_obj.close()
页:
[1]