setup.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import os
  2. import re
  3. from optparse import OptionParser
  4. from django.core import management
  5. def validate_project_name(parser, project_name):
  6. if project_name[0].isdigit():
  7. parser.error("project_name cannot start with digit")
  8. if project_name.startswith("-"):
  9. parser.error("project_name cannot start with '-'")
  10. if re.search("[^0-9a-zA-Z]", project_name):
  11. parser.error("project_name cannot contain special characters")
  12. # Ensure the given directory name doesn't clash with an existing
  13. # Python package/module.
  14. try:
  15. __import__(project_name)
  16. except ImportError:
  17. pass
  18. else:
  19. parser.error((
  20. "'%s' conflicts with the name of an existing "
  21. "Python module and cannot be used as a project "
  22. "name. Please try another name."
  23. ) % project_name)
  24. return project_name
  25. def get_misago_project_template():
  26. misago_path = os.path.dirname(os.path.dirname(__file__))
  27. return os.path.join(misago_path, 'project_template')
  28. def start_misago_project():
  29. parser = OptionParser(usage="usage: %prog project_name")
  30. _, args = parser.parse_args()
  31. if len(args) != 1:
  32. parser.error("project_name must be specified")
  33. project_name = validate_project_name(parser, args[0])
  34. argv = [
  35. 'start-misago.py', 'startproject', project_name,
  36. '--template=%s' % get_misago_project_template()
  37. ]
  38. management.execute_from_command_line(argv)