[build-system]
requires = [
    'setuptools ~= 75.2',
]
build-backend = 'setuptools.build_meta'

[project]
version = '0.4.9'
name = 'betty'
description = 'Betty helps you visualize and publish your family history by building interactive genealogy websites out of your Gramps and GEDCOM family trees'
readme = 'README.md'
license = {file = 'LICENSE.txt'}
authors = [
  {name = 'Bart Feenstra', email = 'bar@bartfeenstra.com'},
]
requires-python = '~= 3.11'
dependencies = [
    'aiofiles ~= 24.1',
    'aiohttp ~= 3.10, != 3.11.0',
    'asyncclick ~= 8.1',
    'babel ~= 2.16',
    'furo == 2024.8.6',
    'geopy ~= 2.4',
    'html5lib ~= 1.1',
    'jinja2 ~= 3.1',
    'jsonschema ~= 4.23',
    'langcodes ~= 3.4',
    'lxml ~= 5.3',
    'markupsafe ~= 3.0',
    'multidict ~= 6.1',
    'pdf2image ~= 1.17',
    'polib ~= 1.2',
    'Pillow ~= 11.0',
    'pyyaml ~= 6.0',
    'referencing ~= 0.35',
    'sphinx ~= 8.1',
    'sphinx-design ~= 0.6',
    'typing_extensions ~= 4.12',
]
classifiers = [
    'Environment :: Console',
    'Intended Audience :: Developers',
    'Intended Audience :: End Users/Desktop',
    'Intended Audience :: Science/Research',
    'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)',
    'Programming Language :: JavaScript',
    'Programming Language :: Python :: 3.11',
    'Programming Language :: Python :: 3.12',
    'Programming Language :: Python :: 3.13',
    'Programming Language :: Unix Shell',
    'Operating System :: MacOS :: MacOS X',
    'Operating System :: POSIX :: Linux',
    'Operating System :: Microsoft :: Windows',
    'Topic :: Internet',
    'Topic :: Scientific/Engineering :: Visualization',
    'Topic :: Sociology :: Genealogy',
    'Topic :: Sociology :: History',
    'Topic :: Software Development :: Code Generators',
    'Natural Language :: Dutch',
    'Natural Language :: English',
    'Natural Language :: French',
    'Natural Language :: German',
    'Natural Language :: Ukrainian',
    'Typing :: Typed',
]

[project.urls]
Documentation = 'https://betty.readthedocs.io'
GitHub = 'https://github.com/bartfeenstra/betty'
Twitter = 'https://twitter.com/BettyProject'
X = 'https://twitter.com/BettyProject'

[project.entry-points.'console_scripts']
betty = 'betty.cli:main'

[project.entry-points.'betty.command']
'clear-caches' = 'betty.cli.commands.clear_caches:ClearCaches'
'config' = 'betty.cli.commands.config:Config'
'demo' = 'betty.cli.commands.demo:Demo'
'docs' = 'betty.cli.commands.docs:Docs'
'extension-new-translation' = 'betty.cli.commands.extension_new_translation:ExtensionNewTranslation'
'extension-update-translations' = 'betty.cli.commands.extension_update_translations:ExtensionUpdateTranslations'
'generate' = 'betty.cli.commands.generate:Generate'
'new' = 'betty.cli.commands.new:New'
'new-translation' = 'betty.cli.commands.new_translation:NewTranslation'
'serve' = 'betty.cli.commands.serve:Serve'
'update-translations' = 'betty.cli.commands.update_translations:UpdateTranslations'

[project.entry-points.'betty.dev.command']
'dev-update-translations' = 'betty.cli.commands.dev_update_translations:DevUpdateTranslations'

[project.entry-points.'betty.copyright_notice']
'project-author' = 'betty.copyright_notice.copyright_notices:ProjectAuthor'
'public-domain' = 'betty.copyright_notice.copyright_notices:PublicDomain'
'streetmix' = 'betty.project.extension.demo.copyright_notice:Streetmix'
'wikipedia-contributors' = 'betty.wikipedia.copyright_notice:WikipediaContributors'

