/fpage.py

https://github.com/fy0/fpage · Python · 140 lines · 114 code · 24 blank · 2 comment · 29 complexity · 36494b9b9e34316ec8ed48f2367b27c5 MD5 · raw file

  1. #!/usr/bin/env python
  2. # coding:utf-8
  3. import os
  4. import re
  5. import os
  6. import sys
  7. import shutil
  8. from sys import argv
  9. from os.path import join
  10. py_major_ver = sys.version_info[0]
  11. src_dir = os.path.dirname(os.path.abspath(__file__))
  12. def help():
  13. print('FPage v1.2 - tornado classic project generator(cli)')
  14. print('repo: github.com/fy0/fpage\n')
  15. print('Usage:')
  16. print(' fpage <command>')
  17. print('')
  18. print('Commands:')
  19. print(' new [project-name]')
  20. print(' help')
  21. print('')
  22. def gen(project_dir, project_name, tmpl_engine, db_orm):
  23. shutil.copytree(join(src_dir, 'src'), project_dir)
  24. if tmpl_engine == 'mako':
  25. shutil.rmtree(join(project_dir, 'templates_jinja2'))
  26. shutil.rmtree(join(project_dir, 'templates_tornado'))
  27. elif tmpl_engine == 'jinja2':
  28. shutil.rmtree(join(project_dir, 'templates'))
  29. shutil.rmtree(join(project_dir, 'templates_tornado'))
  30. shutil.move(join(project_dir, 'templates_jinja2'), join(project_dir, 'templates'))
  31. elif tmpl_engine == 'tornado':
  32. shutil.rmtree(join(project_dir, 'templates'))
  33. shutil.rmtree(join(project_dir, 'templates_jinja2'))
  34. shutil.move(join(project_dir, 'templates_tornado'), join(project_dir, 'templates'))
  35. if db_orm == 'sqlalchemy':
  36. shutil.rmtree(join(project_dir, 'model_peewee'))
  37. elif db_orm == 'peewee':
  38. shutil.rmtree(join(project_dir, 'model'))
  39. shutil.move(join(project_dir, 'model_peewee'), join(project_dir, 'model'))
  40. config_file = join(project_dir, 'config.py')
  41. fp = open(config_file)
  42. txt = fp.read()
  43. fp.close()
  44. txt = txt.replace("TITLE = 'FPage'", "TITLE = '%s'" % project_name)
  45. txt = txt.replace("TEMPLATE = 'mako'", "TEMPLATE = '%s'" % tmpl_engine)
  46. try:
  47. fp = open(config_file, 'w+', encoding='utf-8')
  48. except:
  49. fp = open(config_file, 'w+')
  50. fp.write(txt)
  51. fp.close()
  52. return True
  53. def startapp(appname=None):
  54. global input # fix4py3
  55. if py_major_ver == 2:
  56. input = raw_input
  57. if appname:
  58. project_name = input('Project Name (%s):' % appname)
  59. if not project_name:
  60. project_name = appname
  61. else:
  62. project_name = input('Project Name:')
  63. tmpl_engine = input('Template Engine [M/J/T]:').lower()
  64. db_orm = input('Database ORM [P/S]:').lower()
  65. if len(project_name) == 0 or ' ' in project_name:
  66. print('Invalid Project Name.')
  67. return
  68. if tmpl_engine in ['', 'm']:
  69. tmpl_engine = 'mako'
  70. elif tmpl_engine in ['j', 'jinja', 'jinja2']:
  71. tmpl_engine = 'jinja2'
  72. elif tmpl_engine in ['t', 'tornado']:
  73. tmpl_engine = 'tornado'
  74. else:
  75. print('Invalid Value.')
  76. return
  77. if db_orm in ['', 'p', 'peewee']:
  78. db_orm = 'peewee'
  79. elif db_orm in ['s', 'sqlalchemy']:
  80. db_orm = 'sqlalchemy'
  81. else:
  82. print('Invalid Value.')
  83. return
  84. print('')
  85. print(' Project Name: %s' % project_name)
  86. print('Template Engine: %s' % tmpl_engine)
  87. print(' Database ORM: %s' % db_orm)
  88. print('')
  89. sure = input('Sure (Y/n)?')
  90. if sure == 'n':
  91. return
  92. project_dir = project_name
  93. if os.path.exists(project_dir):
  94. print('Already Exists!')
  95. return
  96. gen(project_dir, project_name, tmpl_engine, db_orm)
  97. print('Complete.\n')
  98. print('To get started:\n')
  99. print(' cd %s' % project_name)
  100. print(' python app.py\n')
  101. print('Served at http://localhost:9000')
  102. def main():
  103. if len(argv) > 1:
  104. if argv[1] == 'help':
  105. help()
  106. elif argv[1] == 'new':
  107. if len(argv) > 2:
  108. startapp(argv[2])
  109. else:
  110. startapp()
  111. else:
  112. help()
  113. else:
  114. help()
  115. if __name__ == "__main__":
  116. main()