/tools/doit/dodo.py

https://gitlab.com/xbsd/topicalguide · Python · 147 lines · 100 code · 31 blank · 16 comment · 4 complexity · a137ea435cbb5f4045753d1371a6028d MD5 · raw file

  1. """dodo file. test + management stuff"""
  2. import glob
  3. import os
  4. import pytest
  5. from doit.tools import create_folder
  6. DOIT_CONFIG = {'default_tasks': ['checker', 'ut']}
  7. CODE_FILES = glob.glob("doit/*.py")
  8. TEST_FILES = glob.glob("tests/test_*.py")
  9. TESTING_FILES = glob.glob("tests/*.py")
  10. PY_FILES = CODE_FILES + TESTING_FILES
  11. def task_checker():
  12. """run pyflakes on all project files"""
  13. for module in PY_FILES:
  14. yield {'actions': ["pyflakes %(dependencies)s"],
  15. 'name':module,
  16. 'file_dep':(module,),
  17. 'title': (lambda task: task.name)}
  18. def run_test(test):
  19. return not bool(pytest.main(test))
  20. def task_ut():
  21. """run unit-tests"""
  22. for test in TEST_FILES:
  23. yield {'name': test,
  24. 'actions': [(run_test, (test,))],
  25. 'file_dep': PY_FILES,
  26. 'verbosity': 0}
  27. ################## coverage tasks
  28. def task_coverage():
  29. """show coverage for all modules including tests"""
  30. return {'actions':
  31. ["coverage run --parallel-mode `which py.test` ",
  32. "coverage combine",
  33. ("coverage report --show-missing %s" %
  34. " ".join(CODE_FILES + TEST_FILES))
  35. ],
  36. 'verbosity': 2}
  37. def task_coverage_code():
  38. """show coverage for all modules (exclude tests)"""
  39. return {'actions':
  40. ["coverage run --parallel-mode `which py.test` ",
  41. "coverage combine",
  42. "coverage report --show-missing %s" % " ".join(CODE_FILES)],
  43. 'verbosity': 2}
  44. def task_coverage_module():
  45. """show coverage for individual modules"""
  46. to_strip = len('tests/test_')
  47. for test in TEST_FILES:
  48. source = "doit/" + test[to_strip:]
  49. yield {'name': test,
  50. 'actions':
  51. ["coverage run --parallel-mode `which py.test` -v %s" % test,
  52. "coverage combine",
  53. "coverage report --show-missing %s %s" % (source, test)],
  54. 'verbosity': 2}
  55. ############# python3
  56. # distribute => setup.py test together with use_2to3 doesnt work hence this
  57. def task_test3():
  58. """run unitests on python3"""
  59. this_folder = os.path.dirname(os.path.abspath(__file__))
  60. test_folder = os.path.join(os.path.dirname(os.path.abspath(__file__)),
  61. "../doit3test")
  62. return {'actions': [
  63. "rm -rf %s" % test_folder,
  64. "cp -r %s %s" % (this_folder, test_folder),
  65. "2to3 --write --nobackups %s" % test_folder,
  66. "py.test-3.2 %s" % test_folder,
  67. ],
  68. 'verbosity': 2,
  69. }
  70. ############################ website
  71. DOC_ROOT = 'doc/'
  72. DOC_BUILD_PATH = DOC_ROOT + '_build/html/'
  73. def task_epydoc():
  74. """# generate API docs"""
  75. target_path = DOC_BUILD_PATH + 'api/'
  76. return {'actions':[(create_folder, [target_path]),
  77. ("epydoc --config %sepydoc.config " % DOC_ROOT +
  78. "-o %(targets)s")],
  79. 'file_dep': CODE_FILES,
  80. 'targets': [target_path]}
  81. def task_sphinx():
  82. """generate website docs"""
  83. action = "sphinx-build -b html -d %s_build/doctrees %s %s"
  84. return {'actions': [action % (DOC_ROOT, DOC_ROOT, DOC_BUILD_PATH)]}
  85. def task_website():
  86. """dodo file create website html files"""
  87. return {'actions': None,
  88. 'task_dep': ['epydoc', 'sphinx'],
  89. }
  90. def task_website_update():
  91. """update website on sourceforge"""
  92. return {'actions': ["rsync -avP -e ssh %s* schettino72,python-doit@web.sourceforge.net:htdocs/" % DOC_BUILD_PATH]}
  93. ################### dist
  94. def task_revision():
  95. """create file with repo rev number"""
  96. return {'actions': ["bzr version-info > revision.txt"]}
  97. def task_manifest():
  98. """create manifest file for distutils """
  99. cmd = "bzr ls --versioned --recursive > MANIFEST;echo 'revision.txt' >> MANIFEST"
  100. return {'actions': [cmd]}
  101. def task_sdist():
  102. """create source dist package"""
  103. return {'actions': ["python setup.py sdist"],
  104. 'task_dep': ['revision', 'manifest'],
  105. }
  106. def task_pypi():
  107. """upload package to pypi"""
  108. return {'actions': ["python setup.py sdist upload"]}
  109. # sfood -i doit/ | sfood-graph | dot -Tpng -o doit-dep.png