PageRenderTime 28ms CodeModel.GetById 28ms RepoModel.GetById 1ms app.codeStats 0ms

/sys2do/handlers/AdminHandler.py

https://github.com/LamCiuLoeng/dreamhouse
Python | 105 lines | 80 code | 16 blank | 9 comment | 24 complexity | aa26139ec6504291591ba7c38f9d2027 MD5 | raw file
  1. # -*- coding: utf-8 -*-
  2. import logging, traceback
  3. from urllib import urlencode
  4. from datetime import datetime as dt
  5. import tornado.web
  6. from tornado.httpclient import AsyncHTTPClient
  7. from webhelpers.paginate import Page
  8. from sqlalchemy import or_, and_
  9. from sys2do.model import *
  10. from MethodDispatcher import MethodDispatcher
  11. from sys2do.util.taobao import TaoBao
  12. from sys2do import setting
  13. class AdminHandler(MethodDispatcher):
  14. def index(self, **kw):
  15. self.render("admin/index.html")
  16. def taobao_add(self):
  17. self.render("admin/taobao.html")
  18. @tornado.web.asynchronous
  19. def taobao_save(self, **kw):
  20. if kw["type"] == "nickname":
  21. self._by_nickname(kw["value"], kw["page"])
  22. def _by_nickname(self, nickname, page):
  23. page_size = 50
  24. fields1 = ["num_iid", "title", "nick", "pic_url", "cid", "price", "type", "delist_time", "post_fee"]
  25. fields2 = ["num_iid", "title", "nick", "type", "props_name",
  26. "cid", "seller_cids", "props", "pic_url", "num", "valid_thru", "list_time",
  27. "delist_time", "stuff_status", "price", "post_fee", "express_fee", "ems_fee",
  28. "has_discount", "freight_payer", "has_invoice", "has_warranty", "modified",
  29. "approve_status", "sell_promise", "desc", "item_img", "prop_img", "has_showcase"]
  30. params1 = dict(
  31. method = 'taobao.items.get',
  32. nicks = nickname,
  33. fields = ",".join(fields1),
  34. page_size = page_size,
  35. page_no = page
  36. )
  37. def _getItemDetail(data):
  38. try:
  39. info = data["item_get_response"]["item"]
  40. try:
  41. t = DBSession.query(Item).filter(Item.num_iid == info["num_iid"]).one()
  42. for f in fields2:
  43. if f in ["delist_time", "list_time", "modified", "created"] :
  44. setattr(t, f, dt.strptime(info[f], "%Y-%m-%d %H:%M:%S"))
  45. elif f == "item_img" :
  46. if info["item_imgs"]: setattr(t, f, "|".join([img["url"] for img in info["item_imgs"]["item_img"]]))
  47. elif f == "prop_img":
  48. if info["item_imgs"]: setattr(t, f, "|".join([img["url"] for img in info["prop_imgs"]["prop_img"]]))
  49. else:
  50. setattr(t, f, info[f])
  51. except:
  52. params = {}
  53. for f in fields2:
  54. if f in ["delist_time", "list_time", "modified", "created"] : params[f] = dt.strptime(info[f], "%Y-%m-%d %H:%M:%S")
  55. elif f == "item_img" :
  56. if info["item_imgs"]: params[f] = "|".join([img["url"] for img in info["item_imgs"]["item_img"]])
  57. elif f == "prop_img":
  58. if info["item_imgs"]: params[f] = "|".join([img["url"] for img in info["prop_imgs"]["prop_img"]])
  59. else : params[f] = info[f]
  60. DBSession.add(Item(**params))
  61. except:
  62. logging.error(traceback.print_exc())
  63. def _getLastItemDetail(data):
  64. _getItemDetail(data)
  65. DBSession.commit()
  66. self.render("admin/taobao_result.html")
  67. def _getItemList(data):
  68. logging.info("--------- response start -------------")
  69. items = data["items_get_response"]["items"]["item"]
  70. # items = [{"num_iid":"9257172491"}]
  71. for index, item in enumerate(items):
  72. p = {
  73. "method" : "taobao.item.get",
  74. "nick" : nickname,
  75. "num_iid" : item["num_iid"],
  76. "fields" : ",".join(fields2)
  77. }
  78. if index == len(items) - 1 : tmp = TaoBao(p, callback = _getLastItemDetail)
  79. else :tmp = TaoBao(p, callback = _getItemDetail)
  80. tmp.fetch()
  81. # params = {}
  82. # for f in fields :
  83. # if f == "delist_time" : params[f] = dt.strptime(item[f],"%Y-%m-%d %H:%M:%S")
  84. # else : params[f] = item[f]
  85. # DBSession.add(Item(**params))
  86. # DBSession.commit()
  87. # logging.info("\n".join(ids))
  88. t = TaoBao(params1, callback = _getItemList)
  89. t.fetch()