pyproject.toml
Rama main · réplica de lectura del repositorio original.
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "openoutreach"
# **The base, not the released version.** Major and minor are declared here and bumped by
# hand when a change deserves it; the patch is derived at publish time from the number of
# commits since `v0.1.0` (`.github/workflows/deploy.yml`, job `publish-pypi`), because
# every green push to `main` releases and PyPI version numbers are single-use. A local
# install reports this literal — `core/version.py` is what identifies a build precisely.
version = "0.1.0"
description = "Open-source AI lead finder: describe your product, get qualified leads with the reason each one fits."
readme = "README.md"
requires-python = ">=3.12"
license = "GPL-3.0-or-later"
license-files = ["LICENCE.md"]
authors = [{ name = "OpenOutreach", email = "hello@openoutreach.app" }]
keywords = [
"lead-generation",
"b2b",
"outreach",
"cold-email",
"sales-automation",
"self-hosted",
"open-source",
"crm",
]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
"Framework :: Django",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
# Both children are required, not extras: `pip install openoutreach` alone has to be the
# whole find-then-send flow, or the second install is the friction this package exists to
# remove. Everything the finding and the sending need — pydantic-ai, fastembed, sklearn,
# the mail transport — arrives through them; what is declared here is what *this* package
# imports directly.
#
# **The pins are exact, and the cost is known.** This project hosts both children's Django
# apps in one registry and owns the one migration graph over them, so a model change in
# either child needs a matching release here. Three repos that move together is the price
# of one install, and of a wizard that hands each child the environment it reads.
dependencies = [
"Django>=5.2,<7.0",
"openoutfind==0.1.78",
"openoutsend==0.1.72",
# The wizard validates a country code against a real list of them. Declared rather
# than inherited from the finder: the rule above is that this file names what *this*
# package imports directly.
"pytz>=2024.1",
]
[project.optional-dependencies]
dev = [
"pytest>=8",
"pytest-django>=4.8",
"pytest-mock>=3.14",
"pytest-cov>=5",
]
[project.scripts]
openoutreach = "openoutreach.__main__:main"
[project.urls]
Homepage = "https://openoutreach.app"
Source = "https://github.com/eracle/OpenOutreach"
Issues = "https://github.com/eracle/OpenOutreach/issues"
[tool.hatch.build.targets.wheel]
packages = ["openoutreach"]
[tool.hatch.build.targets.sdist]
include = ["openoutreach", "README.md", "LICENCE.md", "LEGAL_NOTICE.md", "pyproject.toml"]