pyproject.toml 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. [tool.poetry]
  2. name = "pysaml2"
  3. version = "7.3.1"
  4. description = "Python implementation of SAML Version 2 Standard"
  5. license = "Apache-2.0"
  6. authors = ["IdentityPython <discuss@idpy.org>"]
  7. maintainers = ["IdentityPython <discuss@idpy.org>"]
  8. readme = "README.md"
  9. homepage = "https://idpy.org"
  10. repository = "https://github.com/IdentityPython/pysaml2"
  11. documentation = "https://pysaml2.readthedocs.io"
  12. keywords = [
  13. "saml",
  14. "saml2",
  15. "standard",
  16. "federation",
  17. "identity",
  18. "idpy",
  19. "IdentityPython",
  20. ]
  21. classifiers = [
  22. "Topic :: Software Development :: Libraries :: Python Modules",
  23. ]
  24. packages = [
  25. { include = "saml2", from = "src" },
  26. { include = "saml2test", from = "src" },
  27. { include = "utility", from = "src" },
  28. ]
  29. [tool.poetry.urls]
  30. "Bug Tracker" = "https://github.com/IdentityPython/pysaml2/issues"
  31. [tool.poetry.scripts]
  32. make_metadata = "saml2.tools.make_metadata:main"
  33. mdexport = "saml2.tools.mdexport:main"
  34. merge_metadata = "saml2.tools.merge_metadata:main"
  35. parse_xsd2 = "saml2.tools.parse_xsd2:main"
  36. [tool.poetry.dependencies]
  37. python = "^3.6.2"
  38. cryptography = ">=3.1"
  39. defusedxml = "*"
  40. importlib-metadata = {version = ">=1.7.0", python = "<3.8"}
  41. importlib-resources = {python = "<3.9", version = "*"}
  42. paste = {optional = true, version = "*"}
  43. pyopenssl = "*"
  44. python-dateutil = "*"
  45. pytz = "*"
  46. "repoze.who" = {optional = true, version = "*"}
  47. requests = "^2"
  48. xmlschema = ">=1.2.1"
  49. "zope.interface" = {optional = true, version = "*"}
  50. [tool.poetry.extras]
  51. s2repoze = ["paste", "repoze-who", "zope-interface"]
  52. [tool.poetry.group.dev]
  53. optional = true
  54. [tool.poetry.group.dev.dependencies]
  55. black = "*"
  56. isort = {version = "^5.10.1", extras = ["pyproject"]}
  57. tox = "^3.25.1"
  58. flake8 = ">=4"
  59. Flake8-pyproject = "^1.1.0.post0"
  60. flake8-bugbear = "^22.8.23"
  61. flake8-logging-format = "^0.7.5"
  62. ipdb = "^0.13.9"
  63. [tool.poetry.group.test]
  64. optional = true
  65. [tool.poetry.group.test.dependencies]
  66. pyasn1 = "*"
  67. pymongo = ">=3.5, <5"
  68. pytest = ">=6.0"
  69. responses = "*"
  70. [tool.poetry.group.coverage]
  71. optional = true
  72. [tool.poetry.group.coverage.dependencies]
  73. coverage = "*"
  74. pytest-cov = "*"
  75. [tool.poetry.group.docs]
  76. optional = true
  77. [tool.poetry.group.docs.dependencies]
  78. sphinx = "*"
  79. [build-system]
  80. requires = ["poetry_core>=1.0.0"]
  81. build-backend = "poetry.core.masonry.api"
  82. [tool.pytest.ini_options]
  83. minversion = "6.0"
  84. addopts = "-ra -vvv"
  85. testpaths = [
  86. "tests",
  87. ]
  88. markers = [
  89. "mongo",
  90. ]
  91. pythonpath = [
  92. "tests",
  93. ]
  94. [tool.coverage.run]
  95. branch = true
  96. source = ["saml2"]
  97. [tool.coverage.report]
  98. exclude_lines = [
  99. "pragma: no cover",
  100. "def __repr__",
  101. "def __str__",
  102. "raise AssertionError",
  103. "raise NotImplementedError",
  104. "if __name__ == .__main__.:",
  105. "if TYPE_CHECKING:",
  106. "if typing.TYPE_CHECKING:",
  107. ]
  108. [tool.coverage.html]
  109. directory = "cov_html"
  110. [tool.flake8]
  111. max-line-length = 120
  112. max-complexity = 18
  113. count = true
  114. show-source = true
  115. statistics = true
  116. disable-noqa = false
  117. enable-extensions = [
  118. 'G', # flake8-logging-format
  119. ]
  120. # 'ignore' defaults to: E121,E123,E126,E226,E24,E704,W503,W504
  121. extend-ignore = [
  122. 'E501', # line too long; instead, use B950
  123. 'E203', # whitespace before ‘,’, ‘;’, or ‘:’; may conflict with black
  124. 'W503', # line break before binary operator
  125. ]
  126. per-file-ignores = [
  127. '__init__.py:F401',
  128. ]
  129. # 'select' defaults to: E,F,W,C90
  130. extend-select = [
  131. # * Default warnings reported by flake8-bugbear (B) -
  132. # https://github.com/PyCQA/flake8-bugbear#list-of-warnings
  133. 'B',
  134. # * The B950 flake8-bugbear opinionated warnings -
  135. # https://github.com/PyCQA/flake8-bugbear#opinionated-warnings
  136. 'B9',
  137. #
  138. # * Complexity violations reported by mccabe (C) -
  139. # http://flake8.pycqa.org/en/latest/user/error-codes.html#error-violation-codes
  140. # mccabe only ever reports one violation - C901 based on the complexity value
  141. # provided by the user.
  142. # This is selected by default.
  143. #'C90',
  144. #
  145. # * Documentation conventions compliance reported by pydocstyle (D) -
  146. # http://www.pydocstyle.org/en/stable/error_codes.html
  147. #'D', # FIXME TODO
  148. #
  149. # * Default errors reported by pycodestyle (E) -
  150. # https://pycodestyle.readthedocs.io/en/latest/intro.html#error-codes
  151. # This is selected by default.
  152. #'E',
  153. #
  154. # * Default errors reported by pyflakes (F) -
  155. # http://flake8.pycqa.org/en/latest/user/error-codes.html
  156. # This is selected by default.
  157. #'F',
  158. #
  159. # * flake8-mypy - enable limited type checking as a linter
  160. # http://flake8.pycqa.org/en/latest/user/error-codes.html
  161. #'T4', # FIXME TODO
  162. #
  163. # * Default warnings reported by pycodestyle (W) -
  164. # https://pycodestyle.readthedocs.io/en/latest/intro.html#error-codes
  165. # This is selected by default.
  166. #'W',
  167. ]
  168. extend-exclude = [
  169. '.github', '.gitlab',
  170. '.Python', '.*.pyc', '.*.pyo', '.*.pyd', '.*.py.class', '*.egg-info',
  171. 'venv*', '.venv*', '.*_cache',
  172. 'lib', 'lib64', '.*.so',
  173. 'build', 'dist', 'sdist', 'wheels',
  174. ]
  175. [tool.black]
  176. line-length = 120
  177. extend-exclude = '''
  178. # A regex preceded with ^/ will apply only to files and directories
  179. # in the root of the project.
  180. (
  181. \.pytest_cache
  182. )
  183. '''
  184. [tool.isort]
  185. profile = 'black'
  186. # The 'black' profile means:
  187. # multi_line_output = 3
  188. # include_trailing_comma = true
  189. # force_grid_wrap = 0
  190. # use_parentheses = true
  191. # ensure_newline_before_comments = true
  192. # line_length = 88
  193. line_length = 120 # override black provile line_length
  194. force_single_line = true # override black profile multi_line_output
  195. star_first = true
  196. group_by_package = true
  197. force_sort_within_sections = true
  198. lines_after_imports = 2
  199. honor_noqa = true
  200. atomic = true
  201. ignore_comments = true
  202. skip_gitignore = true
  203. src_paths = [
  204. 'src',
  205. 'test',
  206. ]
  207. # XXX TODO
  208. #[tool.mypy]
  209. #pretty = true
  210. #check_untyped_defs = true
  211. #ignore_errors = false
  212. #ignore_missing_imports = true
  213. #show_error_codes = true
  214. #strict_optional = true
  215. #warn_unused_ignores = true
  216. #warn_redundant_casts = true
  217. #warn_unused_configs = true
  218. #warn_unreachable = true