PageRenderTime 58ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/sys2do/handlers/RootHandler.py

https://github.com/LamCiuLoeng/dreamhouse
Python | 246 lines | 223 code | 19 blank | 4 comment | 20 complexity | 7ccc7a7c29bdba88ce5dbc8efd50f37f MD5 | raw file
  1. # -*- coding: utf-8 -*-
  2. import logging, traceback
  3. from datetime import datetime as dt
  4. import tornado.web
  5. from webhelpers.paginate import Page
  6. from sqlalchemy import or_, and_, func
  7. from sys2do.model import *
  8. from MethodDispatcher import MethodDispatcher
  9. from sys2do.util.taobao import TaoBao
  10. class RootHandler(MethodDispatcher):
  11. def index(self, **kw):
  12. # items = DBSession.query(Item).all()
  13. # my_page = Page(items, page = int(kw.get("page", 1)), url = lambda page:"%s?page=%d" % (self.request.path, page))
  14. # self.render("index.html", my_page = my_page)
  15. items = DBSession.query(Item).all()[:9]
  16. try:
  17. show_case1 = DBSession.query(Item).order_by(func.random()).all()[:4]
  18. show_case2 = DBSession.query(Item).order_by(func.random()).all()[:4]
  19. except:
  20. show_case1 = DBSession.query(Item).order_by(func.rand()).all()[:4]
  21. show_case2 = DBSession.query(Item).order_by(func.rand()).all()[:4]
  22. self.render("index.html", items = items, show_case1 = show_case1, show_case2 = show_case2)
  23. def login(self, **kw):
  24. if self.current_user :
  25. self.redirect("/index")
  26. else:
  27. self.render("login.html")
  28. def login_handler(self, **kw):
  29. try:
  30. u = DBSession.query(User).filter(and_(User.user_name == kw.get("username", None), User.password == kw.get("password", None))).one()
  31. self.session["user_info"] = {
  32. "id" : u.id,
  33. "user_name" : u.user_name,
  34. "display_name" : u.display_name,
  35. "email_address" : u.email_address,
  36. }
  37. self.session["group_info"] = [str(g) for g in u.groups]
  38. self.session["permission_info"] = u.permissions
  39. self.session.save()
  40. self.set_current_user(u.user_name)
  41. except:
  42. self.redirect("/login")
  43. else:
  44. self.redirect("/user_dispatch")
  45. def user_dispatch(self):
  46. if self.get_current_user() :
  47. if "admin" in self.session["group_info"]:
  48. self.redirect("/admin/index")
  49. elif "user" in self.session["group_info"]:
  50. self.redirect("/user/index")
  51. else:
  52. self.redirect("/index")
  53. else:
  54. self.redirect("/index")
  55. def register(self, **kw):
  56. self.render("register.html")
  57. def register_hander(self, **kw):
  58. username = kw.get("username", None)
  59. password = kw.get("password", None)
  60. confirmed_password = kw.get("confirmed_password", None)
  61. email = kw.get("email", None)
  62. msg = []
  63. if not username :
  64. msg.append("User name could not be blank!")
  65. elif password != confirmed_password :
  66. msg.append("Password and confirmed password are not the same!")
  67. elif not email :
  68. msg.append("E-mail could not be blank!")
  69. else:
  70. try:
  71. DBSession.query(User).filter(and_(User.active == 0, User.user_name == username)).one()
  72. msg.append("The user name already exist!")
  73. except:
  74. pass
  75. if msg :
  76. self.redirect("/login")
  77. else:
  78. try:
  79. u = User(user_name = username, password = password, email_address = email)
  80. g = DBSession.query(Group).filter(Group.group_name == "user").one()
  81. g.users.append(u)
  82. DBSession.add(u)
  83. DBSession.commit()
  84. except:
  85. DBSession.rollback()
  86. self.redirect("/login")
  87. else:
  88. self.redirect("/login")
  89. def logout(self):
  90. self.clear_current_user()
  91. self.redirect("/index")
  92. def item_detail(self, **kw):
  93. item = DBSession.query(Item).get(kw["id"])
  94. self.render("item_detail.html", item = item)
  95. def item_quick_search(self, **kw):
  96. result = DBSession.query(Item).filter(Item.title.like("%%%s%%" % kw.get("q", ""))).all()
  97. my_page = Page(result, page = int(kw.get("page", 1)), url = lambda page:"%s?q=%s&page=%d" % (self.request.path, kw.get("q", ""), page))
  98. self.render("item_quick_search.html", my_page = my_page)
  99. def add_to_cart(self, **kw):
  100. cart = self.session.get("cart", {})
  101. if kw["id"] not in cart:
  102. cart[kw["id"]] = {
  103. "qty" : kw.get("qty", 1),
  104. }
  105. else:
  106. qty = int(cart[kw["id"]]["qty"])
  107. cart[kw["id"]]["qty"] = qty + int(kw.get("qty", 1))
  108. self.session["cart"] = cart
  109. self.session.save()
  110. self.redirect("/view_cart")
  111. def view_cart(self, **kw):
  112. cart = self.session.get("cart", {})
  113. for k, v in cart.items():
  114. cart[k].update({
  115. "item" : DBSession.query(Item).get(k)
  116. })
  117. self.render("view_cart.html", cart = cart)
  118. @tornado.web.authenticated
  119. def place_order(self, **kw):
  120. pass
  121. # def testip(self):
  122. # if not self.request.remote_ip: self.finish()
  123. # def _call(response):
  124. # logging.info(response.body)
  125. # self.finish()
  126. #
  127. # http = AsyncHTTPClient()
  128. # http.fetch("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=%s" % self.request.remote_ip, callback = _call)
  129. def test1(self, **kw):
  130. self.session["aa"] = kw["aa"]
  131. self.session.save()
  132. self.write("OK")
  133. def test2(self):
  134. self.render("test.html")
  135. def testflash(self):
  136. self.flash("hello,cl,testing")
  137. self.write("OK")
  138. class TaobaoHandler(MethodDispatcher):
  139. def add(self):
  140. self.render("taobao.html")
  141. @tornado.web.asynchronous
  142. def save(self, **kw):
  143. if kw["type"] == "nickname":
  144. self._by_nickname(kw["value"], kw["page"])
  145. def _by_nickname(self, nickname, page):
  146. page_size = 50
  147. fields1 = ["num_iid", "title", "nick", "pic_url", "cid", "price", "type", "delist_time", "post_fee"]
  148. fields2 = ["num_iid", "title", "nick", "type", "props_name",
  149. "cid", "seller_cids", "props", "pic_url", "num", "valid_thru", "list_time",
  150. "delist_time", "stuff_status", "price", "post_fee", "express_fee", "ems_fee",
  151. "has_discount", "freight_payer", "has_invoice", "has_warranty", "modified",
  152. "approve_status", "sell_promise", "desc"]
  153. params1 = dict(
  154. method = 'taobao.items.get',
  155. nicks = nickname,
  156. fields = ",".join(fields1),
  157. page_size = page_size,
  158. page_no = page
  159. )
  160. def _getItemDetail(data):
  161. try:
  162. info = data["item_get_response"]["item"]
  163. try:
  164. t = DBSession.query(Item).filter(Item.num_iid == info["num_iid"]).one()
  165. for f in fields2:
  166. if f in ["delist_time", "list_time", "modified", "created"] :
  167. setattr(t, f, dt.strptime(info[f], "%Y-%m-%d %H:%M:%S"))
  168. else:
  169. setattr(t, f, info[f])
  170. except:
  171. params = {}
  172. for f in fields2:
  173. if f in ["delist_time", "list_time", "modified", "created"] : params[f] = dt.strptime(info[f], "%Y-%m-%d %H:%M:%S")
  174. else : params[f] = info[f]
  175. DBSession.add(Item(**params))
  176. except:
  177. logging.error(traceback.print_exc())
  178. def _getLastItemDetail(data):
  179. _getItemDetail(data)
  180. DBSession.commit()
  181. self.render("taobao_result.html")
  182. def _getItemList(data):
  183. logging.info("--------- response start -------------")
  184. items = data["items_get_response"]["items"]["item"]
  185. # items = [{"num_iid":"9257172491"}]
  186. for index, item in enumerate(items):
  187. p = {
  188. "method" : "taobao.item.get",
  189. "nick" : nickname,
  190. "num_iid" : item["num_iid"],
  191. "fields" : ",".join(fields2)
  192. }
  193. if index == len(items) - 1 : tmp = TaoBao(p, callback = _getLastItemDetail)
  194. else :tmp = TaoBao(p, callback = _getItemDetail)
  195. tmp.fetch()
  196. # params = {}
  197. # for f in fields :
  198. # if f == "delist_time" : params[f] = dt.strptime(item[f],"%Y-%m-%d %H:%M:%S")
  199. # else : params[f] = item[f]
  200. # DBSession.add(Item(**params))
  201. # DBSession.commit()
  202. # logging.info("\n".join(ids))
  203. t = TaoBao(params1, callback = _getItemList)
  204. t.fetch()