[project.entry-points.'betty.license']
'all-rights-reserved' = 'betty.license.licenses:AllRightsReserved'
'public-domain' = 'betty.license.licenses:PublicDomain'

[project.entry-points.'betty.entity_type']
'citation' = 'betty.ancestry.citation:Citation'
'enclosure' = 'betty.ancestry.enclosure:Enclosure'
'event' = 'betty.ancestry.event:Event'
'file' = 'betty.ancestry.file:File'
'note' = 'betty.ancestry.note:Note'
'person' = 'betty.ancestry.person:Person'
'person-name' = 'betty.ancestry.person_name:PersonName'
'presence' = 'betty.ancestry.presence:Presence'
'place' = 'betty.ancestry.place:Place'
'source' = 'betty.ancestry.source:Source'

[project.entry-points.'betty.event_type']
'adoption' = 'betty.ancestry.event_type.event_types:Adoption'
'baptism' = 'betty.ancestry.event_type.event_types:Baptism'
'bar-mitzvah' = 'betty.ancestry.event_type.event_types:BarMitzvah'
'bat-mitzvah' = 'betty.ancestry.event_type.event_types:BatMitzvah'
'birth' = 'betty.ancestry.event_type.event_types:Birth'
'burial' = 'betty.ancestry.event_type.event_types:Burial'
'conference' = 'betty.ancestry.event_type.event_types:Conference'
'confirmation' = 'betty.ancestry.event_type.event_types:Confirmation'
'correspondence' = 'betty.ancestry.event_type.event_types:Correspondence'
'cremation' = 'betty.ancestry.event_type.event_types:Cremation'
'death' = 'betty.ancestry.event_type.event_types:Death'
'divorce' = 'betty.ancestry.event_type.event_types:Divorce'
'divorce-announcement' = 'betty.ancestry.event_type.event_types:DivorceAnnouncement'
'emigration' = 'betty.ancestry.event_type.event_types:Emigration'
'engagement' = 'betty.ancestry.event_type.event_types:Engagement'
'funeral' = 'betty.ancestry.event_type.event_types:Funeral'
'immigration' = 'betty.ancestry.event_type.event_types:Immigration'
'marriage' = 'betty.ancestry.event_type.event_types:Marriage'
'marriage-announcement' = 'betty.ancestry.event_type.event_types:MarriageAnnouncement'
'missing' = 'betty.ancestry.event_type.event_types:Missing'
'occupation' = 'betty.ancestry.event_type.event_types:Occupation'
'residence' = 'betty.ancestry.event_type.event_types:Residence'
'retirement' = 'betty.ancestry.event_type.event_types:Retirement'
'unknown' = 'betty.ancestry.event_type.event_types:Unknown'
'will' = 'betty.ancestry.event_type.event_types:Will'

[project.entry-points.'betty.extension']
'cotton-candy' = 'betty.project.extension.cotton_candy:CottonCandy'
'demo' = 'betty.project.extension.demo:Demo'
'deriver' = 'betty.project.extension.deriver:Deriver'
'gramps' = 'betty.project.extension.gramps:Gramps'
'http-api-doc' = 'betty.project.extension.http_api_doc:HttpApiDoc'
'maps' = 'betty.project.extension.maps:Maps'
'privatizer' = 'betty.project.extension.privatizer:Privatizer'
'raspberry-mint' = 'betty.project.extension.raspberry_mint:RaspberryMint'
'trees' = 'betty.project.extension.trees:Trees'
'webpack' = 'betty.project.extension.webpack:Webpack'
'wikipedia' = 'betty.project.extension.wikipedia:Wikipedia'

[project.entry-points.'betty.gender']
'female' = 'betty.ancestry.gender.genders:Female'
'male' = 'betty.ancestry.gender.genders:Male'
'non-binary' = 'betty.ancestry.gender.genders:NonBinary'
'unknown' = 'betty.ancestry.gender.genders:Unknown'

