pyproject.toml 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. [project]
  2. name = "Radicale"
  3. # When the version is updated, a new section in the CHANGELOG.md file must be
  4. # added too.
  5. readme = "README.md"
  6. version = "3.3.1.dev"
  7. authors = [{name = "Guillaume Ayoub", email = "guillaume.ayoub@kozea.fr"}]
  8. license = {text = "GNU GPL v3"}
  9. description = "CalDAV and CardDAV Server"
  10. keywords = ["calendar", "addressbook", "CalDAV", "CardDAV"]
  11. classifiers = [
  12. "Development Status :: 5 - Production/Stable",
  13. "Environment :: Console",
  14. "Environment :: Web Environment",
  15. "Intended Audience :: End Users/Desktop",
  16. "Intended Audience :: Information Technology",
  17. "License :: OSI Approved :: GNU General Public License (GPL)",
  18. "Operating System :: OS Independent",
  19. "Programming Language :: Python :: 3",
  20. "Programming Language :: Python :: 3.8",
  21. "Programming Language :: Python :: 3.9",
  22. "Programming Language :: Python :: 3.10",
  23. "Programming Language :: Python :: 3.11",
  24. "Programming Language :: Python :: 3.12",
  25. "Programming Language :: Python :: 3.13",
  26. "Programming Language :: Python :: Implementation :: CPython",
  27. "Programming Language :: Python :: Implementation :: PyPy",
  28. "Topic :: Office/Business :: Groupware",
  29. ]
  30. urls = {Homepage = "https://radicale.org/"}
  31. requires-python = ">=3.8.0"
  32. dependencies = [
  33. "defusedxml",
  34. "passlib",
  35. "vobject>=0.9.6",
  36. "python-dateutil>=2.7.3",
  37. "pika>=1.1.0",
  38. ]
  39. [project.optional-dependencies]
  40. test = ["pytest>=7", "waitress", "bcrypt"]
  41. bcrypt = ["bcrypt"]
  42. ldap = ["ldap3"]
  43. [project.scripts]
  44. radicale = "radicale.__main__:run"
  45. [build-system]
  46. requires = ["setuptools>=61.2"]
  47. build-backend = "setuptools.build_meta"
  48. [tool.tox]
  49. min_version = "4.0"
  50. envlist = ["py", "flake8", "isort", "mypy"]
  51. [tool.tox.env.py]
  52. extras = ["test"]
  53. deps = [
  54. "pytest",
  55. "pytest-cov"
  56. ]
  57. commands = [["pytest", "-r", "s", "--cov", "--cov-report=term", "--cov-report=xml", "."]]
  58. [tool.tox.env.flake8]
  59. deps = ["flake8==7.1.0"]
  60. commands = [["flake8", "."]]
  61. skip_install = true
  62. [tool.tox.env.isort]
  63. deps = ["isort==5.13.2"]
  64. commands = [["isort", "--check", "--diff", "."]]
  65. skip_install = true
  66. [tool.tox.env.mypy]
  67. deps = ["mypy==1.11.0"]
  68. commands = [["mypy", "."]]
  69. skip_install = true
  70. [tool.setuptools]
  71. platforms = ["Any"]
  72. include-package-data = false
  73. [tool.setuptools.packages.find]
  74. exclude = ["*.tests"] # *.tests.*; tests.*; tests
  75. namespaces = false
  76. [tool.setuptools.package-data]
  77. radicale = [
  78. "web/internal_data/css/icon.png",
  79. "web/internal_data/css/loading.svg",
  80. "web/internal_data/css/logo.svg",
  81. "web/internal_data/css/main.css",
  82. "web/internal_data/css/icons/delete.svg",
  83. "web/internal_data/css/icons/download.svg",
  84. "web/internal_data/css/icons/edit.svg",
  85. "web/internal_data/css/icons/new.svg",
  86. "web/internal_data/css/icons/upload.svg",
  87. "web/internal_data/fn.js",
  88. "web/internal_data/index.html",
  89. "py.typed",
  90. ]
  91. [tool.isort]
  92. known_standard_library = "_dummy_thread,_thread,abc,aifc,argparse,array,ast,asynchat,asyncio,asyncore,atexit,audioop,base64,bdb,binascii,binhex,bisect,builtins,bz2,cProfile,calendar,cgi,cgitb,chunk,cmath,cmd,code,codecs,codeop,collections,colorsys,compileall,concurrent,configparser,contextlib,contextvars,copy,copyreg,crypt,csv,ctypes,curses,dataclasses,datetime,dbm,decimal,difflib,dis,distutils,doctest,dummy_threading,email,encodings,ensurepip,enum,errno,faulthandler,fcntl,filecmp,fileinput,fnmatch,formatter,fpectl,fractions,ftplib,functools,gc,getopt,getpass,gettext,glob,grp,gzip,hashlib,heapq,hmac,html,http,imaplib,imghdr,imp,importlib,inspect,io,ipaddress,itertools,json,keyword,lib2to3,linecache,locale,logging,lzma,macpath,mailbox,mailcap,marshal,math,mimetypes,mmap,modulefinder,msilib,msvcrt,multiprocessing,netrc,nis,nntplib,ntpath,numbers,operator,optparse,os,ossaudiodev,parser,pathlib,pdb,pickle,pickletools,pipes,pkgutil,platform,plistlib,poplib,posix,posixpath,pprint,profile,pstats,pty,pwd,py_compile,pyclbr,pydoc,queue,quopri,random,re,readline,reprlib,resource,rlcompleter,runpy,sched,secrets,select,selectors,shelve,shlex,shutil,signal,site,smtpd,smtplib,sndhdr,socket,socketserver,spwd,sqlite3,sre,sre_compile,sre_constants,sre_parse,ssl,stat,statistics,string,stringprep,struct,subprocess,sunau,symbol,symtable,sys,sysconfig,syslog,tabnanny,tarfile,telnetlib,tempfile,termios,test,textwrap,threading,time,timeit,tkinter,token,tokenize,trace,traceback,tracemalloc,tty,turtle,turtledemo,types,typing,unicodedata,unittest,urllib,uu,uuid,venv,warnings,wave,weakref,webbrowser,winreg,winsound,wsgiref,xdrlib,xml,xmlrpc,zipapp,zipfile,zipimport,zlib"
  93. known_third_party = "defusedxml,passlib,pkg_resources,pytest,vobject"
  94. [tool.mypy]
  95. ignore_missing_imports = true
  96. show_error_codes = true
  97. exclude = "(^|/)build($|/)"
  98. [tool.coverage.run]
  99. branch = true
  100. source = ["radicale"]
  101. omit = ["tests/*", "*/tests/*"]
  102. [tool.coverage.report]
  103. # Regexes for lines to exclude from consideration
  104. exclude_lines = [
  105. # Have to re-enable the standard pragma
  106. "pragma: no cover",
  107. # Don't complain if tests don't hit defensive assertion code:
  108. "raise AssertionError",
  109. "raise NotImplementedError",
  110. # Don't complain if non-runnable code isn't run:
  111. "if __name__ == .__main__.:",
  112. ]