setup.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from typing import List, Union
  4. def python_version_check(major=3, minor=6):
  5. import sys
  6. assert sys.version_info.major == major and sys.version_info.minor >= minor, (
  7. f"This project is utilises language features only present Python {major}.{minor} and greater. "
  8. f"You are running {sys.version_info}."
  9. )
  10. python_version_check()
  11. import pathlib
  12. import re
  13. from setuptools import find_packages, setup
  14. with open(
  15. pathlib.Path(__file__).parent / "draugr" / "__init__.py", "r"
  16. ) as project_init_file:
  17. content = project_init_file.read() # get strings from module
  18. version = re.search(r"__version__ = ['\"]([^'\"]*)['\"]", content, re.M).group(1)
  19. project_name = re.search(r"__project__ = ['\"]([^'\"]*)['\"]", content, re.M).group(
  20. 1
  21. )
  22. author = re.search(r"__author__ = ['\"]([^'\"]*)['\"]", content, re.M).group(1)
  23. __author__ = author
  24. class DraugrPackage:
  25. @property
  26. def test_dependencies(self) -> list:
  27. path = pathlib.Path(__file__).parent
  28. requirements_tests = []
  29. with open(path / "requirements_tests.txt") as f:
  30. requirements = f.readlines()
  31. for requirement in requirements:
  32. requirements_tests.append(requirement.strip())
  33. return requirements_tests
  34. @property
  35. def setup_dependencies(self) -> list:
  36. path = pathlib.Path(__file__).parent
  37. requirements_setup = []
  38. with open(path / "requirements_setup.txt") as f:
  39. requirements = f.readlines()
  40. for requirement in requirements:
  41. requirements_setup.append(requirement.strip())
  42. return requirements_setup
  43. @property
  44. def package_name(self) -> str:
  45. return project_name
  46. @property
  47. def url(self) -> str:
  48. return "https://github.com/cnheider/draugr"
  49. @property
  50. def download_url(self) -> str:
  51. return self.url + "/releases"
  52. @property
  53. def readme_type(self) -> str:
  54. return "text/markdown"
  55. @property
  56. def packages(self) -> List[Union[bytes, str]]:
  57. return find_packages(
  58. exclude=[
  59. # 'Path/To/Exclude'
  60. ]
  61. )
  62. @property
  63. def author_name(self) -> str:
  64. return author
  65. @property
  66. def author_email(self) -> str:
  67. return "christian.heider@alexandra.dk"
  68. @property
  69. def maintainer_name(self) -> str:
  70. return self.author_name
  71. @property
  72. def maintainer_email(self) -> str:
  73. return self.author_email
  74. @property
  75. def package_data(self) -> dict:
  76. emds = [str(p) for p in pathlib.Path(__file__).parent.rglob(".md")]
  77. return {"draugr": [*emds]}
  78. @property
  79. def entry_points(self) -> dict:
  80. return {
  81. "console_scripts": [
  82. # "name_of_executable = module.with:function_to_execute"
  83. "draugr-darkmode-toggle = draugr.entry_points.toggle_darkmode:main",
  84. "draugr-tb = draugr.entry_points.tensorboard_entry_point:main",
  85. "draugr-cpu = draugr.entry_points.cpu_usage_entry_point:main",
  86. "draugr-vis = draugr.entry_points.visdom_entry_point:main",
  87. ]
  88. }
  89. @property
  90. def extras(self) -> dict:
  91. these_extras = {
  92. # 'ExtraName':['package-name; platform_system == "System(Linux,Windows)"'
  93. }
  94. path: pathlib.Path = pathlib.Path(__file__).parent
  95. for file in path.iterdir():
  96. if file.name.startswith("requirements_"):
  97. requirements_group = []
  98. with open(str(file.absolute())) as f:
  99. requirements = f.readlines()
  100. for requirement in requirements:
  101. requirements_group.append(requirement.strip())
  102. group_name_ = "_".join(file.name.strip(".txt").split("_")[1:])
  103. these_extras[group_name_] = requirements_group
  104. all_dependencies = []
  105. for group_name in these_extras:
  106. all_dependencies += these_extras[group_name]
  107. these_extras["all"] = all_dependencies
  108. return these_extras
  109. @property
  110. def requirements(self) -> list:
  111. requirements_out = []
  112. with open("requirements.txt") as f:
  113. requirements = f.readlines()
  114. for requirement in requirements:
  115. requirements_out.append(requirement.strip())
  116. return requirements_out
  117. @property
  118. def description(self) -> str:
  119. return "A package for plotting directly in your terminal"
  120. @property
  121. def readme(self) -> str:
  122. with open("README.md") as f:
  123. return f.read()
  124. @property
  125. def keyword(self) -> str:
  126. with open("KEYWORDS.md") as f:
  127. return f.read()
  128. @property
  129. def license(self) -> str:
  130. return "Apache License, Version 2.0"
  131. @property
  132. def classifiers(self) -> List[str]:
  133. return [
  134. "Development Status :: 4 - Beta",
  135. "Environment :: Console",
  136. "Intended Audience :: End Users/Desktop",
  137. "Intended Audience :: Developers",
  138. "License :: OSI Approved :: Apache Software License",
  139. "Operating System :: MacOS :: MacOS X",
  140. "Operating System :: Microsoft :: Windows",
  141. "Operating System :: POSIX",
  142. "Operating System :: OS Independent",
  143. "Programming Language :: Python :: 3",
  144. "Natural Language :: English",
  145. # 'Topic :: Scientific/Engineering :: Artificial Intelligence'
  146. # 'Topic :: Software Development :: Bug Tracking',
  147. ]
  148. @property
  149. def version(self) -> str:
  150. return version
  151. if __name__ == "__main__":
  152. pkg = DraugrPackage()
  153. setup(
  154. name=pkg.package_name,
  155. version=pkg.version,
  156. packages=pkg.packages,
  157. package_data=pkg.package_data,
  158. author=pkg.author_name,
  159. author_email=pkg.author_email,
  160. maintainer=pkg.maintainer_name,
  161. maintainer_email=pkg.maintainer_email,
  162. description=pkg.description,
  163. license=pkg.license,
  164. keywords=pkg.keyword,
  165. url=pkg.url,
  166. download_url=pkg.download_url,
  167. install_requires=pkg.requirements,
  168. extras_require=pkg.extras,
  169. setup_requires=pkg.setup_dependencies,
  170. entry_points=pkg.entry_points,
  171. classifiers=pkg.classifiers,
  172. long_description_content_type=pkg.readme_type,
  173. long_description=pkg.readme,
  174. tests_require=pkg.test_dependencies,
  175. include_package_data=True,
  176. python_requires=">=3.6",
  177. )