[project.entry-points.'betty.place_type']
'borough' = 'betty.ancestry.place_type.place_types:Borough'
'building' = 'betty.ancestry.place_type.place_types:Building'
'city' = 'betty.ancestry.place_type.place_types:City'
'country' = 'betty.ancestry.place_type.place_types:Country'
'county' = 'betty.ancestry.place_type.place_types:County'
'department' = 'betty.ancestry.place_type.place_types:Department'
'district' = 'betty.ancestry.place_type.place_types:District'
'farm' = 'betty.ancestry.place_type.place_types:Farm'
'hamlet' = 'betty.ancestry.place_type.place_types:Hamlet'
'locality' = 'betty.ancestry.place_type.place_types:Locality'
'municipality' = 'betty.ancestry.place_type.place_types:Municipality'
'neighborhood' = 'betty.ancestry.place_type.place_types:Neighborhood'
'number' = 'betty.ancestry.place_type.place_types:Number'
'parish' = 'betty.ancestry.place_type.place_types:Parish'
'province' = 'betty.ancestry.place_type.place_types:Province'
'region' = 'betty.ancestry.place_type.place_types:Region'
'state' = 'betty.ancestry.place_type.place_types:State'
'street' = 'betty.ancestry.place_type.place_types:Street'
'town' = 'betty.ancestry.place_type.place_types:Town'
'unknown' = 'betty.ancestry.place_type.place_types:Unknown'
'village' = 'betty.ancestry.place_type.place_types:Village'

[project.entry-points.'betty.presence_role']
'attendee' = 'betty.ancestry.presence_role.presence_roles:Attendee'
'beneficiary' = 'betty.ancestry.presence_role.presence_roles:Beneficiary'
'celebrant' = 'betty.ancestry.presence_role.presence_roles:Celebrant'
'informant' = 'betty.ancestry.presence_role.presence_roles:Informant'
'organizer' = 'betty.ancestry.presence_role.presence_roles:Organizer'
'speaker' = 'betty.ancestry.presence_role.presence_roles:Speaker'
'subject' = 'betty.ancestry.presence_role.presence_roles:Subject'
'unknown' = 'betty.ancestry.presence_role.presence_roles:Unknown'
'witness' = 'betty.ancestry.presence_role.presence_roles:Witness'

[project.entry-points.'betty.serde_format']
'json' = 'betty.serde.format.formats:Json'
'yaml' = 'betty.serde.format.formats:Yaml'

[project.entry-points.'betty.renderer']
'jinja2' = 'betty.jinja2:Jinja2Renderer'

[project.optional-dependencies]
setuptools = [
    'twine ~= 6.0',
    'wheel ~= 0.44',
]
test = [
    'aioresponses ~= 0.7',
    'basedmypy ~= 2.6',
    'coverage ~= 7.6',
    'packaging ~= 24.1',
    'puremagic ~= 1.28',
    'pytest ~= 8.3',
    'pytest-aioresponses ~= 0.2',
    'pytest-asyncio ~= 0.24',
    'pytest-mock ~= 3.14',
    'pytest-playwright-asyncio ~= 0.7',
    'requests ~= 2.32',
    'ruff ~= 0.8',
    'types-aiofiles ~= 24.1',
    'types-babel ~= 2.11',
    'types-html5lib ~= 1.1',
    'types-jsonschema ~= 4.23',
    'types-lxml >= 2024.9.16',
    'types-polib ~= 1.2',
    'types-pyyaml ~= 6.0',
    'types-requests ~= 2.32',
    'types-setuptools ~= 75.2',
    'virtualenv ~= 20.27',
    'betty[setuptools]',
]
development = [
    'pytest-repeat ~= 0.9',
    'betty[test]',
]
ci = [
    'codecov ~= 2.1',
    'betty[test]',
]

[tool.setuptools.packages.find]
where = ['.']
exclude = [
    'betty.tests',
    'betty.tests.*',
]

[tool.setuptools.package-data]
betty = [
    'py.typed',

    # Static data.
    'data/**/*',

    # Assets.
    'assets/**/*',
    'assets/public/localized/.error/*',
    'project/extension/*/assets/**/*',

    # JSON Schemas.
    'json/schemas/*',

    # Webpack.
    '../.browserslistrc',
    '../tsconfig.json',
    'project/extension/*/webpack/**/*',

    # Prebuilt assets.
    '../prebuild/**/*',
]

[tool.setuptools.exclude-package-data]
betty = [
    '__pycache__',
]
