simulate_tenant_menu_api.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # -*- coding: utf-8 -*-
  2. """Simulate /tenant/tenant/tenantMenu/list API tree output."""
  3. import pymysql
  4. M = dict(
  5. host='cq-cdb-8fjmemkb.sql.tencentcdb.com',
  6. port=27220,
  7. user='root',
  8. password='Ylrz_1q2w3e4r5t6y',
  9. database='ylrz_saas',
  10. charset='utf8mb4',
  11. )
  12. def build_tree(rows, parent_id=0):
  13. tree = []
  14. for r in rows:
  15. if r['parent_id'] == parent_id:
  16. node = dict(r)
  17. node['children'] = build_tree(rows, r['menu_id'])
  18. tree.append(node)
  19. tree.sort(key=lambda x: (x.get('order_num') or 0, x['menu_id']))
  20. return tree
  21. def print_tree(nodes, depth=0, max_depth=2):
  22. for n in nodes:
  23. vis = 'show' if n['visible'] == '0' else 'hide'
  24. print(' ' * depth + '- [%s] %s (id=%s, path=%s, order=%s)' % (
  25. n['menu_type'], n['menu_name'], n['menu_id'], n['path'], n['order_num']))
  26. if depth < max_depth and n.get('children'):
  27. print_tree(n['children'], depth + 1, max_depth)
  28. c = pymysql.connect(**M)
  29. cur = c.cursor(pymysql.cursors.DictCursor)
  30. cur.execute(
  31. 'SELECT menu_id, menu_name, parent_id, order_num, path, component, menu_type, visible, status '
  32. 'FROM tenant_sys_menu ORDER BY parent_id, order_num, menu_id'
  33. )
  34. rows = cur.fetchall()
  35. tree = build_tree(rows, 0)
  36. print('=== TOP LEVEL (parent_id=0) count=%s ===' % len(tree))
  37. print_tree(tree, 0, 1)
  38. print('\n=== VISIBLE TOP LEVEL only ===')
  39. print_tree([n for n in tree if n['visible'] == '0'], 0, 2)
  40. print('\n=== system subtree (32372) ===')
  41. sys_node = next((n for n in tree if n['menu_id'] == 32372), None)
  42. if sys_node:
  43. print_tree([sys_node], 0, 2)
  44. print('\n=== qw subtree (32361) ===')
  45. qw_node = next((n for n in tree if n['menu_id'] == 32361), None)
  46. if qw_node:
  47. print_tree([qw_node], 0, 2)
  48. cur.close()
  49. c.close()