projen 0.81.17__py3-none-any.whl → 0.98.25__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
projen/python/__init__.py CHANGED
@@ -11,10 +11,26 @@ import jsii
11
11
  import publication
12
12
  import typing_extensions
13
13
 
14
- from typeguard import check_type
14
+ import typeguard
15
+ from importlib.metadata import version as _metadata_package_version
16
+ TYPEGUARD_MAJOR_VERSION = int(_metadata_package_version('typeguard').split('.')[0])
17
+
18
+ def check_type(argname: str, value: object, expected_type: typing.Any) -> typing.Any:
19
+ if TYPEGUARD_MAJOR_VERSION <= 2:
20
+ return typeguard.check_type(argname=argname, value=value, expected_type=expected_type) # type:ignore
21
+ else:
22
+ if isinstance(value, jsii._reference_map.InterfaceDynamicProxy): # pyright: ignore [reportAttributeAccessIssue]
23
+ pass
24
+ else:
25
+ if TYPEGUARD_MAJOR_VERSION == 3:
26
+ typeguard.config.collection_check_strategy = typeguard.CollectionCheckStrategy.ALL_ITEMS # type:ignore
27
+ typeguard.check_type(value=value, expected_type=expected_type) # type:ignore
28
+ else:
29
+ typeguard.check_type(value=value, expected_type=expected_type, collection_check_strategy=typeguard.CollectionCheckStrategy.ALL_ITEMS) # type:ignore
15
30
 
16
31
  from .._jsii import *
17
32
 
33
+ import constructs as _constructs_77d1e7e8
18
34
  from .. import (
19
35
  Component as _Component_2b0ad27f,
20
36
  Dependency as _Dependency_f510e013,
@@ -44,6 +60,91 @@ from ..github import (
44
60
  )
45
61
  from ..javascript import ProjenrcOptions as _ProjenrcOptions_179dd39f
46
62
  from ..typescript import ProjenrcTsOptions as _ProjenrcTsOptions_e3a2602d
63
+ from .uv_config import UvConfiguration as _UvConfiguration_126496a9
64
+
65
+
66
+ @jsii.data_type(
67
+ jsii_type="projen.python.BuildSystem",
68
+ jsii_struct_bases=[],
69
+ name_mapping={
70
+ "requires": "requires",
71
+ "backend_path": "backendPath",
72
+ "build_backend": "buildBackend",
73
+ },
74
+ )
75
+ class BuildSystem:
76
+ def __init__(
77
+ self,
78
+ *,
79
+ requires: typing.Sequence[builtins.str],
80
+ backend_path: typing.Optional[typing.Sequence[builtins.str]] = None,
81
+ build_backend: typing.Optional[builtins.str] = None,
82
+ ) -> None:
83
+ '''(experimental) Declares any Python level dependencies that must be installed in order to run the project’s build system successfully.
84
+
85
+ :param requires: (experimental) List of strings following the version specifier specification, representing dependencies required to execute the build system.
86
+ :param backend_path: (experimental) list of directories to prepend to ``sys.path`` when loading the build backend, relative to project root.
87
+ :param build_backend: (experimental) String is formatted following the same ``module:object`` syntax as a ``setuptools`` entry point. It’s also legal to leave out the ``:object`` part.
88
+
89
+ :stability: experimental
90
+ :schema: BuildSystem
91
+ '''
92
+ if __debug__:
93
+ type_hints = typing.get_type_hints(_typecheckingstub__e9da99c32d038945aadcf71f5eefe5c42c4d7218b8a2d3e62f288c5a8081f35f)
94
+ check_type(argname="argument requires", value=requires, expected_type=type_hints["requires"])
95
+ check_type(argname="argument backend_path", value=backend_path, expected_type=type_hints["backend_path"])
96
+ check_type(argname="argument build_backend", value=build_backend, expected_type=type_hints["build_backend"])
97
+ self._values: typing.Dict[builtins.str, typing.Any] = {
98
+ "requires": requires,
99
+ }
100
+ if backend_path is not None:
101
+ self._values["backend_path"] = backend_path
102
+ if build_backend is not None:
103
+ self._values["build_backend"] = build_backend
104
+
105
+ @builtins.property
106
+ def requires(self) -> typing.List[builtins.str]:
107
+ '''(experimental) List of strings following the version specifier specification, representing dependencies required to execute the build system.
108
+
109
+ :stability: experimental
110
+ :schema: BuildSystem#requires
111
+ '''
112
+ result = self._values.get("requires")
113
+ assert result is not None, "Required property 'requires' is missing"
114
+ return typing.cast(typing.List[builtins.str], result)
115
+
116
+ @builtins.property
117
+ def backend_path(self) -> typing.Optional[typing.List[builtins.str]]:
118
+ '''(experimental) list of directories to prepend to ``sys.path`` when loading the build backend, relative to project root.
119
+
120
+ :stability: experimental
121
+ :schema: BuildSystem#backend-path
122
+ '''
123
+ result = self._values.get("backend_path")
124
+ return typing.cast(typing.Optional[typing.List[builtins.str]], result)
125
+
126
+ @builtins.property
127
+ def build_backend(self) -> typing.Optional[builtins.str]:
128
+ '''(experimental) String is formatted following the same ``module:object`` syntax as a ``setuptools`` entry point.
129
+
130
+ It’s also legal to leave out the ``:object`` part.
131
+
132
+ :stability: experimental
133
+ :schema: BuildSystem#build-backend
134
+ '''
135
+ result = self._values.get("build_backend")
136
+ return typing.cast(typing.Optional[builtins.str], result)
137
+
138
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
139
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
140
+
141
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
142
+ return not (rhs == self)
143
+
144
+ def __repr__(self) -> str:
145
+ return "BuildSystem(%s)" % ", ".join(
146
+ k + "=" + repr(v) for k, v in self._values.items()
147
+ )
47
148
 
48
149
 
49
150
  @jsii.interface(jsii_type="projen.python.IPackageProvider")
@@ -364,6 +465,7 @@ class Poetry(
364
465
  package_name: typing.Optional[builtins.str] = None,
365
466
  poetry_options: typing.Optional[typing.Union["PoetryPyprojectOptionsWithoutDeps", typing.Dict[builtins.str, typing.Any]]] = None,
366
467
  setup_config: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
468
+ uv_options: typing.Optional[typing.Union["UvOptions", typing.Dict[builtins.str, typing.Any]]] = None,
367
469
  python_exec: typing.Optional[builtins.str] = None,
368
470
  ) -> None:
369
471
  '''
@@ -378,6 +480,7 @@ class Poetry(
378
480
  :param package_name: (experimental) Package name.
379
481
  :param poetry_options: (experimental) Additional options to set for poetry if using poetry.
380
482
  :param setup_config: (experimental) Additional fields to pass in the setup() function if using setuptools.
483
+ :param uv_options: (experimental) Additional options to set for uv if using uv.
381
484
  :param python_exec: (experimental) Path to the python executable to use. Default: "python"
382
485
 
383
486
  :stability: experimental
@@ -396,6 +499,7 @@ class Poetry(
396
499
  package_name=package_name,
397
500
  poetry_options=poetry_options,
398
501
  setup_config=setup_config,
502
+ uv_options=uv_options,
399
503
  python_exec=python_exec,
400
504
  )
401
505
 
@@ -493,7 +597,7 @@ class PoetryPyproject(
493
597
 
494
598
  def __init__(
495
599
  self,
496
- project: _Project_57d89203,
600
+ scope: _constructs_77d1e7e8.IConstruct,
497
601
  *,
498
602
  dependencies: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
499
603
  dev_dependencies: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
@@ -509,6 +613,7 @@ class PoetryPyproject(
509
613
  license: typing.Optional[builtins.str] = None,
510
614
  maintainers: typing.Optional[typing.Sequence[builtins.str]] = None,
511
615
  name: typing.Optional[builtins.str] = None,
616
+ package_mode: typing.Optional[builtins.bool] = None,
512
617
  packages: typing.Optional[typing.Sequence[typing.Any]] = None,
513
618
  plugins: typing.Any = None,
514
619
  readme: typing.Optional[builtins.str] = None,
@@ -519,7 +624,7 @@ class PoetryPyproject(
519
624
  version: typing.Optional[builtins.str] = None,
520
625
  ) -> None:
521
626
  '''
522
- :param project: -
627
+ :param scope: -
523
628
  :param dependencies: (experimental) A list of dependencies for the project. The python version for which your package is compatible is also required.
524
629
  :param dev_dependencies: (experimental) A list of development dependencies for the project.
525
630
  :param authors: (experimental) The authors of the package. Must be in the form "name "
@@ -534,6 +639,7 @@ class PoetryPyproject(
534
639
  :param license: (experimental) License of this package as an SPDX identifier. If the project is proprietary and does not use a specific license, you can set this value as "Proprietary".
535
640
  :param maintainers: (experimental) the maintainers of the package. Must be in the form "name "
536
641
  :param name: (experimental) Name of the package (required).
642
+ :param package_mode: (experimental) Package mode (optional). Default: true
537
643
  :param packages: (experimental) A list of packages and modules to include in the final distribution.
538
644
  :param plugins: (experimental) Plugins. Must be specified as a table.
539
645
  :param readme: (experimental) The name of the readme file of the package.
@@ -547,7 +653,7 @@ class PoetryPyproject(
547
653
  '''
548
654
  if __debug__:
549
655
  type_hints = typing.get_type_hints(_typecheckingstub__3a59b8e6934c492000192079edad9aaf1327a40b3bdba4192b78814ddbbfa98a)
550
- check_type(argname="argument project", value=project, expected_type=type_hints["project"])
656
+ check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
551
657
  options = PoetryPyprojectOptions(
552
658
  dependencies=dependencies,
553
659
  dev_dependencies=dev_dependencies,
@@ -563,6 +669,7 @@ class PoetryPyproject(
563
669
  license=license,
564
670
  maintainers=maintainers,
565
671
  name=name,
672
+ package_mode=package_mode,
566
673
  packages=packages,
567
674
  plugins=plugins,
568
675
  readme=readme,
@@ -573,15 +680,15 @@ class PoetryPyproject(
573
680
  version=version,
574
681
  )
575
682
 
576
- jsii.create(self.__class__, self, [project, options])
683
+ jsii.create(self.__class__, self, [scope, options])
577
684
 
578
685
  @builtins.property
579
686
  @jsii.member(jsii_name="file")
580
- def file(self) -> _TomlFile_dab3b22f:
687
+ def file(self) -> "PyprojectTomlFile":
581
688
  '''
582
689
  :stability: experimental
583
690
  '''
584
- return typing.cast(_TomlFile_dab3b22f, jsii.get(self, "file"))
691
+ return typing.cast("PyprojectTomlFile", jsii.get(self, "file"))
585
692
 
586
693
 
587
694
  @jsii.data_type(
@@ -600,6 +707,7 @@ class PoetryPyproject(
600
707
  "license": "license",
601
708
  "maintainers": "maintainers",
602
709
  "name": "name",
710
+ "package_mode": "packageMode",
603
711
  "packages": "packages",
604
712
  "plugins": "plugins",
605
713
  "readme": "readme",
@@ -626,6 +734,7 @@ class PoetryPyprojectOptionsWithoutDeps:
626
734
  license: typing.Optional[builtins.str] = None,
627
735
  maintainers: typing.Optional[typing.Sequence[builtins.str]] = None,
628
736
  name: typing.Optional[builtins.str] = None,
737
+ package_mode: typing.Optional[builtins.bool] = None,
629
738
  packages: typing.Optional[typing.Sequence[typing.Any]] = None,
630
739
  plugins: typing.Any = None,
631
740
  readme: typing.Optional[builtins.str] = None,
@@ -649,6 +758,7 @@ class PoetryPyprojectOptionsWithoutDeps:
649
758
  :param license: (experimental) License of this package as an SPDX identifier. If the project is proprietary and does not use a specific license, you can set this value as "Proprietary".
650
759
  :param maintainers: (experimental) the maintainers of the package. Must be in the form "name "
651
760
  :param name: (experimental) Name of the package (required).
761
+ :param package_mode: (experimental) Package mode (optional). Default: true
652
762
  :param packages: (experimental) A list of packages and modules to include in the final distribution.
653
763
  :param plugins: (experimental) Plugins. Must be specified as a table.
654
764
  :param readme: (experimental) The name of the readme file of the package.
@@ -675,6 +785,7 @@ class PoetryPyprojectOptionsWithoutDeps:
675
785
  check_type(argname="argument license", value=license, expected_type=type_hints["license"])
676
786
  check_type(argname="argument maintainers", value=maintainers, expected_type=type_hints["maintainers"])
677
787
  check_type(argname="argument name", value=name, expected_type=type_hints["name"])
788
+ check_type(argname="argument package_mode", value=package_mode, expected_type=type_hints["package_mode"])
678
789
  check_type(argname="argument packages", value=packages, expected_type=type_hints["packages"])
679
790
  check_type(argname="argument plugins", value=plugins, expected_type=type_hints["plugins"])
680
791
  check_type(argname="argument readme", value=readme, expected_type=type_hints["readme"])
@@ -708,6 +819,8 @@ class PoetryPyprojectOptionsWithoutDeps:
708
819
  self._values["maintainers"] = maintainers
709
820
  if name is not None:
710
821
  self._values["name"] = name
822
+ if package_mode is not None:
823
+ self._values["package_mode"] = package_mode
711
824
  if packages is not None:
712
825
  self._values["packages"] = packages
713
826
  if plugins is not None:
@@ -797,271 +910,1394 @@ class PoetryPyprojectOptionsWithoutDeps:
797
910
  return typing.cast(typing.Optional[builtins.str], result)
798
911
 
799
912
  @builtins.property
800
- def include(self) -> typing.Optional[typing.List[builtins.str]]:
801
- '''(experimental) A list of patterns that will be included in the final package.
913
+ def include(self) -> typing.Optional[typing.List[builtins.str]]:
914
+ '''(experimental) A list of patterns that will be included in the final package.
915
+
916
+ :stability: experimental
917
+ '''
918
+ result = self._values.get("include")
919
+ return typing.cast(typing.Optional[typing.List[builtins.str]], result)
920
+
921
+ @builtins.property
922
+ def keywords(self) -> typing.Optional[typing.List[builtins.str]]:
923
+ '''(experimental) A list of keywords (max: 5) that the package is related to.
924
+
925
+ :stability: experimental
926
+ '''
927
+ result = self._values.get("keywords")
928
+ return typing.cast(typing.Optional[typing.List[builtins.str]], result)
929
+
930
+ @builtins.property
931
+ def license(self) -> typing.Optional[builtins.str]:
932
+ '''(experimental) License of this package as an SPDX identifier.
933
+
934
+ If the project is proprietary and does not use a specific license, you
935
+ can set this value as "Proprietary".
936
+
937
+ :stability: experimental
938
+ '''
939
+ result = self._values.get("license")
940
+ return typing.cast(typing.Optional[builtins.str], result)
941
+
942
+ @builtins.property
943
+ def maintainers(self) -> typing.Optional[typing.List[builtins.str]]:
944
+ '''(experimental) the maintainers of the package.
945
+
946
+ Must be in the form "name "
947
+
948
+ :stability: experimental
949
+ '''
950
+ result = self._values.get("maintainers")
951
+ return typing.cast(typing.Optional[typing.List[builtins.str]], result)
952
+
953
+ @builtins.property
954
+ def name(self) -> typing.Optional[builtins.str]:
955
+ '''(experimental) Name of the package (required).
956
+
957
+ :stability: experimental
958
+ '''
959
+ result = self._values.get("name")
960
+ return typing.cast(typing.Optional[builtins.str], result)
961
+
962
+ @builtins.property
963
+ def package_mode(self) -> typing.Optional[builtins.bool]:
964
+ '''(experimental) Package mode (optional).
965
+
966
+ :default: true
967
+
968
+ :see: https://python-poetry.org/docs/pyproject/#package-mode
969
+ :stability: experimental
970
+
971
+ Example::
972
+
973
+ false
974
+ '''
975
+ result = self._values.get("package_mode")
976
+ return typing.cast(typing.Optional[builtins.bool], result)
977
+
978
+ @builtins.property
979
+ def packages(self) -> typing.Optional[typing.List[typing.Any]]:
980
+ '''(experimental) A list of packages and modules to include in the final distribution.
981
+
982
+ :stability: experimental
983
+ '''
984
+ result = self._values.get("packages")
985
+ return typing.cast(typing.Optional[typing.List[typing.Any]], result)
986
+
987
+ @builtins.property
988
+ def plugins(self) -> typing.Any:
989
+ '''(experimental) Plugins.
990
+
991
+ Must be specified as a table.
992
+
993
+ :see: https://toml.io/en/v1.0.0#table
994
+ :stability: experimental
995
+ '''
996
+ result = self._values.get("plugins")
997
+ return typing.cast(typing.Any, result)
998
+
999
+ @builtins.property
1000
+ def readme(self) -> typing.Optional[builtins.str]:
1001
+ '''(experimental) The name of the readme file of the package.
1002
+
1003
+ :stability: experimental
1004
+ '''
1005
+ result = self._values.get("readme")
1006
+ return typing.cast(typing.Optional[builtins.str], result)
1007
+
1008
+ @builtins.property
1009
+ def repository(self) -> typing.Optional[builtins.str]:
1010
+ '''(experimental) A URL to the repository of the project.
1011
+
1012
+ :stability: experimental
1013
+ '''
1014
+ result = self._values.get("repository")
1015
+ return typing.cast(typing.Optional[builtins.str], result)
1016
+
1017
+ @builtins.property
1018
+ def scripts(self) -> typing.Optional[typing.Mapping[builtins.str, typing.Any]]:
1019
+ '''(experimental) The scripts or executables that will be installed when installing the package.
1020
+
1021
+ :stability: experimental
1022
+ '''
1023
+ result = self._values.get("scripts")
1024
+ return typing.cast(typing.Optional[typing.Mapping[builtins.str, typing.Any]], result)
1025
+
1026
+ @builtins.property
1027
+ def source(self) -> typing.Optional[typing.List[typing.Any]]:
1028
+ '''(experimental) Source registries from which packages are retrieved.
1029
+
1030
+ :stability: experimental
1031
+ '''
1032
+ result = self._values.get("source")
1033
+ return typing.cast(typing.Optional[typing.List[typing.Any]], result)
1034
+
1035
+ @builtins.property
1036
+ def urls(self) -> typing.Optional[typing.Mapping[builtins.str, builtins.str]]:
1037
+ '''(experimental) Project custom URLs, in addition to homepage, repository and documentation.
1038
+
1039
+ E.g. "Bug Tracker"
1040
+
1041
+ :stability: experimental
1042
+ '''
1043
+ result = self._values.get("urls")
1044
+ return typing.cast(typing.Optional[typing.Mapping[builtins.str, builtins.str]], result)
1045
+
1046
+ @builtins.property
1047
+ def version(self) -> typing.Optional[builtins.str]:
1048
+ '''(experimental) Version of the package (required).
1049
+
1050
+ :stability: experimental
1051
+ '''
1052
+ result = self._values.get("version")
1053
+ return typing.cast(typing.Optional[builtins.str], result)
1054
+
1055
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
1056
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
1057
+
1058
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
1059
+ return not (rhs == self)
1060
+
1061
+ def __repr__(self) -> str:
1062
+ return "PoetryPyprojectOptionsWithoutDeps(%s)" % ", ".join(
1063
+ k + "=" + repr(v) for k, v in self._values.items()
1064
+ )
1065
+
1066
+
1067
+ @jsii.data_type(
1068
+ jsii_type="projen.python.ProjectAuthor",
1069
+ jsii_struct_bases=[],
1070
+ name_mapping={"email": "email", "name": "name"},
1071
+ )
1072
+ class ProjectAuthor:
1073
+ def __init__(
1074
+ self,
1075
+ *,
1076
+ email: typing.Optional[builtins.str] = None,
1077
+ name: typing.Optional[builtins.str] = None,
1078
+ ) -> None:
1079
+ '''
1080
+ :param email:
1081
+ :param name:
1082
+
1083
+ :stability: experimental
1084
+ :schema: projectAuthor
1085
+ '''
1086
+ if __debug__:
1087
+ type_hints = typing.get_type_hints(_typecheckingstub__c75ee0fa1f03d64ef2f4f70177834504f849664100250bdf991680eba3b01d4e)
1088
+ check_type(argname="argument email", value=email, expected_type=type_hints["email"])
1089
+ check_type(argname="argument name", value=name, expected_type=type_hints["name"])
1090
+ self._values: typing.Dict[builtins.str, typing.Any] = {}
1091
+ if email is not None:
1092
+ self._values["email"] = email
1093
+ if name is not None:
1094
+ self._values["name"] = name
1095
+
1096
+ @builtins.property
1097
+ def email(self) -> typing.Optional[builtins.str]:
1098
+ '''
1099
+ :stability: experimental
1100
+ :schema: projectAuthor#email
1101
+ '''
1102
+ result = self._values.get("email")
1103
+ return typing.cast(typing.Optional[builtins.str], result)
1104
+
1105
+ @builtins.property
1106
+ def name(self) -> typing.Optional[builtins.str]:
1107
+ '''
1108
+ :stability: experimental
1109
+ :schema: projectAuthor#name
1110
+ '''
1111
+ result = self._values.get("name")
1112
+ return typing.cast(typing.Optional[builtins.str], result)
1113
+
1114
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
1115
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
1116
+
1117
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
1118
+ return not (rhs == self)
1119
+
1120
+ def __repr__(self) -> str:
1121
+ return "ProjectAuthor(%s)" % ", ".join(
1122
+ k + "=" + repr(v) for k, v in self._values.items()
1123
+ )
1124
+
1125
+
1126
+ class Projenrc(
1127
+ _ProjenrcFile_50432c7e,
1128
+ metaclass=jsii.JSIIMeta,
1129
+ jsii_type="projen.python.Projenrc",
1130
+ ):
1131
+ '''(experimental) Allows writing projenrc files in python.
1132
+
1133
+ This will install ``projen`` as a Python dependency and will add a
1134
+ ``synth`` task which will run ``.projenrc.py``.
1135
+
1136
+ :stability: experimental
1137
+ '''
1138
+
1139
+ def __init__(
1140
+ self,
1141
+ project: _Project_57d89203,
1142
+ *,
1143
+ filename: typing.Optional[builtins.str] = None,
1144
+ projen_version: typing.Optional[builtins.str] = None,
1145
+ python_exec: typing.Optional[builtins.str] = None,
1146
+ ) -> None:
1147
+ '''
1148
+ :param project: -
1149
+ :param filename: (experimental) The name of the projenrc file. Default: ".projenrc.py"
1150
+ :param projen_version: (experimental) The projen version to use. Default: - current version
1151
+ :param python_exec: (experimental) Path to the python executable to use. Default: "python"
1152
+
1153
+ :stability: experimental
1154
+ '''
1155
+ if __debug__:
1156
+ type_hints = typing.get_type_hints(_typecheckingstub__dd796c2ffac4ce790fd379f22162cb352a7e6e5fcca10c21249e16c756967555)
1157
+ check_type(argname="argument project", value=project, expected_type=type_hints["project"])
1158
+ options = ProjenrcOptions(
1159
+ filename=filename, projen_version=projen_version, python_exec=python_exec
1160
+ )
1161
+
1162
+ jsii.create(self.__class__, self, [project, options])
1163
+
1164
+ @builtins.property
1165
+ @jsii.member(jsii_name="filePath")
1166
+ def file_path(self) -> builtins.str:
1167
+ '''(experimental) The name of the projenrc file.
1168
+
1169
+ :stability: experimental
1170
+ '''
1171
+ return typing.cast(builtins.str, jsii.get(self, "filePath"))
1172
+
1173
+ @builtins.property
1174
+ @jsii.member(jsii_name="pythonExec")
1175
+ def python_exec(self) -> builtins.str:
1176
+ '''(experimental) Path to the python executable to use.
1177
+
1178
+ :stability: experimental
1179
+ '''
1180
+ return typing.cast(builtins.str, jsii.get(self, "pythonExec"))
1181
+
1182
+
1183
+ @jsii.data_type(
1184
+ jsii_type="projen.python.ProjenrcOptions",
1185
+ jsii_struct_bases=[],
1186
+ name_mapping={
1187
+ "filename": "filename",
1188
+ "projen_version": "projenVersion",
1189
+ "python_exec": "pythonExec",
1190
+ },
1191
+ )
1192
+ class ProjenrcOptions:
1193
+ def __init__(
1194
+ self,
1195
+ *,
1196
+ filename: typing.Optional[builtins.str] = None,
1197
+ projen_version: typing.Optional[builtins.str] = None,
1198
+ python_exec: typing.Optional[builtins.str] = None,
1199
+ ) -> None:
1200
+ '''(experimental) Options for ``Projenrc``.
1201
+
1202
+ :param filename: (experimental) The name of the projenrc file. Default: ".projenrc.py"
1203
+ :param projen_version: (experimental) The projen version to use. Default: - current version
1204
+ :param python_exec: (experimental) Path to the python executable to use. Default: "python"
1205
+
1206
+ :stability: experimental
1207
+ '''
1208
+ if __debug__:
1209
+ type_hints = typing.get_type_hints(_typecheckingstub__7b016d0638a2d569458bc60c6c0631e67606ffba250b97da0a8bb994346743eb)
1210
+ check_type(argname="argument filename", value=filename, expected_type=type_hints["filename"])
1211
+ check_type(argname="argument projen_version", value=projen_version, expected_type=type_hints["projen_version"])
1212
+ check_type(argname="argument python_exec", value=python_exec, expected_type=type_hints["python_exec"])
1213
+ self._values: typing.Dict[builtins.str, typing.Any] = {}
1214
+ if filename is not None:
1215
+ self._values["filename"] = filename
1216
+ if projen_version is not None:
1217
+ self._values["projen_version"] = projen_version
1218
+ if python_exec is not None:
1219
+ self._values["python_exec"] = python_exec
1220
+
1221
+ @builtins.property
1222
+ def filename(self) -> typing.Optional[builtins.str]:
1223
+ '''(experimental) The name of the projenrc file.
1224
+
1225
+ :default: ".projenrc.py"
1226
+
1227
+ :stability: experimental
1228
+ '''
1229
+ result = self._values.get("filename")
1230
+ return typing.cast(typing.Optional[builtins.str], result)
1231
+
1232
+ @builtins.property
1233
+ def projen_version(self) -> typing.Optional[builtins.str]:
1234
+ '''(experimental) The projen version to use.
1235
+
1236
+ :default: - current version
1237
+
1238
+ :stability: experimental
1239
+ '''
1240
+ result = self._values.get("projen_version")
1241
+ return typing.cast(typing.Optional[builtins.str], result)
1242
+
1243
+ @builtins.property
1244
+ def python_exec(self) -> typing.Optional[builtins.str]:
1245
+ '''(experimental) Path to the python executable to use.
1246
+
1247
+ :default: "python"
1248
+
1249
+ :stability: experimental
1250
+ '''
1251
+ result = self._values.get("python_exec")
1252
+ return typing.cast(typing.Optional[builtins.str], result)
1253
+
1254
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
1255
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
1256
+
1257
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
1258
+ return not (rhs == self)
1259
+
1260
+ def __repr__(self) -> str:
1261
+ return "ProjenrcOptions(%s)" % ", ".join(
1262
+ k + "=" + repr(v) for k, v in self._values.items()
1263
+ )
1264
+
1265
+
1266
+ @jsii.data_type(
1267
+ jsii_type="projen.python.PyprojectToml",
1268
+ jsii_struct_bases=[],
1269
+ name_mapping={
1270
+ "build_system": "buildSystem",
1271
+ "dependency_groups": "dependencyGroups",
1272
+ "project": "project",
1273
+ "tool": "tool",
1274
+ },
1275
+ )
1276
+ class PyprojectToml:
1277
+ def __init__(
1278
+ self,
1279
+ *,
1280
+ build_system: typing.Optional[typing.Union[BuildSystem, typing.Dict[builtins.str, typing.Any]]] = None,
1281
+ dependency_groups: typing.Optional[typing.Union["PyprojectTomlDependencyGroups", typing.Dict[builtins.str, typing.Any]]] = None,
1282
+ project: typing.Optional[typing.Union["PyprojectTomlProject", typing.Dict[builtins.str, typing.Any]]] = None,
1283
+ tool: typing.Optional[typing.Union["PyprojectTomlTool", typing.Dict[builtins.str, typing.Any]]] = None,
1284
+ ) -> None:
1285
+ '''
1286
+ :param build_system:
1287
+ :param dependency_groups: (experimental) Named groups of dependencies, similar to ``requirements.txt`` files, which launchers, IDEs, and other tools can find and identify by name. Each item in ``[dependency-groups]`` is defined as mapping of group name to list of `dependency specifiers <https://packaging.python.org/en/latest/specifications/dependency-specifiers/>`_.
1288
+ :param project: (experimental) There are two kinds of metadata: *static* and *dynamic*. - Static metadata is listed in the ``[project]`` table directly and cannot be specified or changed by a tool. - Dynamic metadata key names are listed inside the ``dynamic`` key and represents metadata that a tool will later provide.
1289
+ :param tool: (experimental) Every tool that is used by the project can have users specify configuration data as long as they use a sub-table within ``[tool]``. Generally a project can use the subtable ``tool.$NAME`` if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI.
1290
+
1291
+ :stability: experimental
1292
+ :schema: PyprojectToml
1293
+ '''
1294
+ if isinstance(build_system, dict):
1295
+ build_system = BuildSystem(**build_system)
1296
+ if isinstance(dependency_groups, dict):
1297
+ dependency_groups = PyprojectTomlDependencyGroups(**dependency_groups)
1298
+ if isinstance(project, dict):
1299
+ project = PyprojectTomlProject(**project)
1300
+ if isinstance(tool, dict):
1301
+ tool = PyprojectTomlTool(**tool)
1302
+ if __debug__:
1303
+ type_hints = typing.get_type_hints(_typecheckingstub__e1fc10fe84bb8f10fcd95137adbc465ef44fa0a114d64da3b25bdc76d9324fe3)
1304
+ check_type(argname="argument build_system", value=build_system, expected_type=type_hints["build_system"])
1305
+ check_type(argname="argument dependency_groups", value=dependency_groups, expected_type=type_hints["dependency_groups"])
1306
+ check_type(argname="argument project", value=project, expected_type=type_hints["project"])
1307
+ check_type(argname="argument tool", value=tool, expected_type=type_hints["tool"])
1308
+ self._values: typing.Dict[builtins.str, typing.Any] = {}
1309
+ if build_system is not None:
1310
+ self._values["build_system"] = build_system
1311
+ if dependency_groups is not None:
1312
+ self._values["dependency_groups"] = dependency_groups
1313
+ if project is not None:
1314
+ self._values["project"] = project
1315
+ if tool is not None:
1316
+ self._values["tool"] = tool
1317
+
1318
+ @builtins.property
1319
+ def build_system(self) -> typing.Optional[BuildSystem]:
1320
+ '''
1321
+ :stability: experimental
1322
+ :schema: PyprojectToml#build-system
1323
+ '''
1324
+ result = self._values.get("build_system")
1325
+ return typing.cast(typing.Optional[BuildSystem], result)
1326
+
1327
+ @builtins.property
1328
+ def dependency_groups(self) -> typing.Optional["PyprojectTomlDependencyGroups"]:
1329
+ '''(experimental) Named groups of dependencies, similar to ``requirements.txt`` files, which launchers, IDEs, and other tools can find and identify by name. Each item in ``[dependency-groups]`` is defined as mapping of group name to list of `dependency specifiers <https://packaging.python.org/en/latest/specifications/dependency-specifiers/>`_.
1330
+
1331
+ :stability: experimental
1332
+ :schema: PyprojectToml#dependency-groups
1333
+ '''
1334
+ result = self._values.get("dependency_groups")
1335
+ return typing.cast(typing.Optional["PyprojectTomlDependencyGroups"], result)
1336
+
1337
+ @builtins.property
1338
+ def project(self) -> typing.Optional["PyprojectTomlProject"]:
1339
+ '''(experimental) There are two kinds of metadata: *static* and *dynamic*.
1340
+
1341
+ - Static metadata is listed in the ``[project]`` table directly and cannot be specified or changed by a tool.
1342
+ - Dynamic metadata key names are listed inside the ``dynamic`` key and represents metadata that a tool will later provide.
1343
+
1344
+ :stability: experimental
1345
+ :schema: PyprojectToml#project
1346
+ '''
1347
+ result = self._values.get("project")
1348
+ return typing.cast(typing.Optional["PyprojectTomlProject"], result)
1349
+
1350
+ @builtins.property
1351
+ def tool(self) -> typing.Optional["PyprojectTomlTool"]:
1352
+ '''(experimental) Every tool that is used by the project can have users specify configuration data as long as they use a sub-table within ``[tool]``.
1353
+
1354
+ Generally a project can use the subtable ``tool.$NAME`` if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI.
1355
+
1356
+ :stability: experimental
1357
+ :schema: PyprojectToml#tool
1358
+ '''
1359
+ result = self._values.get("tool")
1360
+ return typing.cast(typing.Optional["PyprojectTomlTool"], result)
1361
+
1362
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
1363
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
1364
+
1365
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
1366
+ return not (rhs == self)
1367
+
1368
+ def __repr__(self) -> str:
1369
+ return "PyprojectToml(%s)" % ", ".join(
1370
+ k + "=" + repr(v) for k, v in self._values.items()
1371
+ )
1372
+
1373
+
1374
+ @jsii.data_type(
1375
+ jsii_type="projen.python.PyprojectTomlDependencyGroups",
1376
+ jsii_struct_bases=[],
1377
+ name_mapping={"dev": "dev"},
1378
+ )
1379
+ class PyprojectTomlDependencyGroups:
1380
+ def __init__(
1381
+ self,
1382
+ *,
1383
+ dev: typing.Optional[typing.Sequence[typing.Any]] = None,
1384
+ ) -> None:
1385
+ '''(experimental) Named groups of dependencies, similar to ``requirements.txt`` files, which launchers, IDEs, and other tools can find and identify by name. Each item in ``[dependency-groups]`` is defined as mapping of group name to list of `dependency specifiers <https://packaging.python.org/en/latest/specifications/dependency-specifiers/>`_.
1386
+
1387
+ :param dev:
1388
+
1389
+ :stability: experimental
1390
+ :schema: PyprojectTomlDependencyGroups
1391
+ '''
1392
+ if __debug__:
1393
+ type_hints = typing.get_type_hints(_typecheckingstub__3172b8764f200359be57f771adc03f41306604c3a8551c94b129802a9f212c87)
1394
+ check_type(argname="argument dev", value=dev, expected_type=type_hints["dev"])
1395
+ self._values: typing.Dict[builtins.str, typing.Any] = {}
1396
+ if dev is not None:
1397
+ self._values["dev"] = dev
1398
+
1399
+ @builtins.property
1400
+ def dev(self) -> typing.Optional[typing.List[typing.Any]]:
1401
+ '''
1402
+ :stability: experimental
1403
+ :schema: PyprojectTomlDependencyGroups#dev
1404
+ '''
1405
+ result = self._values.get("dev")
1406
+ return typing.cast(typing.Optional[typing.List[typing.Any]], result)
1407
+
1408
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
1409
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
1410
+
1411
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
1412
+ return not (rhs == self)
1413
+
1414
+ def __repr__(self) -> str:
1415
+ return "PyprojectTomlDependencyGroups(%s)" % ", ".join(
1416
+ k + "=" + repr(v) for k, v in self._values.items()
1417
+ )
1418
+
1419
+
1420
+ class PyprojectTomlFile(
1421
+ _TomlFile_dab3b22f,
1422
+ metaclass=jsii.JSIIMeta,
1423
+ jsii_type="projen.python.PyprojectTomlFile",
1424
+ ):
1425
+ '''(experimental) Represents configuration of a pyproject.toml file.
1426
+
1427
+ :see: https://packaging.python.org/en/latest/guides/writing-pyproject-toml/
1428
+ :stability: experimental
1429
+ '''
1430
+
1431
+ def __init__(
1432
+ self,
1433
+ scope: _constructs_77d1e7e8.IConstruct,
1434
+ *,
1435
+ build_system: typing.Optional[typing.Union[BuildSystem, typing.Dict[builtins.str, typing.Any]]] = None,
1436
+ dependency_groups: typing.Optional[typing.Union[PyprojectTomlDependencyGroups, typing.Dict[builtins.str, typing.Any]]] = None,
1437
+ project: typing.Optional[typing.Union["PyprojectTomlProject", typing.Dict[builtins.str, typing.Any]]] = None,
1438
+ tool: typing.Optional[typing.Union["PyprojectTomlTool", typing.Dict[builtins.str, typing.Any]]] = None,
1439
+ ) -> None:
1440
+ '''
1441
+ :param scope: -
1442
+ :param build_system:
1443
+ :param dependency_groups: (experimental) Named groups of dependencies, similar to ``requirements.txt`` files, which launchers, IDEs, and other tools can find and identify by name. Each item in ``[dependency-groups]`` is defined as mapping of group name to list of `dependency specifiers <https://packaging.python.org/en/latest/specifications/dependency-specifiers/>`_.
1444
+ :param project: (experimental) There are two kinds of metadata: *static* and *dynamic*. - Static metadata is listed in the ``[project]`` table directly and cannot be specified or changed by a tool. - Dynamic metadata key names are listed inside the ``dynamic`` key and represents metadata that a tool will later provide.
1445
+ :param tool: (experimental) Every tool that is used by the project can have users specify configuration data as long as they use a sub-table within ``[tool]``. Generally a project can use the subtable ``tool.$NAME`` if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI.
1446
+
1447
+ :stability: experimental
1448
+ '''
1449
+ if __debug__:
1450
+ type_hints = typing.get_type_hints(_typecheckingstub__d9e7cb471169a85cb7809c67deb7b7e20dde1ce20a6a49f8357e0726c13b0040)
1451
+ check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
1452
+ config = PyprojectToml(
1453
+ build_system=build_system,
1454
+ dependency_groups=dependency_groups,
1455
+ project=project,
1456
+ tool=tool,
1457
+ )
1458
+
1459
+ jsii.create(self.__class__, self, [scope, config])
1460
+
1461
+ @jsii.member(jsii_name="synthesizeContent")
1462
+ def _synthesize_content(
1463
+ self,
1464
+ resolver: _IResolver_0b7d1958,
1465
+ ) -> typing.Optional[builtins.str]:
1466
+ '''(experimental) Implemented by derived classes and returns the contents of the file to emit.
1467
+
1468
+ :param resolver: -
1469
+
1470
+ :stability: experimental
1471
+ '''
1472
+ if __debug__:
1473
+ type_hints = typing.get_type_hints(_typecheckingstub__8c653bb340110f30f664421242162e21f98489f495f8991c5180052f98429065)
1474
+ check_type(argname="argument resolver", value=resolver, expected_type=type_hints["resolver"])
1475
+ return typing.cast(typing.Optional[builtins.str], jsii.invoke(self, "synthesizeContent", [resolver]))
1476
+
1477
+
1478
+ @jsii.data_type(
1479
+ jsii_type="projen.python.PyprojectTomlProject",
1480
+ jsii_struct_bases=[],
1481
+ name_mapping={
1482
+ "name": "name",
1483
+ "authors": "authors",
1484
+ "classifiers": "classifiers",
1485
+ "dependencies": "dependencies",
1486
+ "description": "description",
1487
+ "dynamic": "dynamic",
1488
+ "entry_points": "entryPoints",
1489
+ "gui_scripts": "guiScripts",
1490
+ "import_names": "importNames",
1491
+ "import_namespaces": "importNamespaces",
1492
+ "keywords": "keywords",
1493
+ "license": "license",
1494
+ "license_files": "licenseFiles",
1495
+ "maintainers": "maintainers",
1496
+ "optional_dependencies": "optionalDependencies",
1497
+ "readme": "readme",
1498
+ "requires_python": "requiresPython",
1499
+ "scripts": "scripts",
1500
+ "urls": "urls",
1501
+ "version": "version",
1502
+ },
1503
+ )
1504
+ class PyprojectTomlProject:
1505
+ def __init__(
1506
+ self,
1507
+ *,
1508
+ name: builtins.str,
1509
+ authors: typing.Optional[typing.Sequence[typing.Union[ProjectAuthor, typing.Dict[builtins.str, typing.Any]]]] = None,
1510
+ classifiers: typing.Optional[typing.Sequence[builtins.str]] = None,
1511
+ dependencies: typing.Optional[typing.Sequence[builtins.str]] = None,
1512
+ description: typing.Optional[builtins.str] = None,
1513
+ dynamic: typing.Optional[typing.Sequence["PyprojectTomlProjectDynamic"]] = None,
1514
+ entry_points: typing.Any = None,
1515
+ gui_scripts: typing.Optional[typing.Mapping[builtins.str, builtins.str]] = None,
1516
+ import_names: typing.Optional[typing.Sequence[builtins.str]] = None,
1517
+ import_namespaces: typing.Optional[typing.Sequence[builtins.str]] = None,
1518
+ keywords: typing.Optional[typing.Sequence[builtins.str]] = None,
1519
+ license: typing.Any = None,
1520
+ license_files: typing.Optional[typing.Sequence[builtins.str]] = None,
1521
+ maintainers: typing.Optional[typing.Sequence[typing.Union[ProjectAuthor, typing.Dict[builtins.str, typing.Any]]]] = None,
1522
+ optional_dependencies: typing.Any = None,
1523
+ readme: typing.Any = None,
1524
+ requires_python: typing.Optional[builtins.str] = None,
1525
+ scripts: typing.Optional[typing.Mapping[builtins.str, builtins.str]] = None,
1526
+ urls: typing.Optional[typing.Mapping[builtins.str, builtins.str]] = None,
1527
+ version: typing.Optional[builtins.str] = None,
1528
+ ) -> None:
1529
+ '''(experimental) There are two kinds of metadata: *static* and *dynamic*.
1530
+
1531
+ - Static metadata is listed in the ``[project]`` table directly and cannot be specified or changed by a tool.
1532
+ - Dynamic metadata key names are listed inside the ``dynamic`` key and represents metadata that a tool will later provide.
1533
+
1534
+ :param name: (experimental) Valid name consists only of ASCII letters and numbers, period, underscore and hyphen. It must start and end with a letter or number.
1535
+ :param authors: (experimental) People or organizations considered as 'authors' of the project. Each author is a table with ``name`` key, ``email`` key, or both.
1536
+ :param classifiers: (experimental) List of `Trove classifiers <https://pypi.org/classifiers/>`_ that describe the project. PyPI use the classifiers to categorize projects.
1537
+ :param dependencies: (experimental) An array of `dependency specifier <https://packaging.python.org/en/latest/specifications/dependency-specifiers/>`_ strings, each representing a mandatory dependent package of the project.
1538
+ :param description: (experimental) Summary description of the project in one line. Tools may not accept multiple lines.
1539
+ :param dynamic: (experimental) Specifies which keys are intentionally unspecified under ``[project]`` table so build backend can/will provide such metadata dynamically. Each key must be listed only once. It is an error to both list a key in ``dynamic`` and use the key directly in ``[project]``. One of the most common usage is ``version``, which allows build backend to retrieve project version from source code or version control system instead of hardcoding it in ``pyproject.toml``.
1540
+ :param entry_points: (experimental) Extra `entry point groups <https://packaging.python.org/en/latest/specifications/entry-points/>`_ that allow applications to load plugins. For example, Pygments (a syntax highlighting tool) can use additional styles from separately installed packages through ``[project.entry-points."pygments.styles"]``. Each key is the name of the entry-point group, and each value is a table of entry points.
1541
+ :param gui_scripts: (experimental) Table of `entry points <https://packaging.python.org/en/latest/specifications/entry-points/>`_ that allows package installers to create a GUI wrapper for. Each key is the name of the script to be created, and each value is the function or object to all, in form of either ``importable.module`` or ``importable.module:object.attr``. Windows platform treats ``gui_scripts`` specially in that they are wrapped in a GUI executable, so they can be started without a console, but cannot use standard streams unless application code redirects them.
1542
+ :param import_names: (experimental) An array of strings specifying the import names that the project exclusively provides when installed.
1543
+ :param import_namespaces: (experimental) An array of strings specifying the import names that the project provides when installed, but not exclusively.
1544
+ :param keywords: (experimental) List of keywords or tags that describe the project. They could be used by search engines to categorize the project.
1545
+ :param license: (experimental) For now it is a table with either: - ``file`` key specifying a relative path to a license file, or - ``text`` key containing full license content. Newer tool may accept a single `SPDX license expression <https://spdx.github.io/spdx-spec/v2.2.2/SPDX-license-expressions/>`_ string instead of a table.
1546
+ :param license_files: (experimental) Relative paths or globs to paths of license files. Can be an empty list.
1547
+ :param maintainers: (experimental) People or organizations considered as 'maintainers' of the project. Each maintainer is a table with ``name`` key, ``email`` key, or both.
1548
+ :param optional_dependencies: (experimental) Each entry is a key/value pair, with the key specifying `extra feature name <https://packaging.python.org/en/latest/specifications/core-metadata/#provides-extra-multiple-use>`_ (such as ``socks`` in ``requests[socks]``), and value is an array of `dependency specifier <https://packaging.python.org/en/latest/specifications/dependency-specifiers/>`_ strings.
1549
+ :param readme: (experimental) Value can be a relative path to text / markdown (``.md`` suffix) / reStructuredText (``.rst`` suffix) readme file, or a table with either: - ``file`` key containing path of aforementioned readme file, or - ``text`` key containing the full readme text embedded inside ``pyproject.toml``.
1550
+ :param requires_python: (experimental) Specifies the Python version(s) that the distribution is compatible with. Must be in the format specified in `Version specifiers <https://packaging.python.org/en/latest/specifications/version-specifiers/>`_.
1551
+ :param scripts: (experimental) Table of `entry points <https://packaging.python.org/en/latest/specifications/entry-points/>`_ that allows package installers to create a command-line wrapper for. Each key is the name of the script to be created, and each value is the function or object to all, in form of either ``importable.module`` or ``importable.module:object.attr``. Windows platform treats ``console_scripts`` specially in that they are wrapped in a console executable, so they are attached to a console and can use ``sys.stdin``, ``sys.stdout`` and ``sys.stderr`` for I/O.
1552
+ :param urls: (experimental) Table consisting one or multiple ``label: URL`` pairs. Common indexes like PyPI uses `well-known Project URLs <https://packaging.python.org/en/latest/specifications/well-known-project-urls/#well-known-labels>`_ when presenting project pages.
1553
+ :param version: (experimental) Version of the project, as defined in the `Version specifier specification <https://packaging.python.org/en/latest/specifications/version-specifiers/>`_, and preferably `already normalized <https://packaging.python.org/en/latest/specifications/version-specifiers/#normalization>`_.
1554
+
1555
+ :stability: experimental
1556
+ :schema: PyprojectTomlProject
1557
+ '''
1558
+ if __debug__:
1559
+ type_hints = typing.get_type_hints(_typecheckingstub__b8e342a1a2af5016dbe0f8461f2a5c512da049f10c5dfb936ea942878407c985)
1560
+ check_type(argname="argument name", value=name, expected_type=type_hints["name"])
1561
+ check_type(argname="argument authors", value=authors, expected_type=type_hints["authors"])
1562
+ check_type(argname="argument classifiers", value=classifiers, expected_type=type_hints["classifiers"])
1563
+ check_type(argname="argument dependencies", value=dependencies, expected_type=type_hints["dependencies"])
1564
+ check_type(argname="argument description", value=description, expected_type=type_hints["description"])
1565
+ check_type(argname="argument dynamic", value=dynamic, expected_type=type_hints["dynamic"])
1566
+ check_type(argname="argument entry_points", value=entry_points, expected_type=type_hints["entry_points"])
1567
+ check_type(argname="argument gui_scripts", value=gui_scripts, expected_type=type_hints["gui_scripts"])
1568
+ check_type(argname="argument import_names", value=import_names, expected_type=type_hints["import_names"])
1569
+ check_type(argname="argument import_namespaces", value=import_namespaces, expected_type=type_hints["import_namespaces"])
1570
+ check_type(argname="argument keywords", value=keywords, expected_type=type_hints["keywords"])
1571
+ check_type(argname="argument license", value=license, expected_type=type_hints["license"])
1572
+ check_type(argname="argument license_files", value=license_files, expected_type=type_hints["license_files"])
1573
+ check_type(argname="argument maintainers", value=maintainers, expected_type=type_hints["maintainers"])
1574
+ check_type(argname="argument optional_dependencies", value=optional_dependencies, expected_type=type_hints["optional_dependencies"])
1575
+ check_type(argname="argument readme", value=readme, expected_type=type_hints["readme"])
1576
+ check_type(argname="argument requires_python", value=requires_python, expected_type=type_hints["requires_python"])
1577
+ check_type(argname="argument scripts", value=scripts, expected_type=type_hints["scripts"])
1578
+ check_type(argname="argument urls", value=urls, expected_type=type_hints["urls"])
1579
+ check_type(argname="argument version", value=version, expected_type=type_hints["version"])
1580
+ self._values: typing.Dict[builtins.str, typing.Any] = {
1581
+ "name": name,
1582
+ }
1583
+ if authors is not None:
1584
+ self._values["authors"] = authors
1585
+ if classifiers is not None:
1586
+ self._values["classifiers"] = classifiers
1587
+ if dependencies is not None:
1588
+ self._values["dependencies"] = dependencies
1589
+ if description is not None:
1590
+ self._values["description"] = description
1591
+ if dynamic is not None:
1592
+ self._values["dynamic"] = dynamic
1593
+ if entry_points is not None:
1594
+ self._values["entry_points"] = entry_points
1595
+ if gui_scripts is not None:
1596
+ self._values["gui_scripts"] = gui_scripts
1597
+ if import_names is not None:
1598
+ self._values["import_names"] = import_names
1599
+ if import_namespaces is not None:
1600
+ self._values["import_namespaces"] = import_namespaces
1601
+ if keywords is not None:
1602
+ self._values["keywords"] = keywords
1603
+ if license is not None:
1604
+ self._values["license"] = license
1605
+ if license_files is not None:
1606
+ self._values["license_files"] = license_files
1607
+ if maintainers is not None:
1608
+ self._values["maintainers"] = maintainers
1609
+ if optional_dependencies is not None:
1610
+ self._values["optional_dependencies"] = optional_dependencies
1611
+ if readme is not None:
1612
+ self._values["readme"] = readme
1613
+ if requires_python is not None:
1614
+ self._values["requires_python"] = requires_python
1615
+ if scripts is not None:
1616
+ self._values["scripts"] = scripts
1617
+ if urls is not None:
1618
+ self._values["urls"] = urls
1619
+ if version is not None:
1620
+ self._values["version"] = version
1621
+
1622
+ @builtins.property
1623
+ def name(self) -> builtins.str:
1624
+ '''(experimental) Valid name consists only of ASCII letters and numbers, period, underscore and hyphen.
1625
+
1626
+ It must start and end with a letter or number.
1627
+
1628
+ :stability: experimental
1629
+ :schema: PyprojectTomlProject#name
1630
+ '''
1631
+ result = self._values.get("name")
1632
+ assert result is not None, "Required property 'name' is missing"
1633
+ return typing.cast(builtins.str, result)
1634
+
1635
+ @builtins.property
1636
+ def authors(self) -> typing.Optional[typing.List[ProjectAuthor]]:
1637
+ '''(experimental) People or organizations considered as 'authors' of the project.
1638
+
1639
+ Each author is a table with ``name`` key, ``email`` key, or both.
1640
+
1641
+ :stability: experimental
1642
+ :schema: PyprojectTomlProject#authors
1643
+ '''
1644
+ result = self._values.get("authors")
1645
+ return typing.cast(typing.Optional[typing.List[ProjectAuthor]], result)
1646
+
1647
+ @builtins.property
1648
+ def classifiers(self) -> typing.Optional[typing.List[builtins.str]]:
1649
+ '''(experimental) List of `Trove classifiers <https://pypi.org/classifiers/>`_ that describe the project. PyPI use the classifiers to categorize projects.
1650
+
1651
+ :stability: experimental
1652
+ :schema: PyprojectTomlProject#classifiers
1653
+ '''
1654
+ result = self._values.get("classifiers")
1655
+ return typing.cast(typing.Optional[typing.List[builtins.str]], result)
1656
+
1657
+ @builtins.property
1658
+ def dependencies(self) -> typing.Optional[typing.List[builtins.str]]:
1659
+ '''(experimental) An array of `dependency specifier <https://packaging.python.org/en/latest/specifications/dependency-specifiers/>`_ strings, each representing a mandatory dependent package of the project.
1660
+
1661
+ :stability: experimental
1662
+ :schema: PyprojectTomlProject#dependencies
1663
+ '''
1664
+ result = self._values.get("dependencies")
1665
+ return typing.cast(typing.Optional[typing.List[builtins.str]], result)
1666
+
1667
+ @builtins.property
1668
+ def description(self) -> typing.Optional[builtins.str]:
1669
+ '''(experimental) Summary description of the project in one line.
1670
+
1671
+ Tools may not accept multiple lines.
1672
+
1673
+ :stability: experimental
1674
+ :schema: PyprojectTomlProject#description
1675
+ '''
1676
+ result = self._values.get("description")
1677
+ return typing.cast(typing.Optional[builtins.str], result)
1678
+
1679
+ @builtins.property
1680
+ def dynamic(self) -> typing.Optional[typing.List["PyprojectTomlProjectDynamic"]]:
1681
+ '''(experimental) Specifies which keys are intentionally unspecified under ``[project]`` table so build backend can/will provide such metadata dynamically.
1682
+
1683
+ Each key must be listed only once. It is an error to both list a key in ``dynamic`` and use the key directly in ``[project]``.
1684
+ One of the most common usage is ``version``, which allows build backend to retrieve project version from source code or version control system instead of hardcoding it in ``pyproject.toml``.
1685
+
1686
+ :stability: experimental
1687
+ :schema: PyprojectTomlProject#dynamic
1688
+ '''
1689
+ result = self._values.get("dynamic")
1690
+ return typing.cast(typing.Optional[typing.List["PyprojectTomlProjectDynamic"]], result)
1691
+
1692
+ @builtins.property
1693
+ def entry_points(self) -> typing.Any:
1694
+ '''(experimental) Extra `entry point groups <https://packaging.python.org/en/latest/specifications/entry-points/>`_ that allow applications to load plugins. For example, Pygments (a syntax highlighting tool) can use additional styles from separately installed packages through ``[project.entry-points."pygments.styles"]``. Each key is the name of the entry-point group, and each value is a table of entry points.
1695
+
1696
+ :stability: experimental
1697
+ :schema: PyprojectTomlProject#entry-points
1698
+ '''
1699
+ result = self._values.get("entry_points")
1700
+ return typing.cast(typing.Any, result)
1701
+
1702
+ @builtins.property
1703
+ def gui_scripts(
1704
+ self,
1705
+ ) -> typing.Optional[typing.Mapping[builtins.str, builtins.str]]:
1706
+ '''(experimental) Table of `entry points <https://packaging.python.org/en/latest/specifications/entry-points/>`_ that allows package installers to create a GUI wrapper for. Each key is the name of the script to be created, and each value is the function or object to all, in form of either ``importable.module`` or ``importable.module:object.attr``. Windows platform treats ``gui_scripts`` specially in that they are wrapped in a GUI executable, so they can be started without a console, but cannot use standard streams unless application code redirects them.
1707
+
1708
+ :stability: experimental
1709
+ :schema: PyprojectTomlProject#gui-scripts
1710
+ '''
1711
+ result = self._values.get("gui_scripts")
1712
+ return typing.cast(typing.Optional[typing.Mapping[builtins.str, builtins.str]], result)
1713
+
1714
+ @builtins.property
1715
+ def import_names(self) -> typing.Optional[typing.List[builtins.str]]:
1716
+ '''(experimental) An array of strings specifying the import names that the project exclusively provides when installed.
1717
+
1718
+ :stability: experimental
1719
+ :schema: PyprojectTomlProject#import-names
1720
+ '''
1721
+ result = self._values.get("import_names")
1722
+ return typing.cast(typing.Optional[typing.List[builtins.str]], result)
1723
+
1724
+ @builtins.property
1725
+ def import_namespaces(self) -> typing.Optional[typing.List[builtins.str]]:
1726
+ '''(experimental) An array of strings specifying the import names that the project provides when installed, but not exclusively.
1727
+
1728
+ :stability: experimental
1729
+ :schema: PyprojectTomlProject#import-namespaces
1730
+ '''
1731
+ result = self._values.get("import_namespaces")
1732
+ return typing.cast(typing.Optional[typing.List[builtins.str]], result)
1733
+
1734
+ @builtins.property
1735
+ def keywords(self) -> typing.Optional[typing.List[builtins.str]]:
1736
+ '''(experimental) List of keywords or tags that describe the project.
1737
+
1738
+ They could be used by search engines to categorize the project.
1739
+
1740
+ :stability: experimental
1741
+ :schema: PyprojectTomlProject#keywords
1742
+ '''
1743
+ result = self._values.get("keywords")
1744
+ return typing.cast(typing.Optional[typing.List[builtins.str]], result)
1745
+
1746
+ @builtins.property
1747
+ def license(self) -> typing.Any:
1748
+ '''(experimental) For now it is a table with either: - ``file`` key specifying a relative path to a license file, or - ``text`` key containing full license content.
1749
+
1750
+ Newer tool may accept a single `SPDX license expression <https://spdx.github.io/spdx-spec/v2.2.2/SPDX-license-expressions/>`_ string instead of a table.
1751
+
1752
+ :stability: experimental
1753
+ :schema: PyprojectTomlProject#license
1754
+ '''
1755
+ result = self._values.get("license")
1756
+ return typing.cast(typing.Any, result)
1757
+
1758
+ @builtins.property
1759
+ def license_files(self) -> typing.Optional[typing.List[builtins.str]]:
1760
+ '''(experimental) Relative paths or globs to paths of license files.
1761
+
1762
+ Can be an empty list.
1763
+
1764
+ :stability: experimental
1765
+ :schema: PyprojectTomlProject#license-files
1766
+ '''
1767
+ result = self._values.get("license_files")
1768
+ return typing.cast(typing.Optional[typing.List[builtins.str]], result)
1769
+
1770
+ @builtins.property
1771
+ def maintainers(self) -> typing.Optional[typing.List[ProjectAuthor]]:
1772
+ '''(experimental) People or organizations considered as 'maintainers' of the project.
1773
+
1774
+ Each maintainer is a table with ``name`` key, ``email`` key, or both.
1775
+
1776
+ :stability: experimental
1777
+ :schema: PyprojectTomlProject#maintainers
1778
+ '''
1779
+ result = self._values.get("maintainers")
1780
+ return typing.cast(typing.Optional[typing.List[ProjectAuthor]], result)
1781
+
1782
+ @builtins.property
1783
+ def optional_dependencies(self) -> typing.Any:
1784
+ '''(experimental) Each entry is a key/value pair, with the key specifying `extra feature name <https://packaging.python.org/en/latest/specifications/core-metadata/#provides-extra-multiple-use>`_ (such as ``socks`` in ``requests[socks]``), and value is an array of `dependency specifier <https://packaging.python.org/en/latest/specifications/dependency-specifiers/>`_ strings.
1785
+
1786
+ :stability: experimental
1787
+ :schema: PyprojectTomlProject#optional-dependencies
1788
+ '''
1789
+ result = self._values.get("optional_dependencies")
1790
+ return typing.cast(typing.Any, result)
1791
+
1792
+ @builtins.property
1793
+ def readme(self) -> typing.Any:
1794
+ '''(experimental) Value can be a relative path to text / markdown (``.md`` suffix) / reStructuredText (``.rst`` suffix) readme file, or a table with either: - ``file`` key containing path of aforementioned readme file, or - ``text`` key containing the full readme text embedded inside ``pyproject.toml``.
1795
+
1796
+ :stability: experimental
1797
+ :schema: PyprojectTomlProject#readme
1798
+ '''
1799
+ result = self._values.get("readme")
1800
+ return typing.cast(typing.Any, result)
1801
+
1802
+ @builtins.property
1803
+ def requires_python(self) -> typing.Optional[builtins.str]:
1804
+ '''(experimental) Specifies the Python version(s) that the distribution is compatible with.
1805
+
1806
+ Must be in the format specified in `Version specifiers <https://packaging.python.org/en/latest/specifications/version-specifiers/>`_.
1807
+
1808
+ :stability: experimental
1809
+ :schema: PyprojectTomlProject#requires-python
1810
+ '''
1811
+ result = self._values.get("requires_python")
1812
+ return typing.cast(typing.Optional[builtins.str], result)
1813
+
1814
+ @builtins.property
1815
+ def scripts(self) -> typing.Optional[typing.Mapping[builtins.str, builtins.str]]:
1816
+ '''(experimental) Table of `entry points <https://packaging.python.org/en/latest/specifications/entry-points/>`_ that allows package installers to create a command-line wrapper for. Each key is the name of the script to be created, and each value is the function or object to all, in form of either ``importable.module`` or ``importable.module:object.attr``. Windows platform treats ``console_scripts`` specially in that they are wrapped in a console executable, so they are attached to a console and can use ``sys.stdin``, ``sys.stdout`` and ``sys.stderr`` for I/O.
1817
+
1818
+ :stability: experimental
1819
+ :schema: PyprojectTomlProject#scripts
1820
+ '''
1821
+ result = self._values.get("scripts")
1822
+ return typing.cast(typing.Optional[typing.Mapping[builtins.str, builtins.str]], result)
1823
+
1824
+ @builtins.property
1825
+ def urls(self) -> typing.Optional[typing.Mapping[builtins.str, builtins.str]]:
1826
+ '''(experimental) Table consisting one or multiple ``label: URL`` pairs.
1827
+
1828
+ Common indexes like PyPI uses `well-known Project URLs <https://packaging.python.org/en/latest/specifications/well-known-project-urls/#well-known-labels>`_ when presenting project pages.
1829
+
1830
+ :stability: experimental
1831
+ :schema: PyprojectTomlProject#urls
1832
+ '''
1833
+ result = self._values.get("urls")
1834
+ return typing.cast(typing.Optional[typing.Mapping[builtins.str, builtins.str]], result)
1835
+
1836
+ @builtins.property
1837
+ def version(self) -> typing.Optional[builtins.str]:
1838
+ '''(experimental) Version of the project, as defined in the `Version specifier specification <https://packaging.python.org/en/latest/specifications/version-specifiers/>`_, and preferably `already normalized <https://packaging.python.org/en/latest/specifications/version-specifiers/#normalization>`_.
1839
+
1840
+ :stability: experimental
1841
+ :schema: PyprojectTomlProject#version
1842
+ '''
1843
+ result = self._values.get("version")
1844
+ return typing.cast(typing.Optional[builtins.str], result)
1845
+
1846
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
1847
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
1848
+
1849
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
1850
+ return not (rhs == self)
1851
+
1852
+ def __repr__(self) -> str:
1853
+ return "PyprojectTomlProject(%s)" % ", ".join(
1854
+ k + "=" + repr(v) for k, v in self._values.items()
1855
+ )
1856
+
1857
+
1858
+ @jsii.enum(jsii_type="projen.python.PyprojectTomlProjectDynamic")
1859
+ class PyprojectTomlProjectDynamic(enum.Enum):
1860
+ '''
1861
+ :stability: experimental
1862
+ :schema: PyprojectTomlProjectDynamic
1863
+ '''
1864
+
1865
+ VERSION = "VERSION"
1866
+ '''(experimental) version.
1867
+
1868
+ :stability: experimental
1869
+ '''
1870
+ DESCRIPTION = "DESCRIPTION"
1871
+ '''(experimental) description.
1872
+
1873
+ :stability: experimental
1874
+ '''
1875
+ README = "README"
1876
+ '''(experimental) readme.
1877
+
1878
+ :stability: experimental
1879
+ '''
1880
+ REQUIRES_HYPHEN_PYTHON = "REQUIRES_HYPHEN_PYTHON"
1881
+ '''(experimental) requires-python.
1882
+
1883
+ :stability: experimental
1884
+ '''
1885
+ LICENSE = "LICENSE"
1886
+ '''(experimental) license.
1887
+
1888
+ :stability: experimental
1889
+ '''
1890
+ LICENSE_HYPHEN_FILES = "LICENSE_HYPHEN_FILES"
1891
+ '''(experimental) license-files.
1892
+
1893
+ :stability: experimental
1894
+ '''
1895
+ AUTHORS = "AUTHORS"
1896
+ '''(experimental) authors.
1897
+
1898
+ :stability: experimental
1899
+ '''
1900
+ MAINTAINERS = "MAINTAINERS"
1901
+ '''(experimental) maintainers.
1902
+
1903
+ :stability: experimental
1904
+ '''
1905
+ KEYWORDS = "KEYWORDS"
1906
+ '''(experimental) keywords.
1907
+
1908
+ :stability: experimental
1909
+ '''
1910
+ CLASSIFIERS = "CLASSIFIERS"
1911
+ '''(experimental) classifiers.
1912
+
1913
+ :stability: experimental
1914
+ '''
1915
+ URLS = "URLS"
1916
+ '''(experimental) urls.
1917
+
1918
+ :stability: experimental
1919
+ '''
1920
+ SCRIPTS = "SCRIPTS"
1921
+ '''(experimental) scripts.
1922
+
1923
+ :stability: experimental
1924
+ '''
1925
+ GUI_HYPHEN_SCRIPTS = "GUI_HYPHEN_SCRIPTS"
1926
+ '''(experimental) gui-scripts.
1927
+
1928
+ :stability: experimental
1929
+ '''
1930
+ ENTRY_HYPHEN_POINTS = "ENTRY_HYPHEN_POINTS"
1931
+ '''(experimental) entry-points.
1932
+
1933
+ :stability: experimental
1934
+ '''
1935
+ DEPENDENCIES = "DEPENDENCIES"
1936
+ '''(experimental) dependencies.
1937
+
1938
+ :stability: experimental
1939
+ '''
1940
+ OPTIONAL_HYPHEN_DEPENDENCIES = "OPTIONAL_HYPHEN_DEPENDENCIES"
1941
+ '''(experimental) optional-dependencies.
1942
+
1943
+ :stability: experimental
1944
+ '''
1945
+ IMPORT_HYPHEN_NAMES = "IMPORT_HYPHEN_NAMES"
1946
+ '''(experimental) import-names.
1947
+
1948
+ :stability: experimental
1949
+ '''
1950
+ IMPORT_HYPHEN_NAMESPACES = "IMPORT_HYPHEN_NAMESPACES"
1951
+ '''(experimental) import-namespaces.
1952
+
1953
+ :stability: experimental
1954
+ '''
1955
+
1956
+
1957
+ @jsii.data_type(
1958
+ jsii_type="projen.python.PyprojectTomlTool",
1959
+ jsii_struct_bases=[],
1960
+ name_mapping={
1961
+ "black": "black",
1962
+ "cibuildwheel": "cibuildwheel",
1963
+ "hatch": "hatch",
1964
+ "maturin": "maturin",
1965
+ "mypy": "mypy",
1966
+ "pdm": "pdm",
1967
+ "poe": "poe",
1968
+ "poetry": "poetry",
1969
+ "pyright": "pyright",
1970
+ "pytest": "pytest",
1971
+ "repo_review": "repoReview",
1972
+ "ruff": "ruff",
1973
+ "scikit_build": "scikitBuild",
1974
+ "setuptools": "setuptools",
1975
+ "setuptools_scm": "setuptoolsScm",
1976
+ "taskipy": "taskipy",
1977
+ "tombi": "tombi",
1978
+ "tox": "tox",
1979
+ "ty": "ty",
1980
+ "uv": "uv",
1981
+ },
1982
+ )
1983
+ class PyprojectTomlTool:
1984
+ def __init__(
1985
+ self,
1986
+ *,
1987
+ black: typing.Any = None,
1988
+ cibuildwheel: typing.Any = None,
1989
+ hatch: typing.Any = None,
1990
+ maturin: typing.Any = None,
1991
+ mypy: typing.Any = None,
1992
+ pdm: typing.Any = None,
1993
+ poe: typing.Any = None,
1994
+ poetry: typing.Any = None,
1995
+ pyright: typing.Any = None,
1996
+ pytest: typing.Any = None,
1997
+ repo_review: typing.Any = None,
1998
+ ruff: typing.Any = None,
1999
+ scikit_build: typing.Any = None,
2000
+ setuptools: typing.Any = None,
2001
+ setuptools_scm: typing.Any = None,
2002
+ taskipy: typing.Any = None,
2003
+ tombi: typing.Any = None,
2004
+ tox: typing.Any = None,
2005
+ ty: typing.Any = None,
2006
+ uv: typing.Any = None,
2007
+ ) -> None:
2008
+ '''(experimental) Every tool that is used by the project can have users specify configuration data as long as they use a sub-table within ``[tool]``.
2009
+
2010
+ Generally a project can use the subtable ``tool.$NAME`` if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI.
2011
+
2012
+ :param black: (experimental) The uncompromising Python code formatter.
2013
+ :param cibuildwheel: (experimental) Build Python wheels for all platforms.
2014
+ :param hatch: (experimental) Modern, extensible Python project management.
2015
+ :param maturin: (experimental) Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages.
2016
+ :param mypy: (experimental) Optional static typing for Python.
2017
+ :param pdm: (experimental) A modern Python package manager with PEP 621 support.
2018
+ :param poe: (experimental) A task runner that works well with pyproject.toml files.
2019
+ :param poetry: (experimental) Python dependency management and packaging made easy.
2020
+ :param pyright: (experimental) Static type checker for Python.
2021
+ :param pytest: (experimental) Standardized automated testing of Python packages.
2022
+ :param repo_review: (experimental) Review a repository for best practices.
2023
+ :param ruff: (experimental) An extremely fast Python linter and formatter, written in Rust.
2024
+ :param scikit_build: (experimental) Improved build system generator for Python C/C++/Fortran extensions.
2025
+ :param setuptools: (experimental) Easily download, build, install, upgrade, and uninstall Python packages.
2026
+ :param setuptools_scm: (experimental) Manage Python package versions using SCM (e.g. Git).
2027
+ :param taskipy: (experimental) The complementary task runner for python.
2028
+ :param tombi: (experimental) Tombi is a toolkit for TOML; providing a formatter/linter and language server
2029
+ :param tox: (experimental) Standardized automated testing of Python packages.
2030
+ :param ty: (experimental) An extremely fast Python type checker, written in Rust.
2031
+ :param uv: (experimental) An extremely fast Python package installer and resolver, written in Rust.
2032
+
2033
+ :stability: experimental
2034
+ :schema: PyprojectTomlTool
2035
+ '''
2036
+ if __debug__:
2037
+ type_hints = typing.get_type_hints(_typecheckingstub__bc2ba765e25294b713eef60bd54f79fe7e8b12bdfb44298beec4d108cc84cf15)
2038
+ check_type(argname="argument black", value=black, expected_type=type_hints["black"])
2039
+ check_type(argname="argument cibuildwheel", value=cibuildwheel, expected_type=type_hints["cibuildwheel"])
2040
+ check_type(argname="argument hatch", value=hatch, expected_type=type_hints["hatch"])
2041
+ check_type(argname="argument maturin", value=maturin, expected_type=type_hints["maturin"])
2042
+ check_type(argname="argument mypy", value=mypy, expected_type=type_hints["mypy"])
2043
+ check_type(argname="argument pdm", value=pdm, expected_type=type_hints["pdm"])
2044
+ check_type(argname="argument poe", value=poe, expected_type=type_hints["poe"])
2045
+ check_type(argname="argument poetry", value=poetry, expected_type=type_hints["poetry"])
2046
+ check_type(argname="argument pyright", value=pyright, expected_type=type_hints["pyright"])
2047
+ check_type(argname="argument pytest", value=pytest, expected_type=type_hints["pytest"])
2048
+ check_type(argname="argument repo_review", value=repo_review, expected_type=type_hints["repo_review"])
2049
+ check_type(argname="argument ruff", value=ruff, expected_type=type_hints["ruff"])
2050
+ check_type(argname="argument scikit_build", value=scikit_build, expected_type=type_hints["scikit_build"])
2051
+ check_type(argname="argument setuptools", value=setuptools, expected_type=type_hints["setuptools"])
2052
+ check_type(argname="argument setuptools_scm", value=setuptools_scm, expected_type=type_hints["setuptools_scm"])
2053
+ check_type(argname="argument taskipy", value=taskipy, expected_type=type_hints["taskipy"])
2054
+ check_type(argname="argument tombi", value=tombi, expected_type=type_hints["tombi"])
2055
+ check_type(argname="argument tox", value=tox, expected_type=type_hints["tox"])
2056
+ check_type(argname="argument ty", value=ty, expected_type=type_hints["ty"])
2057
+ check_type(argname="argument uv", value=uv, expected_type=type_hints["uv"])
2058
+ self._values: typing.Dict[builtins.str, typing.Any] = {}
2059
+ if black is not None:
2060
+ self._values["black"] = black
2061
+ if cibuildwheel is not None:
2062
+ self._values["cibuildwheel"] = cibuildwheel
2063
+ if hatch is not None:
2064
+ self._values["hatch"] = hatch
2065
+ if maturin is not None:
2066
+ self._values["maturin"] = maturin
2067
+ if mypy is not None:
2068
+ self._values["mypy"] = mypy
2069
+ if pdm is not None:
2070
+ self._values["pdm"] = pdm
2071
+ if poe is not None:
2072
+ self._values["poe"] = poe
2073
+ if poetry is not None:
2074
+ self._values["poetry"] = poetry
2075
+ if pyright is not None:
2076
+ self._values["pyright"] = pyright
2077
+ if pytest is not None:
2078
+ self._values["pytest"] = pytest
2079
+ if repo_review is not None:
2080
+ self._values["repo_review"] = repo_review
2081
+ if ruff is not None:
2082
+ self._values["ruff"] = ruff
2083
+ if scikit_build is not None:
2084
+ self._values["scikit_build"] = scikit_build
2085
+ if setuptools is not None:
2086
+ self._values["setuptools"] = setuptools
2087
+ if setuptools_scm is not None:
2088
+ self._values["setuptools_scm"] = setuptools_scm
2089
+ if taskipy is not None:
2090
+ self._values["taskipy"] = taskipy
2091
+ if tombi is not None:
2092
+ self._values["tombi"] = tombi
2093
+ if tox is not None:
2094
+ self._values["tox"] = tox
2095
+ if ty is not None:
2096
+ self._values["ty"] = ty
2097
+ if uv is not None:
2098
+ self._values["uv"] = uv
2099
+
2100
+ @builtins.property
2101
+ def black(self) -> typing.Any:
2102
+ '''(experimental) The uncompromising Python code formatter.
802
2103
 
803
2104
  :stability: experimental
2105
+ :schema: PyprojectTomlTool#black
804
2106
  '''
805
- result = self._values.get("include")
806
- return typing.cast(typing.Optional[typing.List[builtins.str]], result)
2107
+ result = self._values.get("black")
2108
+ return typing.cast(typing.Any, result)
807
2109
 
808
2110
  @builtins.property
809
- def keywords(self) -> typing.Optional[typing.List[builtins.str]]:
810
- '''(experimental) A list of keywords (max: 5) that the package is related to.
2111
+ def cibuildwheel(self) -> typing.Any:
2112
+ '''(experimental) Build Python wheels for all platforms.
811
2113
 
812
2114
  :stability: experimental
2115
+ :schema: PyprojectTomlTool#cibuildwheel
813
2116
  '''
814
- result = self._values.get("keywords")
815
- return typing.cast(typing.Optional[typing.List[builtins.str]], result)
2117
+ result = self._values.get("cibuildwheel")
2118
+ return typing.cast(typing.Any, result)
816
2119
 
817
2120
  @builtins.property
818
- def license(self) -> typing.Optional[builtins.str]:
819
- '''(experimental) License of this package as an SPDX identifier.
820
-
821
- If the project is proprietary and does not use a specific license, you
822
- can set this value as "Proprietary".
2121
+ def hatch(self) -> typing.Any:
2122
+ '''(experimental) Modern, extensible Python project management.
823
2123
 
824
2124
  :stability: experimental
2125
+ :schema: PyprojectTomlTool#hatch
825
2126
  '''
826
- result = self._values.get("license")
827
- return typing.cast(typing.Optional[builtins.str], result)
2127
+ result = self._values.get("hatch")
2128
+ return typing.cast(typing.Any, result)
828
2129
 
829
2130
  @builtins.property
830
- def maintainers(self) -> typing.Optional[typing.List[builtins.str]]:
831
- '''(experimental) the maintainers of the package.
832
-
833
- Must be in the form "name "
2131
+ def maturin(self) -> typing.Any:
2132
+ '''(experimental) Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages.
834
2133
 
835
2134
  :stability: experimental
2135
+ :schema: PyprojectTomlTool#maturin
836
2136
  '''
837
- result = self._values.get("maintainers")
838
- return typing.cast(typing.Optional[typing.List[builtins.str]], result)
2137
+ result = self._values.get("maturin")
2138
+ return typing.cast(typing.Any, result)
839
2139
 
840
2140
  @builtins.property
841
- def name(self) -> typing.Optional[builtins.str]:
842
- '''(experimental) Name of the package (required).
2141
+ def mypy(self) -> typing.Any:
2142
+ '''(experimental) Optional static typing for Python.
843
2143
 
844
2144
  :stability: experimental
2145
+ :schema: PyprojectTomlTool#mypy
845
2146
  '''
846
- result = self._values.get("name")
847
- return typing.cast(typing.Optional[builtins.str], result)
2147
+ result = self._values.get("mypy")
2148
+ return typing.cast(typing.Any, result)
848
2149
 
849
2150
  @builtins.property
850
- def packages(self) -> typing.Optional[typing.List[typing.Any]]:
851
- '''(experimental) A list of packages and modules to include in the final distribution.
2151
+ def pdm(self) -> typing.Any:
2152
+ '''(experimental) A modern Python package manager with PEP 621 support.
852
2153
 
853
2154
  :stability: experimental
2155
+ :schema: PyprojectTomlTool#pdm
854
2156
  '''
855
- result = self._values.get("packages")
856
- return typing.cast(typing.Optional[typing.List[typing.Any]], result)
2157
+ result = self._values.get("pdm")
2158
+ return typing.cast(typing.Any, result)
857
2159
 
858
2160
  @builtins.property
859
- def plugins(self) -> typing.Any:
860
- '''(experimental) Plugins.
861
-
862
- Must be specified as a table.
2161
+ def poe(self) -> typing.Any:
2162
+ '''(experimental) A task runner that works well with pyproject.toml files.
863
2163
 
864
- :see: https://toml.io/en/v1.0.0#table
865
2164
  :stability: experimental
2165
+ :schema: PyprojectTomlTool#poe
866
2166
  '''
867
- result = self._values.get("plugins")
2167
+ result = self._values.get("poe")
868
2168
  return typing.cast(typing.Any, result)
869
2169
 
870
2170
  @builtins.property
871
- def readme(self) -> typing.Optional[builtins.str]:
872
- '''(experimental) The name of the readme file of the package.
2171
+ def poetry(self) -> typing.Any:
2172
+ '''(experimental) Python dependency management and packaging made easy.
873
2173
 
874
2174
  :stability: experimental
2175
+ :schema: PyprojectTomlTool#poetry
875
2176
  '''
876
- result = self._values.get("readme")
877
- return typing.cast(typing.Optional[builtins.str], result)
2177
+ result = self._values.get("poetry")
2178
+ return typing.cast(typing.Any, result)
878
2179
 
879
2180
  @builtins.property
880
- def repository(self) -> typing.Optional[builtins.str]:
881
- '''(experimental) A URL to the repository of the project.
2181
+ def pyright(self) -> typing.Any:
2182
+ '''(experimental) Static type checker for Python.
882
2183
 
883
2184
  :stability: experimental
2185
+ :schema: PyprojectTomlTool#pyright
884
2186
  '''
885
- result = self._values.get("repository")
886
- return typing.cast(typing.Optional[builtins.str], result)
2187
+ result = self._values.get("pyright")
2188
+ return typing.cast(typing.Any, result)
887
2189
 
888
2190
  @builtins.property
889
- def scripts(self) -> typing.Optional[typing.Mapping[builtins.str, typing.Any]]:
890
- '''(experimental) The scripts or executables that will be installed when installing the package.
2191
+ def pytest(self) -> typing.Any:
2192
+ '''(experimental) Standardized automated testing of Python packages.
891
2193
 
892
2194
  :stability: experimental
2195
+ :schema: PyprojectTomlTool#pytest
893
2196
  '''
894
- result = self._values.get("scripts")
895
- return typing.cast(typing.Optional[typing.Mapping[builtins.str, typing.Any]], result)
2197
+ result = self._values.get("pytest")
2198
+ return typing.cast(typing.Any, result)
896
2199
 
897
2200
  @builtins.property
898
- def source(self) -> typing.Optional[typing.List[typing.Any]]:
899
- '''(experimental) Source registries from which packages are retrieved.
2201
+ def repo_review(self) -> typing.Any:
2202
+ '''(experimental) Review a repository for best practices.
900
2203
 
901
2204
  :stability: experimental
2205
+ :schema: PyprojectTomlTool#repo-review
902
2206
  '''
903
- result = self._values.get("source")
904
- return typing.cast(typing.Optional[typing.List[typing.Any]], result)
2207
+ result = self._values.get("repo_review")
2208
+ return typing.cast(typing.Any, result)
905
2209
 
906
2210
  @builtins.property
907
- def urls(self) -> typing.Optional[typing.Mapping[builtins.str, builtins.str]]:
908
- '''(experimental) Project custom URLs, in addition to homepage, repository and documentation.
909
-
910
- E.g. "Bug Tracker"
2211
+ def ruff(self) -> typing.Any:
2212
+ '''(experimental) An extremely fast Python linter and formatter, written in Rust.
911
2213
 
912
2214
  :stability: experimental
2215
+ :schema: PyprojectTomlTool#ruff
913
2216
  '''
914
- result = self._values.get("urls")
915
- return typing.cast(typing.Optional[typing.Mapping[builtins.str, builtins.str]], result)
2217
+ result = self._values.get("ruff")
2218
+ return typing.cast(typing.Any, result)
916
2219
 
917
2220
  @builtins.property
918
- def version(self) -> typing.Optional[builtins.str]:
919
- '''(experimental) Version of the package (required).
2221
+ def scikit_build(self) -> typing.Any:
2222
+ '''(experimental) Improved build system generator for Python C/C++/Fortran extensions.
920
2223
 
921
2224
  :stability: experimental
2225
+ :schema: PyprojectTomlTool#scikit-build
922
2226
  '''
923
- result = self._values.get("version")
924
- return typing.cast(typing.Optional[builtins.str], result)
925
-
926
- def __eq__(self, rhs: typing.Any) -> builtins.bool:
927
- return isinstance(rhs, self.__class__) and rhs._values == self._values
928
-
929
- def __ne__(self, rhs: typing.Any) -> builtins.bool:
930
- return not (rhs == self)
931
-
932
- def __repr__(self) -> str:
933
- return "PoetryPyprojectOptionsWithoutDeps(%s)" % ", ".join(
934
- k + "=" + repr(v) for k, v in self._values.items()
935
- )
936
-
937
-
938
- class Projenrc(
939
- _ProjenrcFile_50432c7e,
940
- metaclass=jsii.JSIIMeta,
941
- jsii_type="projen.python.Projenrc",
942
- ):
943
- '''(experimental) Allows writing projenrc files in python.
944
-
945
- This will install ``projen`` as a Python dependency and will add a
946
- ``synth`` task which will run ``.projenrc.py``.
947
-
948
- :stability: experimental
949
- '''
2227
+ result = self._values.get("scikit_build")
2228
+ return typing.cast(typing.Any, result)
950
2229
 
951
- def __init__(
952
- self,
953
- project: _Project_57d89203,
954
- *,
955
- filename: typing.Optional[builtins.str] = None,
956
- projen_version: typing.Optional[builtins.str] = None,
957
- python_exec: typing.Optional[builtins.str] = None,
958
- ) -> None:
959
- '''
960
- :param project: -
961
- :param filename: (experimental) The name of the projenrc file. Default: ".projenrc.py"
962
- :param projen_version: (experimental) The projen version to use. Default: - current version
963
- :param python_exec: (experimental) Path to the python executable to use. Default: "python"
2230
+ @builtins.property
2231
+ def setuptools(self) -> typing.Any:
2232
+ '''(experimental) Easily download, build, install, upgrade, and uninstall Python packages.
964
2233
 
965
2234
  :stability: experimental
2235
+ :schema: PyprojectTomlTool#setuptools
966
2236
  '''
967
- if __debug__:
968
- type_hints = typing.get_type_hints(_typecheckingstub__dd796c2ffac4ce790fd379f22162cb352a7e6e5fcca10c21249e16c756967555)
969
- check_type(argname="argument project", value=project, expected_type=type_hints["project"])
970
- options = ProjenrcOptions(
971
- filename=filename, projen_version=projen_version, python_exec=python_exec
972
- )
973
-
974
- jsii.create(self.__class__, self, [project, options])
2237
+ result = self._values.get("setuptools")
2238
+ return typing.cast(typing.Any, result)
975
2239
 
976
2240
  @builtins.property
977
- @jsii.member(jsii_name="filePath")
978
- def file_path(self) -> builtins.str:
979
- '''(experimental) The name of the projenrc file.
2241
+ def setuptools_scm(self) -> typing.Any:
2242
+ '''(experimental) Manage Python package versions using SCM (e.g. Git).
980
2243
 
981
2244
  :stability: experimental
2245
+ :schema: PyprojectTomlTool#setuptools_scm
982
2246
  '''
983
- return typing.cast(builtins.str, jsii.get(self, "filePath"))
2247
+ result = self._values.get("setuptools_scm")
2248
+ return typing.cast(typing.Any, result)
984
2249
 
985
2250
  @builtins.property
986
- @jsii.member(jsii_name="pythonExec")
987
- def python_exec(self) -> builtins.str:
988
- '''(experimental) Path to the python executable to use.
2251
+ def taskipy(self) -> typing.Any:
2252
+ '''(experimental) The complementary task runner for python.
989
2253
 
990
2254
  :stability: experimental
2255
+ :schema: PyprojectTomlTool#taskipy
991
2256
  '''
992
- return typing.cast(builtins.str, jsii.get(self, "pythonExec"))
993
-
2257
+ result = self._values.get("taskipy")
2258
+ return typing.cast(typing.Any, result)
994
2259
 
995
- @jsii.data_type(
996
- jsii_type="projen.python.ProjenrcOptions",
997
- jsii_struct_bases=[],
998
- name_mapping={
999
- "filename": "filename",
1000
- "projen_version": "projenVersion",
1001
- "python_exec": "pythonExec",
1002
- },
1003
- )
1004
- class ProjenrcOptions:
1005
- def __init__(
1006
- self,
1007
- *,
1008
- filename: typing.Optional[builtins.str] = None,
1009
- projen_version: typing.Optional[builtins.str] = None,
1010
- python_exec: typing.Optional[builtins.str] = None,
1011
- ) -> None:
1012
- '''(experimental) Options for ``Projenrc``.
2260
+ @builtins.property
2261
+ def tombi(self) -> typing.Any:
2262
+ '''(experimental) Tombi is a toolkit for TOML;
1013
2263
 
1014
- :param filename: (experimental) The name of the projenrc file. Default: ".projenrc.py"
1015
- :param projen_version: (experimental) The projen version to use. Default: - current version
1016
- :param python_exec: (experimental) Path to the python executable to use. Default: "python"
2264
+ providing a formatter/linter and language server
1017
2265
 
1018
2266
  :stability: experimental
2267
+ :schema: PyprojectTomlTool#tombi
1019
2268
  '''
1020
- if __debug__:
1021
- type_hints = typing.get_type_hints(_typecheckingstub__7b016d0638a2d569458bc60c6c0631e67606ffba250b97da0a8bb994346743eb)
1022
- check_type(argname="argument filename", value=filename, expected_type=type_hints["filename"])
1023
- check_type(argname="argument projen_version", value=projen_version, expected_type=type_hints["projen_version"])
1024
- check_type(argname="argument python_exec", value=python_exec, expected_type=type_hints["python_exec"])
1025
- self._values: typing.Dict[builtins.str, typing.Any] = {}
1026
- if filename is not None:
1027
- self._values["filename"] = filename
1028
- if projen_version is not None:
1029
- self._values["projen_version"] = projen_version
1030
- if python_exec is not None:
1031
- self._values["python_exec"] = python_exec
2269
+ result = self._values.get("tombi")
2270
+ return typing.cast(typing.Any, result)
1032
2271
 
1033
2272
  @builtins.property
1034
- def filename(self) -> typing.Optional[builtins.str]:
1035
- '''(experimental) The name of the projenrc file.
1036
-
1037
- :default: ".projenrc.py"
2273
+ def tox(self) -> typing.Any:
2274
+ '''(experimental) Standardized automated testing of Python packages.
1038
2275
 
1039
2276
  :stability: experimental
2277
+ :schema: PyprojectTomlTool#tox
1040
2278
  '''
1041
- result = self._values.get("filename")
1042
- return typing.cast(typing.Optional[builtins.str], result)
2279
+ result = self._values.get("tox")
2280
+ return typing.cast(typing.Any, result)
1043
2281
 
1044
2282
  @builtins.property
1045
- def projen_version(self) -> typing.Optional[builtins.str]:
1046
- '''(experimental) The projen version to use.
1047
-
1048
- :default: - current version
2283
+ def ty(self) -> typing.Any:
2284
+ '''(experimental) An extremely fast Python type checker, written in Rust.
1049
2285
 
1050
2286
  :stability: experimental
2287
+ :schema: PyprojectTomlTool#ty
1051
2288
  '''
1052
- result = self._values.get("projen_version")
1053
- return typing.cast(typing.Optional[builtins.str], result)
2289
+ result = self._values.get("ty")
2290
+ return typing.cast(typing.Any, result)
1054
2291
 
1055
2292
  @builtins.property
1056
- def python_exec(self) -> typing.Optional[builtins.str]:
1057
- '''(experimental) Path to the python executable to use.
1058
-
1059
- :default: "python"
2293
+ def uv(self) -> typing.Any:
2294
+ '''(experimental) An extremely fast Python package installer and resolver, written in Rust.
1060
2295
 
1061
2296
  :stability: experimental
2297
+ :schema: PyprojectTomlTool#uv
1062
2298
  '''
1063
- result = self._values.get("python_exec")
1064
- return typing.cast(typing.Optional[builtins.str], result)
2299
+ result = self._values.get("uv")
2300
+ return typing.cast(typing.Any, result)
1065
2301
 
1066
2302
  def __eq__(self, rhs: typing.Any) -> builtins.bool:
1067
2303
  return isinstance(rhs, self.__class__) and rhs._values == self._values
@@ -1070,7 +2306,7 @@ class ProjenrcOptions:
1070
2306
  return not (rhs == self)
1071
2307
 
1072
2308
  def __repr__(self) -> str:
1073
- return "ProjenrcOptions(%s)" % ", ".join(
2309
+ return "PyprojectTomlTool(%s)" % ", ".join(
1074
2310
  k + "=" + repr(v) for k, v in self._values.items()
1075
2311
  )
1076
2312
 
@@ -1090,12 +2326,14 @@ class Pytest(
1090
2326
  *,
1091
2327
  max_failures: typing.Optional[jsii.Number] = None,
1092
2328
  testdir: typing.Optional[builtins.str] = None,
2329
+ test_match: typing.Optional[typing.Sequence[builtins.str]] = None,
1093
2330
  version: typing.Optional[builtins.str] = None,
1094
2331
  ) -> None:
1095
2332
  '''
1096
2333
  :param project: -
1097
2334
  :param max_failures: (experimental) Stop the testing process after the first N failures.
1098
- :param testdir: (experimental) Directory with tests. Default: 'tests'
2335
+ :param testdir: (deprecated) Location of sample tests. Typically the same directory where project tests will be located. Default: "tests"
2336
+ :param test_match: (experimental) List of paths to test files or directories. Useful when all project tests are in a known location to speed up test collection and to avoid picking up undesired tests by accident. Leave empty to discover all test_*.py or *_test.py files, per Pytest default. The array will be concatenated and passed as a single argument to pytest. Default: []
1099
2337
  :param version: (experimental) Pytest version. Default: "7.4.3"
1100
2338
 
1101
2339
  :stability: experimental
@@ -1104,7 +2342,10 @@ class Pytest(
1104
2342
  type_hints = typing.get_type_hints(_typecheckingstub__ce0d8c554f8b4609921caa32636cdf3f53ff29d779d94c8c46d6322903608390)
1105
2343
  check_type(argname="argument project", value=project, expected_type=type_hints["project"])
1106
2344
  options = PytestOptions(
1107
- max_failures=max_failures, testdir=testdir, version=version
2345
+ max_failures=max_failures,
2346
+ testdir=testdir,
2347
+ test_match=test_match,
2348
+ version=version,
1108
2349
  )
1109
2350
 
1110
2351
  jsii.create(self.__class__, self, [project, options])
@@ -1113,10 +2354,20 @@ class Pytest(
1113
2354
  @jsii.member(jsii_name="testdir")
1114
2355
  def testdir(self) -> builtins.str:
1115
2356
  '''
1116
- :stability: experimental
2357
+ :deprecated: Use ``sampleTestdir`` on the project instead.
2358
+
2359
+ :stability: deprecated
1117
2360
  '''
1118
2361
  return typing.cast(builtins.str, jsii.get(self, "testdir"))
1119
2362
 
2363
+ @builtins.property
2364
+ @jsii.member(jsii_name="testMatch")
2365
+ def test_match(self) -> typing.List[builtins.str]:
2366
+ '''
2367
+ :stability: experimental
2368
+ '''
2369
+ return typing.cast(typing.List[builtins.str], jsii.get(self, "testMatch"))
2370
+
1120
2371
 
1121
2372
  @jsii.data_type(
1122
2373
  jsii_type="projen.python.PytestOptions",
@@ -1124,6 +2375,7 @@ class Pytest(
1124
2375
  name_mapping={
1125
2376
  "max_failures": "maxFailures",
1126
2377
  "testdir": "testdir",
2378
+ "test_match": "testMatch",
1127
2379
  "version": "version",
1128
2380
  },
1129
2381
  )
@@ -1133,11 +2385,13 @@ class PytestOptions:
1133
2385
  *,
1134
2386
  max_failures: typing.Optional[jsii.Number] = None,
1135
2387
  testdir: typing.Optional[builtins.str] = None,
2388
+ test_match: typing.Optional[typing.Sequence[builtins.str]] = None,
1136
2389
  version: typing.Optional[builtins.str] = None,
1137
2390
  ) -> None:
1138
2391
  '''
1139
2392
  :param max_failures: (experimental) Stop the testing process after the first N failures.
1140
- :param testdir: (experimental) Directory with tests. Default: 'tests'
2393
+ :param testdir: (deprecated) Location of sample tests. Typically the same directory where project tests will be located. Default: "tests"
2394
+ :param test_match: (experimental) List of paths to test files or directories. Useful when all project tests are in a known location to speed up test collection and to avoid picking up undesired tests by accident. Leave empty to discover all test_*.py or *_test.py files, per Pytest default. The array will be concatenated and passed as a single argument to pytest. Default: []
1141
2395
  :param version: (experimental) Pytest version. Default: "7.4.3"
1142
2396
 
1143
2397
  :stability: experimental
@@ -1146,12 +2400,15 @@ class PytestOptions:
1146
2400
  type_hints = typing.get_type_hints(_typecheckingstub__4be1ab17806d0a3326c1d1b9ba1180daed1458dcbff7d77f34e7381dd37165f7)
1147
2401
  check_type(argname="argument max_failures", value=max_failures, expected_type=type_hints["max_failures"])
1148
2402
  check_type(argname="argument testdir", value=testdir, expected_type=type_hints["testdir"])
2403
+ check_type(argname="argument test_match", value=test_match, expected_type=type_hints["test_match"])
1149
2404
  check_type(argname="argument version", value=version, expected_type=type_hints["version"])
1150
2405
  self._values: typing.Dict[builtins.str, typing.Any] = {}
1151
2406
  if max_failures is not None:
1152
2407
  self._values["max_failures"] = max_failures
1153
2408
  if testdir is not None:
1154
2409
  self._values["testdir"] = testdir
2410
+ if test_match is not None:
2411
+ self._values["test_match"] = test_match
1155
2412
  if version is not None:
1156
2413
  self._values["version"] = version
1157
2414
 
@@ -1166,15 +2423,41 @@ class PytestOptions:
1166
2423
 
1167
2424
  @builtins.property
1168
2425
  def testdir(self) -> typing.Optional[builtins.str]:
1169
- '''(experimental) Directory with tests.
2426
+ '''(deprecated) Location of sample tests.
1170
2427
 
1171
- :default: 'tests'
2428
+ Typically the same directory where project tests will be located.
1172
2429
 
1173
- :stability: experimental
2430
+ :default: "tests"
2431
+
2432
+ :deprecated: Reference ``sampleTestdir`` on the project instead; to change the directory where tests are discovered from, use ``testMatch``.
2433
+
2434
+ :stability: deprecated
1174
2435
  '''
1175
2436
  result = self._values.get("testdir")
1176
2437
  return typing.cast(typing.Optional[builtins.str], result)
1177
2438
 
2439
+ @builtins.property
2440
+ def test_match(self) -> typing.Optional[typing.List[builtins.str]]:
2441
+ '''(experimental) List of paths to test files or directories.
2442
+
2443
+ Useful when all project tests are in a known location to speed up
2444
+ test collection and to avoid picking up undesired tests by accident.
2445
+
2446
+ Leave empty to discover all test_*.py or *_test.py files, per Pytest default.
2447
+
2448
+ The array will be concatenated and passed as a single argument to pytest.
2449
+
2450
+ :default: []
2451
+
2452
+ :stability: experimental
2453
+
2454
+ Example::
2455
+
2456
+ ["tests/unit", "tests/qa"]
2457
+ '''
2458
+ result = self._values.get("test_match")
2459
+ return typing.cast(typing.Optional[typing.List[builtins.str]], result)
2460
+
1178
2461
  @builtins.property
1179
2462
  def version(self) -> typing.Optional[builtins.str]:
1180
2463
  '''(experimental) Pytest version.
@@ -1341,6 +2624,7 @@ class PythonExecutableOptions:
1341
2624
  "package_name": "packageName",
1342
2625
  "poetry_options": "poetryOptions",
1343
2626
  "setup_config": "setupConfig",
2627
+ "uv_options": "uvOptions",
1344
2628
  },
1345
2629
  )
1346
2630
  class PythonPackagingOptions:
@@ -1357,6 +2641,7 @@ class PythonPackagingOptions:
1357
2641
  package_name: typing.Optional[builtins.str] = None,
1358
2642
  poetry_options: typing.Optional[typing.Union[PoetryPyprojectOptionsWithoutDeps, typing.Dict[builtins.str, typing.Any]]] = None,
1359
2643
  setup_config: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
2644
+ uv_options: typing.Optional[typing.Union["UvOptions", typing.Dict[builtins.str, typing.Any]]] = None,
1360
2645
  ) -> None:
1361
2646
  '''
1362
2647
  :param author_email: (experimental) Author's e-mail. Default: $GIT_USER_EMAIL
@@ -1369,11 +2654,14 @@ class PythonPackagingOptions:
1369
2654
  :param package_name: (experimental) Package name.
1370
2655
  :param poetry_options: (experimental) Additional options to set for poetry if using poetry.
1371
2656
  :param setup_config: (experimental) Additional fields to pass in the setup() function if using setuptools.
2657
+ :param uv_options: (experimental) Additional options to set for uv if using uv.
1372
2658
 
1373
2659
  :stability: experimental
1374
2660
  '''
1375
2661
  if isinstance(poetry_options, dict):
1376
2662
  poetry_options = PoetryPyprojectOptionsWithoutDeps(**poetry_options)
2663
+ if isinstance(uv_options, dict):
2664
+ uv_options = UvOptions(**uv_options)
1377
2665
  if __debug__:
1378
2666
  type_hints = typing.get_type_hints(_typecheckingstub__8103f3b830f25b7a5e774ec261700198b120623a2bd5b4934a1fd82d8b48fb8a)
1379
2667
  check_type(argname="argument author_email", value=author_email, expected_type=type_hints["author_email"])
@@ -1386,6 +2674,7 @@ class PythonPackagingOptions:
1386
2674
  check_type(argname="argument package_name", value=package_name, expected_type=type_hints["package_name"])
1387
2675
  check_type(argname="argument poetry_options", value=poetry_options, expected_type=type_hints["poetry_options"])
1388
2676
  check_type(argname="argument setup_config", value=setup_config, expected_type=type_hints["setup_config"])
2677
+ check_type(argname="argument uv_options", value=uv_options, expected_type=type_hints["uv_options"])
1389
2678
  self._values: typing.Dict[builtins.str, typing.Any] = {
1390
2679
  "author_email": author_email,
1391
2680
  "author_name": author_name,
@@ -1405,6 +2694,8 @@ class PythonPackagingOptions:
1405
2694
  self._values["poetry_options"] = poetry_options
1406
2695
  if setup_config is not None:
1407
2696
  self._values["setup_config"] = setup_config
2697
+ if uv_options is not None:
2698
+ self._values["uv_options"] = uv_options
1408
2699
 
1409
2700
  @builtins.property
1410
2701
  def author_email(self) -> builtins.str:
@@ -1508,6 +2799,15 @@ class PythonPackagingOptions:
1508
2799
  result = self._values.get("setup_config")
1509
2800
  return typing.cast(typing.Optional[typing.Mapping[builtins.str, typing.Any]], result)
1510
2801
 
2802
+ @builtins.property
2803
+ def uv_options(self) -> typing.Optional["UvOptions"]:
2804
+ '''(experimental) Additional options to set for uv if using uv.
2805
+
2806
+ :stability: experimental
2807
+ '''
2808
+ result = self._values.get("uv_options")
2809
+ return typing.cast(typing.Optional["UvOptions"], result)
2810
+
1511
2811
  def __eq__(self, rhs: typing.Any) -> builtins.bool:
1512
2812
  return isinstance(rhs, self.__class__) and rhs._values == self._values
1513
2813
 
@@ -1548,7 +2848,9 @@ class PythonProject(
1548
2848
  pytest: typing.Optional[builtins.bool] = None,
1549
2849
  pytest_options: typing.Optional[typing.Union[PytestOptions, typing.Dict[builtins.str, typing.Any]]] = None,
1550
2850
  sample: typing.Optional[builtins.bool] = None,
2851
+ sample_testdir: typing.Optional[builtins.str] = None,
1551
2852
  setuptools: typing.Optional[builtins.bool] = None,
2853
+ uv: typing.Optional[builtins.bool] = None,
1552
2854
  venv: typing.Optional[builtins.bool] = None,
1553
2855
  venv_options: typing.Optional[typing.Union["VenvOptions", typing.Dict[builtins.str, typing.Any]]] = None,
1554
2856
  auto_approve_options: typing.Optional[typing.Union[_AutoApproveOptions_dac86cbe, typing.Dict[builtins.str, typing.Any]]] = None,
@@ -1578,6 +2880,7 @@ class PythonProject(
1578
2880
  package_name: typing.Optional[builtins.str] = None,
1579
2881
  poetry_options: typing.Optional[typing.Union[PoetryPyprojectOptionsWithoutDeps, typing.Dict[builtins.str, typing.Any]]] = None,
1580
2882
  setup_config: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
2883
+ uv_options: typing.Optional[typing.Union["UvOptions", typing.Dict[builtins.str, typing.Any]]] = None,
1581
2884
  python_exec: typing.Optional[builtins.str] = None,
1582
2885
  name: builtins.str,
1583
2886
  commit_generated: typing.Optional[builtins.bool] = None,
@@ -1607,7 +2910,9 @@ class PythonProject(
1607
2910
  :param pytest: (experimental) Include pytest tests. Default: true
1608
2911
  :param pytest_options: (experimental) pytest options. Default: - defaults
1609
2912
  :param sample: (experimental) Include sample code and test if the relevant directories don't exist. Default: true
2913
+ :param sample_testdir: (experimental) Location of sample tests. Typically the same directory where project tests will be located. Default: "tests"
1610
2914
  :param setuptools: (experimental) Use setuptools with a setup.py script for packaging and publishing. Default: - true, unless poetry is true, then false
2915
+ :param uv: (experimental) Use uv to manage your project dependencies, virtual environment, and (optional) packaging/publishing. Default: false
1611
2916
  :param venv: (experimental) Use venv to manage a virtual environment for installing dependencies inside. Default: - true, unless poetry is true, then false
1612
2917
  :param venv_options: (experimental) Venv options. Default: - defaults
1613
2918
  :param auto_approve_options: (experimental) Enable and configure the 'auto approve' workflow. Default: - auto approve is disabled
@@ -1637,6 +2942,7 @@ class PythonProject(
1637
2942
  :param package_name: (experimental) Package name.
1638
2943
  :param poetry_options: (experimental) Additional options to set for poetry if using poetry.
1639
2944
  :param setup_config: (experimental) Additional fields to pass in the setup() function if using setuptools.
2945
+ :param uv_options: (experimental) Additional options to set for uv if using uv.
1640
2946
  :param python_exec: (experimental) Path to the python executable to use. Default: "python"
1641
2947
  :param name: (experimental) This is the name of your project. Default: $BASEDIR
1642
2948
  :param commit_generated: (experimental) Whether to commit the managed files by default. Default: true
@@ -1668,7 +2974,9 @@ class PythonProject(
1668
2974
  pytest=pytest,
1669
2975
  pytest_options=pytest_options,
1670
2976
  sample=sample,
2977
+ sample_testdir=sample_testdir,
1671
2978
  setuptools=setuptools,
2979
+ uv=uv,
1672
2980
  venv=venv,
1673
2981
  venv_options=venv_options,
1674
2982
  auto_approve_options=auto_approve_options,
@@ -1698,6 +3006,7 @@ class PythonProject(
1698
3006
  package_name=package_name,
1699
3007
  poetry_options=poetry_options,
1700
3008
  setup_config=setup_config,
3009
+ uv_options=uv_options,
1701
3010
  python_exec=python_exec,
1702
3011
  name=name,
1703
3012
  commit_generated=commit_generated,
@@ -1763,7 +3072,7 @@ class PythonProject(
1763
3072
  @builtins.property
1764
3073
  @jsii.member(jsii_name="envManager")
1765
3074
  def env_manager(self) -> IPythonEnv:
1766
- '''(experimental) API for mangaging the Python runtime environment.
3075
+ '''(experimental) API for managing the Python runtime environment.
1767
3076
 
1768
3077
  :stability: experimental
1769
3078
  '''
@@ -1778,6 +3087,17 @@ class PythonProject(
1778
3087
  '''
1779
3088
  return typing.cast(builtins.str, jsii.get(self, "moduleName"))
1780
3089
 
3090
+ @builtins.property
3091
+ @jsii.member(jsii_name="sampleTestdir")
3092
+ def sample_testdir(self) -> builtins.str:
3093
+ '''(experimental) Directory where sample tests are located.
3094
+
3095
+ :default: "tests"
3096
+
3097
+ :stability: experimental
3098
+ '''
3099
+ return typing.cast(builtins.str, jsii.get(self, "sampleTestdir"))
3100
+
1781
3101
  @builtins.property
1782
3102
  @jsii.member(jsii_name="version")
1783
3103
  def version(self) -> builtins.str:
@@ -1812,7 +3132,7 @@ class PythonProject(
1812
3132
  if __debug__:
1813
3133
  type_hints = typing.get_type_hints(_typecheckingstub__cabdb593e4357c0da03ac92882cb152b8d7fd4429738682c7081bc2132bad82b)
1814
3134
  check_type(argname="argument value", value=value, expected_type=type_hints["value"])
1815
- jsii.set(self, "pytest", value)
3135
+ jsii.set(self, "pytest", value) # pyright: ignore[reportArgumentType]
1816
3136
 
1817
3137
 
1818
3138
  @jsii.data_type(
@@ -1860,6 +3180,7 @@ class PythonProject(
1860
3180
  "package_name": "packageName",
1861
3181
  "poetry_options": "poetryOptions",
1862
3182
  "setup_config": "setupConfig",
3183
+ "uv_options": "uvOptions",
1863
3184
  "python_exec": "pythonExec",
1864
3185
  "module_name": "moduleName",
1865
3186
  "deps": "deps",
@@ -1875,7 +3196,9 @@ class PythonProject(
1875
3196
  "pytest": "pytest",
1876
3197
  "pytest_options": "pytestOptions",
1877
3198
  "sample": "sample",
3199
+ "sample_testdir": "sampleTestdir",
1878
3200
  "setuptools": "setuptools",
3201
+ "uv": "uv",
1879
3202
  "venv": "venv",
1880
3203
  "venv_options": "venvOptions",
1881
3204
  },
@@ -1927,6 +3250,7 @@ class PythonProjectOptions(
1927
3250
  package_name: typing.Optional[builtins.str] = None,
1928
3251
  poetry_options: typing.Optional[typing.Union[PoetryPyprojectOptionsWithoutDeps, typing.Dict[builtins.str, typing.Any]]] = None,
1929
3252
  setup_config: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
3253
+ uv_options: typing.Optional[typing.Union["UvOptions", typing.Dict[builtins.str, typing.Any]]] = None,
1930
3254
  python_exec: typing.Optional[builtins.str] = None,
1931
3255
  module_name: builtins.str,
1932
3256
  deps: typing.Optional[typing.Sequence[builtins.str]] = None,
@@ -1942,7 +3266,9 @@ class PythonProjectOptions(
1942
3266
  pytest: typing.Optional[builtins.bool] = None,
1943
3267
  pytest_options: typing.Optional[typing.Union[PytestOptions, typing.Dict[builtins.str, typing.Any]]] = None,
1944
3268
  sample: typing.Optional[builtins.bool] = None,
3269
+ sample_testdir: typing.Optional[builtins.str] = None,
1945
3270
  setuptools: typing.Optional[builtins.bool] = None,
3271
+ uv: typing.Optional[builtins.bool] = None,
1946
3272
  venv: typing.Optional[builtins.bool] = None,
1947
3273
  venv_options: typing.Optional[typing.Union["VenvOptions", typing.Dict[builtins.str, typing.Any]]] = None,
1948
3274
  ) -> None:
@@ -1987,6 +3313,7 @@ class PythonProjectOptions(
1987
3313
  :param package_name: (experimental) Package name.
1988
3314
  :param poetry_options: (experimental) Additional options to set for poetry if using poetry.
1989
3315
  :param setup_config: (experimental) Additional fields to pass in the setup() function if using setuptools.
3316
+ :param uv_options: (experimental) Additional options to set for uv if using uv.
1990
3317
  :param python_exec: (experimental) Path to the python executable to use. Default: "python"
1991
3318
  :param module_name: (experimental) Name of the python package as used in imports and filenames. Must only consist of alphanumeric characters and underscores. Default: $PYTHON_MODULE_NAME
1992
3319
  :param deps: (experimental) List of runtime dependencies for this project. Dependencies use the format: ``<module>@<semver>`` Additional dependencies can be added via ``project.addDependency()``. Default: []
@@ -2002,7 +3329,9 @@ class PythonProjectOptions(
2002
3329
  :param pytest: (experimental) Include pytest tests. Default: true
2003
3330
  :param pytest_options: (experimental) pytest options. Default: - defaults
2004
3331
  :param sample: (experimental) Include sample code and test if the relevant directories don't exist. Default: true
3332
+ :param sample_testdir: (experimental) Location of sample tests. Typically the same directory where project tests will be located. Default: "tests"
2005
3333
  :param setuptools: (experimental) Use setuptools with a setup.py script for packaging and publishing. Default: - true, unless poetry is true, then false
3334
+ :param uv: (experimental) Use uv to manage your project dependencies, virtual environment, and (optional) packaging/publishing. Default: false
2006
3335
  :param venv: (experimental) Use venv to manage a virtual environment for installing dependencies inside. Default: - true, unless poetry is true, then false
2007
3336
  :param venv_options: (experimental) Venv options. Default: - defaults
2008
3337
 
@@ -2032,6 +3361,8 @@ class PythonProjectOptions(
2032
3361
  stale_options = _StaleOptions_929db764(**stale_options)
2033
3362
  if isinstance(poetry_options, dict):
2034
3363
  poetry_options = PoetryPyprojectOptionsWithoutDeps(**poetry_options)
3364
+ if isinstance(uv_options, dict):
3365
+ uv_options = UvOptions(**uv_options)
2035
3366
  if isinstance(projenrc_js_options, dict):
2036
3367
  projenrc_js_options = _ProjenrcOptions_179dd39f(**projenrc_js_options)
2037
3368
  if isinstance(projenrc_python_options, dict):
@@ -2083,6 +3414,7 @@ class PythonProjectOptions(
2083
3414
  check_type(argname="argument package_name", value=package_name, expected_type=type_hints["package_name"])
2084
3415
  check_type(argname="argument poetry_options", value=poetry_options, expected_type=type_hints["poetry_options"])
2085
3416
  check_type(argname="argument setup_config", value=setup_config, expected_type=type_hints["setup_config"])
3417
+ check_type(argname="argument uv_options", value=uv_options, expected_type=type_hints["uv_options"])
2086
3418
  check_type(argname="argument python_exec", value=python_exec, expected_type=type_hints["python_exec"])
2087
3419
  check_type(argname="argument module_name", value=module_name, expected_type=type_hints["module_name"])
2088
3420
  check_type(argname="argument deps", value=deps, expected_type=type_hints["deps"])
@@ -2098,7 +3430,9 @@ class PythonProjectOptions(
2098
3430
  check_type(argname="argument pytest", value=pytest, expected_type=type_hints["pytest"])
2099
3431
  check_type(argname="argument pytest_options", value=pytest_options, expected_type=type_hints["pytest_options"])
2100
3432
  check_type(argname="argument sample", value=sample, expected_type=type_hints["sample"])
3433
+ check_type(argname="argument sample_testdir", value=sample_testdir, expected_type=type_hints["sample_testdir"])
2101
3434
  check_type(argname="argument setuptools", value=setuptools, expected_type=type_hints["setuptools"])
3435
+ check_type(argname="argument uv", value=uv, expected_type=type_hints["uv"])
2102
3436
  check_type(argname="argument venv", value=venv, expected_type=type_hints["venv"])
2103
3437
  check_type(argname="argument venv_options", value=venv_options, expected_type=type_hints["venv_options"])
2104
3438
  self._values: typing.Dict[builtins.str, typing.Any] = {
@@ -2178,6 +3512,8 @@ class PythonProjectOptions(
2178
3512
  self._values["poetry_options"] = poetry_options
2179
3513
  if setup_config is not None:
2180
3514
  self._values["setup_config"] = setup_config
3515
+ if uv_options is not None:
3516
+ self._values["uv_options"] = uv_options
2181
3517
  if python_exec is not None:
2182
3518
  self._values["python_exec"] = python_exec
2183
3519
  if deps is not None:
@@ -2206,8 +3542,12 @@ class PythonProjectOptions(
2206
3542
  self._values["pytest_options"] = pytest_options
2207
3543
  if sample is not None:
2208
3544
  self._values["sample"] = sample
3545
+ if sample_testdir is not None:
3546
+ self._values["sample_testdir"] = sample_testdir
2209
3547
  if setuptools is not None:
2210
3548
  self._values["setuptools"] = setuptools
3549
+ if uv is not None:
3550
+ self._values["uv"] = uv
2211
3551
  if venv is not None:
2212
3552
  self._values["venv"] = venv
2213
3553
  if venv_options is not None:
@@ -2667,6 +4007,15 @@ class PythonProjectOptions(
2667
4007
  result = self._values.get("setup_config")
2668
4008
  return typing.cast(typing.Optional[typing.Mapping[builtins.str, typing.Any]], result)
2669
4009
 
4010
+ @builtins.property
4011
+ def uv_options(self) -> typing.Optional["UvOptions"]:
4012
+ '''(experimental) Additional options to set for uv if using uv.
4013
+
4014
+ :stability: experimental
4015
+ '''
4016
+ result = self._values.get("uv_options")
4017
+ return typing.cast(typing.Optional["UvOptions"], result)
4018
+
2670
4019
  @builtins.property
2671
4020
  def python_exec(self) -> typing.Optional[builtins.str]:
2672
4021
  '''(experimental) Path to the python executable to use.
@@ -2861,15 +4210,40 @@ class PythonProjectOptions(
2861
4210
  return typing.cast(typing.Optional[builtins.bool], result)
2862
4211
 
2863
4212
  @builtins.property
2864
- def setuptools(self) -> typing.Optional[builtins.bool]:
2865
- '''(experimental) Use setuptools with a setup.py script for packaging and publishing.
4213
+ def sample_testdir(self) -> typing.Optional[builtins.str]:
4214
+ '''(experimental) Location of sample tests.
4215
+
4216
+ Typically the same directory where project tests will be located.
4217
+
4218
+ :default: "tests"
4219
+
4220
+ :stability: experimental
4221
+ '''
4222
+ result = self._values.get("sample_testdir")
4223
+ return typing.cast(typing.Optional[builtins.str], result)
4224
+
4225
+ @builtins.property
4226
+ def setuptools(self) -> typing.Optional[builtins.bool]:
4227
+ '''(experimental) Use setuptools with a setup.py script for packaging and publishing.
4228
+
4229
+ :default: - true, unless poetry is true, then false
4230
+
4231
+ :stability: experimental
4232
+ :featured: true
4233
+ '''
4234
+ result = self._values.get("setuptools")
4235
+ return typing.cast(typing.Optional[builtins.bool], result)
4236
+
4237
+ @builtins.property
4238
+ def uv(self) -> typing.Optional[builtins.bool]:
4239
+ '''(experimental) Use uv to manage your project dependencies, virtual environment, and (optional) packaging/publishing.
2866
4240
 
2867
- :default: - true, unless poetry is true, then false
4241
+ :default: false
2868
4242
 
2869
4243
  :stability: experimental
2870
4244
  :featured: true
2871
4245
  '''
2872
- result = self._values.get("setuptools")
4246
+ result = self._values.get("uv")
2873
4247
  return typing.cast(typing.Optional[builtins.bool], result)
2874
4248
 
2875
4249
  @builtins.property
@@ -3369,6 +4743,7 @@ class Setuptools(
3369
4743
  package_name: typing.Optional[builtins.str] = None,
3370
4744
  poetry_options: typing.Optional[typing.Union[PoetryPyprojectOptionsWithoutDeps, typing.Dict[builtins.str, typing.Any]]] = None,
3371
4745
  setup_config: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
4746
+ uv_options: typing.Optional[typing.Union["UvOptions", typing.Dict[builtins.str, typing.Any]]] = None,
3372
4747
  python_exec: typing.Optional[builtins.str] = None,
3373
4748
  ) -> None:
3374
4749
  '''
@@ -3383,6 +4758,7 @@ class Setuptools(
3383
4758
  :param package_name: (experimental) Package name.
3384
4759
  :param poetry_options: (experimental) Additional options to set for poetry if using poetry.
3385
4760
  :param setup_config: (experimental) Additional fields to pass in the setup() function if using setuptools.
4761
+ :param uv_options: (experimental) Additional options to set for uv if using uv.
3386
4762
  :param python_exec: (experimental) Path to the python executable to use. Default: "python"
3387
4763
 
3388
4764
  :stability: experimental
@@ -3401,6 +4777,7 @@ class Setuptools(
3401
4777
  package_name=package_name,
3402
4778
  poetry_options=poetry_options,
3403
4779
  setup_config=setup_config,
4780
+ uv_options=uv_options,
3404
4781
  python_exec=python_exec,
3405
4782
  )
3406
4783
 
@@ -3439,6 +4816,7 @@ class Setuptools(
3439
4816
  "package_name": "packageName",
3440
4817
  "poetry_options": "poetryOptions",
3441
4818
  "setup_config": "setupConfig",
4819
+ "uv_options": "uvOptions",
3442
4820
  "python_exec": "pythonExec",
3443
4821
  },
3444
4822
  )
@@ -3456,6 +4834,7 @@ class SetuptoolsOptions(PythonPackagingOptions, PythonExecutableOptions):
3456
4834
  package_name: typing.Optional[builtins.str] = None,
3457
4835
  poetry_options: typing.Optional[typing.Union[PoetryPyprojectOptionsWithoutDeps, typing.Dict[builtins.str, typing.Any]]] = None,
3458
4836
  setup_config: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
4837
+ uv_options: typing.Optional[typing.Union["UvOptions", typing.Dict[builtins.str, typing.Any]]] = None,
3459
4838
  python_exec: typing.Optional[builtins.str] = None,
3460
4839
  ) -> None:
3461
4840
  '''
@@ -3469,12 +4848,15 @@ class SetuptoolsOptions(PythonPackagingOptions, PythonExecutableOptions):
3469
4848
  :param package_name: (experimental) Package name.
3470
4849
  :param poetry_options: (experimental) Additional options to set for poetry if using poetry.
3471
4850
  :param setup_config: (experimental) Additional fields to pass in the setup() function if using setuptools.
4851
+ :param uv_options: (experimental) Additional options to set for uv if using uv.
3472
4852
  :param python_exec: (experimental) Path to the python executable to use. Default: "python"
3473
4853
 
3474
4854
  :stability: experimental
3475
4855
  '''
3476
4856
  if isinstance(poetry_options, dict):
3477
4857
  poetry_options = PoetryPyprojectOptionsWithoutDeps(**poetry_options)
4858
+ if isinstance(uv_options, dict):
4859
+ uv_options = UvOptions(**uv_options)
3478
4860
  if __debug__:
3479
4861
  type_hints = typing.get_type_hints(_typecheckingstub__efb76fcc4729646986081d64b0050704d856d4acab1092db7f22a97d767ca944)
3480
4862
  check_type(argname="argument author_email", value=author_email, expected_type=type_hints["author_email"])
@@ -3487,6 +4869,7 @@ class SetuptoolsOptions(PythonPackagingOptions, PythonExecutableOptions):
3487
4869
  check_type(argname="argument package_name", value=package_name, expected_type=type_hints["package_name"])
3488
4870
  check_type(argname="argument poetry_options", value=poetry_options, expected_type=type_hints["poetry_options"])
3489
4871
  check_type(argname="argument setup_config", value=setup_config, expected_type=type_hints["setup_config"])
4872
+ check_type(argname="argument uv_options", value=uv_options, expected_type=type_hints["uv_options"])
3490
4873
  check_type(argname="argument python_exec", value=python_exec, expected_type=type_hints["python_exec"])
3491
4874
  self._values: typing.Dict[builtins.str, typing.Any] = {
3492
4875
  "author_email": author_email,
@@ -3507,6 +4890,8 @@ class SetuptoolsOptions(PythonPackagingOptions, PythonExecutableOptions):
3507
4890
  self._values["poetry_options"] = poetry_options
3508
4891
  if setup_config is not None:
3509
4892
  self._values["setup_config"] = setup_config
4893
+ if uv_options is not None:
4894
+ self._values["uv_options"] = uv_options
3510
4895
  if python_exec is not None:
3511
4896
  self._values["python_exec"] = python_exec
3512
4897
 
@@ -3612,6 +4997,15 @@ class SetuptoolsOptions(PythonPackagingOptions, PythonExecutableOptions):
3612
4997
  result = self._values.get("setup_config")
3613
4998
  return typing.cast(typing.Optional[typing.Mapping[builtins.str, typing.Any]], result)
3614
4999
 
5000
+ @builtins.property
5001
+ def uv_options(self) -> typing.Optional["UvOptions"]:
5002
+ '''(experimental) Additional options to set for uv if using uv.
5003
+
5004
+ :stability: experimental
5005
+ '''
5006
+ result = self._values.get("uv_options")
5007
+ return typing.cast(typing.Optional["UvOptions"], result)
5008
+
3615
5009
  @builtins.property
3616
5010
  def python_exec(self) -> typing.Optional[builtins.str]:
3617
5011
  '''(experimental) Path to the python executable to use.
@@ -3635,6 +5029,228 @@ class SetuptoolsOptions(PythonPackagingOptions, PythonExecutableOptions):
3635
5029
  )
3636
5030
 
3637
5031
 
5032
+ @jsii.implements(IPythonDeps, IPythonEnv, IPythonPackaging)
5033
+ class Uv(_Component_2b0ad27f, metaclass=jsii.JSIIMeta, jsii_type="projen.python.Uv"):
5034
+ '''(experimental) Manage project dependencies, virtual environments, and packaging through uv.
5035
+
5036
+ :stability: experimental
5037
+ '''
5038
+
5039
+ def __init__(
5040
+ self,
5041
+ scope: _constructs_77d1e7e8.IConstruct,
5042
+ *,
5043
+ build_system: typing.Optional[typing.Union[BuildSystem, typing.Dict[builtins.str, typing.Any]]] = None,
5044
+ project: typing.Optional[typing.Union[PyprojectTomlProject, typing.Dict[builtins.str, typing.Any]]] = None,
5045
+ uv: typing.Optional[typing.Union[_UvConfiguration_126496a9, typing.Dict[builtins.str, typing.Any]]] = None,
5046
+ python_exec: typing.Optional[builtins.str] = None,
5047
+ ) -> None:
5048
+ '''
5049
+ :param scope: -
5050
+ :param build_system: (experimental) Declares any Python level dependencies that must be installed in order to run the project’s build system successfully. Default: - no build system
5051
+ :param project: (experimental) The project's basic metadata configuration.
5052
+ :param uv: (experimental) The configuration and metadata for uv.
5053
+ :param python_exec: (experimental) Path to the python executable to use. Default: "python"
5054
+
5055
+ :stability: experimental
5056
+ '''
5057
+ if __debug__:
5058
+ type_hints = typing.get_type_hints(_typecheckingstub__c6af3eeebf702d4696ff95e3dd9f7765abd1bead0231202b6c3d96e210ebae53)
5059
+ check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
5060
+ options = UvOptions(
5061
+ build_system=build_system, project=project, uv=uv, python_exec=python_exec
5062
+ )
5063
+
5064
+ jsii.create(self.__class__, self, [scope, options])
5065
+
5066
+ @jsii.member(jsii_name="addDependency")
5067
+ def add_dependency(self, spec: builtins.str) -> None:
5068
+ '''(experimental) Adds a runtime dependency.
5069
+
5070
+ :param spec: -
5071
+
5072
+ :stability: experimental
5073
+ '''
5074
+ if __debug__:
5075
+ type_hints = typing.get_type_hints(_typecheckingstub__cfefccda3fbe1ff1c577b203b8a3bbfc01f7f1d4af0e6ac2d49593339709bd0c)
5076
+ check_type(argname="argument spec", value=spec, expected_type=type_hints["spec"])
5077
+ return typing.cast(None, jsii.invoke(self, "addDependency", [spec]))
5078
+
5079
+ @jsii.member(jsii_name="addDevDependency")
5080
+ def add_dev_dependency(self, spec: builtins.str) -> None:
5081
+ '''(experimental) Adds a dev dependency.
5082
+
5083
+ :param spec: -
5084
+
5085
+ :stability: experimental
5086
+ '''
5087
+ if __debug__:
5088
+ type_hints = typing.get_type_hints(_typecheckingstub__476e06a93af3d873cd3d5aa2eb681ec297066fbb9e27bac268fb38df7b1fe327)
5089
+ check_type(argname="argument spec", value=spec, expected_type=type_hints["spec"])
5090
+ return typing.cast(None, jsii.invoke(self, "addDevDependency", [spec]))
5091
+
5092
+ @jsii.member(jsii_name="installDependencies")
5093
+ def install_dependencies(self) -> None:
5094
+ '''(experimental) Installs dependencies (called during post-synthesis).
5095
+
5096
+ :stability: experimental
5097
+ '''
5098
+ return typing.cast(None, jsii.invoke(self, "installDependencies", []))
5099
+
5100
+ @jsii.member(jsii_name="setupEnvironment")
5101
+ def setup_environment(self) -> None:
5102
+ '''(experimental) Initializes the virtual environment if it doesn't exist (called during post-synthesis).
5103
+
5104
+ :stability: experimental
5105
+ '''
5106
+ return typing.cast(None, jsii.invoke(self, "setupEnvironment", []))
5107
+
5108
+ @builtins.property
5109
+ @jsii.member(jsii_name="file")
5110
+ def file(self) -> PyprojectTomlFile:
5111
+ '''(experimental) The ``pyproject.toml`` file.
5112
+
5113
+ :stability: experimental
5114
+ '''
5115
+ return typing.cast(PyprojectTomlFile, jsii.get(self, "file"))
5116
+
5117
+ @builtins.property
5118
+ @jsii.member(jsii_name="installCiTask")
5119
+ def install_ci_task(self) -> _Task_9fa875b6:
5120
+ '''(experimental) A task that installs and updates dependencies.
5121
+
5122
+ :stability: experimental
5123
+ '''
5124
+ return typing.cast(_Task_9fa875b6, jsii.get(self, "installCiTask"))
5125
+
5126
+ @builtins.property
5127
+ @jsii.member(jsii_name="installTask")
5128
+ def install_task(self) -> _Task_9fa875b6:
5129
+ '''
5130
+ :stability: experimental
5131
+ '''
5132
+ return typing.cast(_Task_9fa875b6, jsii.get(self, "installTask"))
5133
+
5134
+ @builtins.property
5135
+ @jsii.member(jsii_name="publishTask")
5136
+ def publish_task(self) -> _Task_9fa875b6:
5137
+ '''(experimental) A task that uploads the package to a package repository.
5138
+
5139
+ :stability: experimental
5140
+ '''
5141
+ return typing.cast(_Task_9fa875b6, jsii.get(self, "publishTask"))
5142
+
5143
+ @builtins.property
5144
+ @jsii.member(jsii_name="publishTestTask")
5145
+ def publish_test_task(self) -> _Task_9fa875b6:
5146
+ '''
5147
+ :stability: experimental
5148
+ '''
5149
+ return typing.cast(_Task_9fa875b6, jsii.get(self, "publishTestTask"))
5150
+
5151
+
5152
+ @jsii.data_type(
5153
+ jsii_type="projen.python.UvOptions",
5154
+ jsii_struct_bases=[PythonExecutableOptions],
5155
+ name_mapping={
5156
+ "python_exec": "pythonExec",
5157
+ "build_system": "buildSystem",
5158
+ "project": "project",
5159
+ "uv": "uv",
5160
+ },
5161
+ )
5162
+ class UvOptions(PythonExecutableOptions):
5163
+ def __init__(
5164
+ self,
5165
+ *,
5166
+ python_exec: typing.Optional[builtins.str] = None,
5167
+ build_system: typing.Optional[typing.Union[BuildSystem, typing.Dict[builtins.str, typing.Any]]] = None,
5168
+ project: typing.Optional[typing.Union[PyprojectTomlProject, typing.Dict[builtins.str, typing.Any]]] = None,
5169
+ uv: typing.Optional[typing.Union[_UvConfiguration_126496a9, typing.Dict[builtins.str, typing.Any]]] = None,
5170
+ ) -> None:
5171
+ '''(experimental) Options for UV project.
5172
+
5173
+ :param python_exec: (experimental) Path to the python executable to use. Default: "python"
5174
+ :param build_system: (experimental) Declares any Python level dependencies that must be installed in order to run the project’s build system successfully. Default: - no build system
5175
+ :param project: (experimental) The project's basic metadata configuration.
5176
+ :param uv: (experimental) The configuration and metadata for uv.
5177
+
5178
+ :stability: experimental
5179
+ '''
5180
+ if isinstance(build_system, dict):
5181
+ build_system = BuildSystem(**build_system)
5182
+ if isinstance(project, dict):
5183
+ project = PyprojectTomlProject(**project)
5184
+ if isinstance(uv, dict):
5185
+ uv = _UvConfiguration_126496a9(**uv)
5186
+ if __debug__:
5187
+ type_hints = typing.get_type_hints(_typecheckingstub__7160d30dca474dc5d88b1ee88cb680c95003b72e43b0c36e6476ea71df3e39bc)
5188
+ check_type(argname="argument python_exec", value=python_exec, expected_type=type_hints["python_exec"])
5189
+ check_type(argname="argument build_system", value=build_system, expected_type=type_hints["build_system"])
5190
+ check_type(argname="argument project", value=project, expected_type=type_hints["project"])
5191
+ check_type(argname="argument uv", value=uv, expected_type=type_hints["uv"])
5192
+ self._values: typing.Dict[builtins.str, typing.Any] = {}
5193
+ if python_exec is not None:
5194
+ self._values["python_exec"] = python_exec
5195
+ if build_system is not None:
5196
+ self._values["build_system"] = build_system
5197
+ if project is not None:
5198
+ self._values["project"] = project
5199
+ if uv is not None:
5200
+ self._values["uv"] = uv
5201
+
5202
+ @builtins.property
5203
+ def python_exec(self) -> typing.Optional[builtins.str]:
5204
+ '''(experimental) Path to the python executable to use.
5205
+
5206
+ :default: "python"
5207
+
5208
+ :stability: experimental
5209
+ '''
5210
+ result = self._values.get("python_exec")
5211
+ return typing.cast(typing.Optional[builtins.str], result)
5212
+
5213
+ @builtins.property
5214
+ def build_system(self) -> typing.Optional[BuildSystem]:
5215
+ '''(experimental) Declares any Python level dependencies that must be installed in order to run the project’s build system successfully.
5216
+
5217
+ :default: - no build system
5218
+
5219
+ :stability: experimental
5220
+ '''
5221
+ result = self._values.get("build_system")
5222
+ return typing.cast(typing.Optional[BuildSystem], result)
5223
+
5224
+ @builtins.property
5225
+ def project(self) -> typing.Optional[PyprojectTomlProject]:
5226
+ '''(experimental) The project's basic metadata configuration.
5227
+
5228
+ :stability: experimental
5229
+ '''
5230
+ result = self._values.get("project")
5231
+ return typing.cast(typing.Optional[PyprojectTomlProject], result)
5232
+
5233
+ @builtins.property
5234
+ def uv(self) -> typing.Optional[_UvConfiguration_126496a9]:
5235
+ '''(experimental) The configuration and metadata for uv.
5236
+
5237
+ :stability: experimental
5238
+ '''
5239
+ result = self._values.get("uv")
5240
+ return typing.cast(typing.Optional[_UvConfiguration_126496a9], result)
5241
+
5242
+ def __eq__(self, rhs: typing.Any) -> builtins.bool:
5243
+ return isinstance(rhs, self.__class__) and rhs._values == self._values
5244
+
5245
+ def __ne__(self, rhs: typing.Any) -> builtins.bool:
5246
+ return not (rhs == self)
5247
+
5248
+ def __repr__(self) -> str:
5249
+ return "UvOptions(%s)" % ", ".join(
5250
+ k + "=" + repr(v) for k, v in self._values.items()
5251
+ )
5252
+
5253
+
3638
5254
  @jsii.implements(IPythonEnv)
3639
5255
  class Venv(
3640
5256
  _Component_2b0ad27f,
@@ -3753,6 +5369,7 @@ class VenvOptions:
3753
5369
  "package_name": "packageName",
3754
5370
  "poetry_options": "poetryOptions",
3755
5371
  "setup_config": "setupConfig",
5372
+ "uv_options": "uvOptions",
3756
5373
  "python_exec": "pythonExec",
3757
5374
  },
3758
5375
  )
@@ -3770,6 +5387,7 @@ class PoetryOptions(PythonPackagingOptions, PythonExecutableOptions):
3770
5387
  package_name: typing.Optional[builtins.str] = None,
3771
5388
  poetry_options: typing.Optional[typing.Union[PoetryPyprojectOptionsWithoutDeps, typing.Dict[builtins.str, typing.Any]]] = None,
3772
5389
  setup_config: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
5390
+ uv_options: typing.Optional[typing.Union[UvOptions, typing.Dict[builtins.str, typing.Any]]] = None,
3773
5391
  python_exec: typing.Optional[builtins.str] = None,
3774
5392
  ) -> None:
3775
5393
  '''
@@ -3783,12 +5401,15 @@ class PoetryOptions(PythonPackagingOptions, PythonExecutableOptions):
3783
5401
  :param package_name: (experimental) Package name.
3784
5402
  :param poetry_options: (experimental) Additional options to set for poetry if using poetry.
3785
5403
  :param setup_config: (experimental) Additional fields to pass in the setup() function if using setuptools.
5404
+ :param uv_options: (experimental) Additional options to set for uv if using uv.
3786
5405
  :param python_exec: (experimental) Path to the python executable to use. Default: "python"
3787
5406
 
3788
5407
  :stability: experimental
3789
5408
  '''
3790
5409
  if isinstance(poetry_options, dict):
3791
5410
  poetry_options = PoetryPyprojectOptionsWithoutDeps(**poetry_options)
5411
+ if isinstance(uv_options, dict):
5412
+ uv_options = UvOptions(**uv_options)
3792
5413
  if __debug__:
3793
5414
  type_hints = typing.get_type_hints(_typecheckingstub__ffb2a68f24fc1fda645188af9796f00c5dd2cfddf0c67e4d824be027c0c1f1a8)
3794
5415
  check_type(argname="argument author_email", value=author_email, expected_type=type_hints["author_email"])
@@ -3801,6 +5422,7 @@ class PoetryOptions(PythonPackagingOptions, PythonExecutableOptions):
3801
5422
  check_type(argname="argument package_name", value=package_name, expected_type=type_hints["package_name"])
3802
5423
  check_type(argname="argument poetry_options", value=poetry_options, expected_type=type_hints["poetry_options"])
3803
5424
  check_type(argname="argument setup_config", value=setup_config, expected_type=type_hints["setup_config"])
5425
+ check_type(argname="argument uv_options", value=uv_options, expected_type=type_hints["uv_options"])
3804
5426
  check_type(argname="argument python_exec", value=python_exec, expected_type=type_hints["python_exec"])
3805
5427
  self._values: typing.Dict[builtins.str, typing.Any] = {
3806
5428
  "author_email": author_email,
@@ -3821,6 +5443,8 @@ class PoetryOptions(PythonPackagingOptions, PythonExecutableOptions):
3821
5443
  self._values["poetry_options"] = poetry_options
3822
5444
  if setup_config is not None:
3823
5445
  self._values["setup_config"] = setup_config
5446
+ if uv_options is not None:
5447
+ self._values["uv_options"] = uv_options
3824
5448
  if python_exec is not None:
3825
5449
  self._values["python_exec"] = python_exec
3826
5450
 
@@ -3926,6 +5550,15 @@ class PoetryOptions(PythonPackagingOptions, PythonExecutableOptions):
3926
5550
  result = self._values.get("setup_config")
3927
5551
  return typing.cast(typing.Optional[typing.Mapping[builtins.str, typing.Any]], result)
3928
5552
 
5553
+ @builtins.property
5554
+ def uv_options(self) -> typing.Optional[UvOptions]:
5555
+ '''(experimental) Additional options to set for uv if using uv.
5556
+
5557
+ :stability: experimental
5558
+ '''
5559
+ result = self._values.get("uv_options")
5560
+ return typing.cast(typing.Optional[UvOptions], result)
5561
+
3929
5562
  @builtins.property
3930
5563
  def python_exec(self) -> typing.Optional[builtins.str]:
3931
5564
  '''(experimental) Path to the python executable to use.
@@ -3965,6 +5598,7 @@ class PoetryOptions(PythonPackagingOptions, PythonExecutableOptions):
3965
5598
  "license": "license",
3966
5599
  "maintainers": "maintainers",
3967
5600
  "name": "name",
5601
+ "package_mode": "packageMode",
3968
5602
  "packages": "packages",
3969
5603
  "plugins": "plugins",
3970
5604
  "readme": "readme",
@@ -3993,6 +5627,7 @@ class PoetryPyprojectOptions(PoetryPyprojectOptionsWithoutDeps):
3993
5627
  license: typing.Optional[builtins.str] = None,
3994
5628
  maintainers: typing.Optional[typing.Sequence[builtins.str]] = None,
3995
5629
  name: typing.Optional[builtins.str] = None,
5630
+ package_mode: typing.Optional[builtins.bool] = None,
3996
5631
  packages: typing.Optional[typing.Sequence[typing.Any]] = None,
3997
5632
  plugins: typing.Any = None,
3998
5633
  readme: typing.Optional[builtins.str] = None,
@@ -4018,6 +5653,7 @@ class PoetryPyprojectOptions(PoetryPyprojectOptionsWithoutDeps):
4018
5653
  :param license: (experimental) License of this package as an SPDX identifier. If the project is proprietary and does not use a specific license, you can set this value as "Proprietary".
4019
5654
  :param maintainers: (experimental) the maintainers of the package. Must be in the form "name "
4020
5655
  :param name: (experimental) Name of the package (required).
5656
+ :param package_mode: (experimental) Package mode (optional). Default: true
4021
5657
  :param packages: (experimental) A list of packages and modules to include in the final distribution.
4022
5658
  :param plugins: (experimental) Plugins. Must be specified as a table.
4023
5659
  :param readme: (experimental) The name of the readme file of the package.
@@ -4046,6 +5682,7 @@ class PoetryPyprojectOptions(PoetryPyprojectOptionsWithoutDeps):
4046
5682
  check_type(argname="argument license", value=license, expected_type=type_hints["license"])
4047
5683
  check_type(argname="argument maintainers", value=maintainers, expected_type=type_hints["maintainers"])
4048
5684
  check_type(argname="argument name", value=name, expected_type=type_hints["name"])
5685
+ check_type(argname="argument package_mode", value=package_mode, expected_type=type_hints["package_mode"])
4049
5686
  check_type(argname="argument packages", value=packages, expected_type=type_hints["packages"])
4050
5687
  check_type(argname="argument plugins", value=plugins, expected_type=type_hints["plugins"])
4051
5688
  check_type(argname="argument readme", value=readme, expected_type=type_hints["readme"])
@@ -4081,6 +5718,8 @@ class PoetryPyprojectOptions(PoetryPyprojectOptionsWithoutDeps):
4081
5718
  self._values["maintainers"] = maintainers
4082
5719
  if name is not None:
4083
5720
  self._values["name"] = name
5721
+ if package_mode is not None:
5722
+ self._values["package_mode"] = package_mode
4084
5723
  if packages is not None:
4085
5724
  self._values["packages"] = packages
4086
5725
  if plugins is not None:
@@ -4223,6 +5862,22 @@ class PoetryPyprojectOptions(PoetryPyprojectOptionsWithoutDeps):
4223
5862
  result = self._values.get("name")
4224
5863
  return typing.cast(typing.Optional[builtins.str], result)
4225
5864
 
5865
+ @builtins.property
5866
+ def package_mode(self) -> typing.Optional[builtins.bool]:
5867
+ '''(experimental) Package mode (optional).
5868
+
5869
+ :default: true
5870
+
5871
+ :see: https://python-poetry.org/docs/pyproject/#package-mode
5872
+ :stability: experimental
5873
+
5874
+ Example::
5875
+
5876
+ false
5877
+ '''
5878
+ result = self._values.get("package_mode")
5879
+ return typing.cast(typing.Optional[builtins.bool], result)
5880
+
4226
5881
  @builtins.property
4227
5882
  def packages(self) -> typing.Optional[typing.List[typing.Any]]:
4228
5883
  '''(experimental) A list of packages and modules to include in the final distribution.
@@ -4343,6 +5998,7 @@ class PoetryPyprojectOptions(PoetryPyprojectOptionsWithoutDeps):
4343
5998
 
4344
5999
 
4345
6000
  __all__ = [
6001
+ "BuildSystem",
4346
6002
  "IPackageProvider",
4347
6003
  "IPythonDeps",
4348
6004
  "IPythonEnv",
@@ -4354,8 +6010,15 @@ __all__ = [
4354
6010
  "PoetryPyproject",
4355
6011
  "PoetryPyprojectOptions",
4356
6012
  "PoetryPyprojectOptionsWithoutDeps",
6013
+ "ProjectAuthor",
4357
6014
  "Projenrc",
4358
6015
  "ProjenrcOptions",
6016
+ "PyprojectToml",
6017
+ "PyprojectTomlDependencyGroups",
6018
+ "PyprojectTomlFile",
6019
+ "PyprojectTomlProject",
6020
+ "PyprojectTomlProjectDynamic",
6021
+ "PyprojectTomlTool",
4359
6022
  "Pytest",
4360
6023
  "PytestOptions",
4361
6024
  "PytestSample",
@@ -4372,12 +6035,27 @@ __all__ = [
4372
6035
  "SetupPyOptions",
4373
6036
  "Setuptools",
4374
6037
  "SetuptoolsOptions",
6038
+ "Uv",
6039
+ "UvOptions",
4375
6040
  "Venv",
4376
6041
  "VenvOptions",
6042
+ "uv_config",
4377
6043
  ]
4378
6044
 
4379
6045
  publication.publish()
4380
6046
 
6047
+ # Loading modules to ensure their types are registered with the jsii runtime library
6048
+ from . import uv_config
6049
+
6050
+ def _typecheckingstub__e9da99c32d038945aadcf71f5eefe5c42c4d7218b8a2d3e62f288c5a8081f35f(
6051
+ *,
6052
+ requires: typing.Sequence[builtins.str],
6053
+ backend_path: typing.Optional[typing.Sequence[builtins.str]] = None,
6054
+ build_backend: typing.Optional[builtins.str] = None,
6055
+ ) -> None:
6056
+ """Type checking stubs"""
6057
+ pass
6058
+
4381
6059
  def _typecheckingstub__19b787f4d5b675eaec41431c3ba2e6ceb259e8bb95072e76cd0d5e8c357712bf(
4382
6060
  spec: builtins.str,
4383
6061
  ) -> None:
@@ -4421,6 +6099,7 @@ def _typecheckingstub__5f89c074241aa542e5f366ea84bd8e5e2e9da8150d15e44f4ae6c7152
4421
6099
  package_name: typing.Optional[builtins.str] = None,
4422
6100
  poetry_options: typing.Optional[typing.Union[PoetryPyprojectOptionsWithoutDeps, typing.Dict[builtins.str, typing.Any]]] = None,
4423
6101
  setup_config: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
6102
+ uv_options: typing.Optional[typing.Union[UvOptions, typing.Dict[builtins.str, typing.Any]]] = None,
4424
6103
  python_exec: typing.Optional[builtins.str] = None,
4425
6104
  ) -> None:
4426
6105
  """Type checking stubs"""
@@ -4439,7 +6118,7 @@ def _typecheckingstub__5eed5b0b32c136cc537ac5c8208e73e035698914697eda882cc3e7220
4439
6118
  pass
4440
6119
 
4441
6120
  def _typecheckingstub__3a59b8e6934c492000192079edad9aaf1327a40b3bdba4192b78814ddbbfa98a(
4442
- project: _Project_57d89203,
6121
+ scope: _constructs_77d1e7e8.IConstruct,
4443
6122
  *,
4444
6123
  dependencies: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
4445
6124
  dev_dependencies: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
@@ -4455,6 +6134,7 @@ def _typecheckingstub__3a59b8e6934c492000192079edad9aaf1327a40b3bdba4192b78814dd
4455
6134
  license: typing.Optional[builtins.str] = None,
4456
6135
  maintainers: typing.Optional[typing.Sequence[builtins.str]] = None,
4457
6136
  name: typing.Optional[builtins.str] = None,
6137
+ package_mode: typing.Optional[builtins.bool] = None,
4458
6138
  packages: typing.Optional[typing.Sequence[typing.Any]] = None,
4459
6139
  plugins: typing.Any = None,
4460
6140
  readme: typing.Optional[builtins.str] = None,
@@ -4481,6 +6161,7 @@ def _typecheckingstub__eb1217212a32e72c78081b42cb386e25f582240ca4f8a652cbb237b3c
4481
6161
  license: typing.Optional[builtins.str] = None,
4482
6162
  maintainers: typing.Optional[typing.Sequence[builtins.str]] = None,
4483
6163
  name: typing.Optional[builtins.str] = None,
6164
+ package_mode: typing.Optional[builtins.bool] = None,
4484
6165
  packages: typing.Optional[typing.Sequence[typing.Any]] = None,
4485
6166
  plugins: typing.Any = None,
4486
6167
  readme: typing.Optional[builtins.str] = None,
@@ -4493,6 +6174,14 @@ def _typecheckingstub__eb1217212a32e72c78081b42cb386e25f582240ca4f8a652cbb237b3c
4493
6174
  """Type checking stubs"""
4494
6175
  pass
4495
6176
 
6177
+ def _typecheckingstub__c75ee0fa1f03d64ef2f4f70177834504f849664100250bdf991680eba3b01d4e(
6178
+ *,
6179
+ email: typing.Optional[builtins.str] = None,
6180
+ name: typing.Optional[builtins.str] = None,
6181
+ ) -> None:
6182
+ """Type checking stubs"""
6183
+ pass
6184
+
4496
6185
  def _typecheckingstub__dd796c2ffac4ce790fd379f22162cb352a7e6e5fcca10c21249e16c756967555(
4497
6186
  project: _Project_57d89203,
4498
6187
  *,
@@ -4512,11 +6201,98 @@ def _typecheckingstub__7b016d0638a2d569458bc60c6c0631e67606ffba250b97da0a8bb9943
4512
6201
  """Type checking stubs"""
4513
6202
  pass
4514
6203
 
6204
+ def _typecheckingstub__e1fc10fe84bb8f10fcd95137adbc465ef44fa0a114d64da3b25bdc76d9324fe3(
6205
+ *,
6206
+ build_system: typing.Optional[typing.Union[BuildSystem, typing.Dict[builtins.str, typing.Any]]] = None,
6207
+ dependency_groups: typing.Optional[typing.Union[PyprojectTomlDependencyGroups, typing.Dict[builtins.str, typing.Any]]] = None,
6208
+ project: typing.Optional[typing.Union[PyprojectTomlProject, typing.Dict[builtins.str, typing.Any]]] = None,
6209
+ tool: typing.Optional[typing.Union[PyprojectTomlTool, typing.Dict[builtins.str, typing.Any]]] = None,
6210
+ ) -> None:
6211
+ """Type checking stubs"""
6212
+ pass
6213
+
6214
+ def _typecheckingstub__3172b8764f200359be57f771adc03f41306604c3a8551c94b129802a9f212c87(
6215
+ *,
6216
+ dev: typing.Optional[typing.Sequence[typing.Any]] = None,
6217
+ ) -> None:
6218
+ """Type checking stubs"""
6219
+ pass
6220
+
6221
+ def _typecheckingstub__d9e7cb471169a85cb7809c67deb7b7e20dde1ce20a6a49f8357e0726c13b0040(
6222
+ scope: _constructs_77d1e7e8.IConstruct,
6223
+ *,
6224
+ build_system: typing.Optional[typing.Union[BuildSystem, typing.Dict[builtins.str, typing.Any]]] = None,
6225
+ dependency_groups: typing.Optional[typing.Union[PyprojectTomlDependencyGroups, typing.Dict[builtins.str, typing.Any]]] = None,
6226
+ project: typing.Optional[typing.Union[PyprojectTomlProject, typing.Dict[builtins.str, typing.Any]]] = None,
6227
+ tool: typing.Optional[typing.Union[PyprojectTomlTool, typing.Dict[builtins.str, typing.Any]]] = None,
6228
+ ) -> None:
6229
+ """Type checking stubs"""
6230
+ pass
6231
+
6232
+ def _typecheckingstub__8c653bb340110f30f664421242162e21f98489f495f8991c5180052f98429065(
6233
+ resolver: _IResolver_0b7d1958,
6234
+ ) -> None:
6235
+ """Type checking stubs"""
6236
+ pass
6237
+
6238
+ def _typecheckingstub__b8e342a1a2af5016dbe0f8461f2a5c512da049f10c5dfb936ea942878407c985(
6239
+ *,
6240
+ name: builtins.str,
6241
+ authors: typing.Optional[typing.Sequence[typing.Union[ProjectAuthor, typing.Dict[builtins.str, typing.Any]]]] = None,
6242
+ classifiers: typing.Optional[typing.Sequence[builtins.str]] = None,
6243
+ dependencies: typing.Optional[typing.Sequence[builtins.str]] = None,
6244
+ description: typing.Optional[builtins.str] = None,
6245
+ dynamic: typing.Optional[typing.Sequence[PyprojectTomlProjectDynamic]] = None,
6246
+ entry_points: typing.Any = None,
6247
+ gui_scripts: typing.Optional[typing.Mapping[builtins.str, builtins.str]] = None,
6248
+ import_names: typing.Optional[typing.Sequence[builtins.str]] = None,
6249
+ import_namespaces: typing.Optional[typing.Sequence[builtins.str]] = None,
6250
+ keywords: typing.Optional[typing.Sequence[builtins.str]] = None,
6251
+ license: typing.Any = None,
6252
+ license_files: typing.Optional[typing.Sequence[builtins.str]] = None,
6253
+ maintainers: typing.Optional[typing.Sequence[typing.Union[ProjectAuthor, typing.Dict[builtins.str, typing.Any]]]] = None,
6254
+ optional_dependencies: typing.Any = None,
6255
+ readme: typing.Any = None,
6256
+ requires_python: typing.Optional[builtins.str] = None,
6257
+ scripts: typing.Optional[typing.Mapping[builtins.str, builtins.str]] = None,
6258
+ urls: typing.Optional[typing.Mapping[builtins.str, builtins.str]] = None,
6259
+ version: typing.Optional[builtins.str] = None,
6260
+ ) -> None:
6261
+ """Type checking stubs"""
6262
+ pass
6263
+
6264
+ def _typecheckingstub__bc2ba765e25294b713eef60bd54f79fe7e8b12bdfb44298beec4d108cc84cf15(
6265
+ *,
6266
+ black: typing.Any = None,
6267
+ cibuildwheel: typing.Any = None,
6268
+ hatch: typing.Any = None,
6269
+ maturin: typing.Any = None,
6270
+ mypy: typing.Any = None,
6271
+ pdm: typing.Any = None,
6272
+ poe: typing.Any = None,
6273
+ poetry: typing.Any = None,
6274
+ pyright: typing.Any = None,
6275
+ pytest: typing.Any = None,
6276
+ repo_review: typing.Any = None,
6277
+ ruff: typing.Any = None,
6278
+ scikit_build: typing.Any = None,
6279
+ setuptools: typing.Any = None,
6280
+ setuptools_scm: typing.Any = None,
6281
+ taskipy: typing.Any = None,
6282
+ tombi: typing.Any = None,
6283
+ tox: typing.Any = None,
6284
+ ty: typing.Any = None,
6285
+ uv: typing.Any = None,
6286
+ ) -> None:
6287
+ """Type checking stubs"""
6288
+ pass
6289
+
4515
6290
  def _typecheckingstub__ce0d8c554f8b4609921caa32636cdf3f53ff29d779d94c8c46d6322903608390(
4516
6291
  project: _Project_57d89203,
4517
6292
  *,
4518
6293
  max_failures: typing.Optional[jsii.Number] = None,
4519
6294
  testdir: typing.Optional[builtins.str] = None,
6295
+ test_match: typing.Optional[typing.Sequence[builtins.str]] = None,
4520
6296
  version: typing.Optional[builtins.str] = None,
4521
6297
  ) -> None:
4522
6298
  """Type checking stubs"""
@@ -4526,6 +6302,7 @@ def _typecheckingstub__4be1ab17806d0a3326c1d1b9ba1180daed1458dcbff7d77f34e7381dd
4526
6302
  *,
4527
6303
  max_failures: typing.Optional[jsii.Number] = None,
4528
6304
  testdir: typing.Optional[builtins.str] = None,
6305
+ test_match: typing.Optional[typing.Sequence[builtins.str]] = None,
4529
6306
  version: typing.Optional[builtins.str] = None,
4530
6307
  ) -> None:
4531
6308
  """Type checking stubs"""
@@ -4567,6 +6344,7 @@ def _typecheckingstub__8103f3b830f25b7a5e774ec261700198b120623a2bd5b4934a1fd82d8
4567
6344
  package_name: typing.Optional[builtins.str] = None,
4568
6345
  poetry_options: typing.Optional[typing.Union[PoetryPyprojectOptionsWithoutDeps, typing.Dict[builtins.str, typing.Any]]] = None,
4569
6346
  setup_config: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
6347
+ uv_options: typing.Optional[typing.Union[UvOptions, typing.Dict[builtins.str, typing.Any]]] = None,
4570
6348
  ) -> None:
4571
6349
  """Type checking stubs"""
4572
6350
  pass
@@ -4630,6 +6408,7 @@ def _typecheckingstub__b659222a1357930d78c896c62a88d02f0761b15a41c74e5e00700ccfe
4630
6408
  package_name: typing.Optional[builtins.str] = None,
4631
6409
  poetry_options: typing.Optional[typing.Union[PoetryPyprojectOptionsWithoutDeps, typing.Dict[builtins.str, typing.Any]]] = None,
4632
6410
  setup_config: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
6411
+ uv_options: typing.Optional[typing.Union[UvOptions, typing.Dict[builtins.str, typing.Any]]] = None,
4633
6412
  python_exec: typing.Optional[builtins.str] = None,
4634
6413
  module_name: builtins.str,
4635
6414
  deps: typing.Optional[typing.Sequence[builtins.str]] = None,
@@ -4645,7 +6424,9 @@ def _typecheckingstub__b659222a1357930d78c896c62a88d02f0761b15a41c74e5e00700ccfe
4645
6424
  pytest: typing.Optional[builtins.bool] = None,
4646
6425
  pytest_options: typing.Optional[typing.Union[PytestOptions, typing.Dict[builtins.str, typing.Any]]] = None,
4647
6426
  sample: typing.Optional[builtins.bool] = None,
6427
+ sample_testdir: typing.Optional[builtins.str] = None,
4648
6428
  setuptools: typing.Optional[builtins.bool] = None,
6429
+ uv: typing.Optional[builtins.bool] = None,
4649
6430
  venv: typing.Optional[builtins.bool] = None,
4650
6431
  venv_options: typing.Optional[typing.Union[VenvOptions, typing.Dict[builtins.str, typing.Any]]] = None,
4651
6432
  ) -> None:
@@ -4747,6 +6528,7 @@ def _typecheckingstub__990ed4ecaa4edf7848fc5144b71682e590ee9d8b8da5b2facfae58711
4747
6528
  package_name: typing.Optional[builtins.str] = None,
4748
6529
  poetry_options: typing.Optional[typing.Union[PoetryPyprojectOptionsWithoutDeps, typing.Dict[builtins.str, typing.Any]]] = None,
4749
6530
  setup_config: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
6531
+ uv_options: typing.Optional[typing.Union[UvOptions, typing.Dict[builtins.str, typing.Any]]] = None,
4750
6532
  python_exec: typing.Optional[builtins.str] = None,
4751
6533
  ) -> None:
4752
6534
  """Type checking stubs"""
@@ -4764,7 +6546,41 @@ def _typecheckingstub__efb76fcc4729646986081d64b0050704d856d4acab1092db7f22a97d7
4764
6546
  package_name: typing.Optional[builtins.str] = None,
4765
6547
  poetry_options: typing.Optional[typing.Union[PoetryPyprojectOptionsWithoutDeps, typing.Dict[builtins.str, typing.Any]]] = None,
4766
6548
  setup_config: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
6549
+ uv_options: typing.Optional[typing.Union[UvOptions, typing.Dict[builtins.str, typing.Any]]] = None,
6550
+ python_exec: typing.Optional[builtins.str] = None,
6551
+ ) -> None:
6552
+ """Type checking stubs"""
6553
+ pass
6554
+
6555
+ def _typecheckingstub__c6af3eeebf702d4696ff95e3dd9f7765abd1bead0231202b6c3d96e210ebae53(
6556
+ scope: _constructs_77d1e7e8.IConstruct,
6557
+ *,
6558
+ build_system: typing.Optional[typing.Union[BuildSystem, typing.Dict[builtins.str, typing.Any]]] = None,
6559
+ project: typing.Optional[typing.Union[PyprojectTomlProject, typing.Dict[builtins.str, typing.Any]]] = None,
6560
+ uv: typing.Optional[typing.Union[_UvConfiguration_126496a9, typing.Dict[builtins.str, typing.Any]]] = None,
6561
+ python_exec: typing.Optional[builtins.str] = None,
6562
+ ) -> None:
6563
+ """Type checking stubs"""
6564
+ pass
6565
+
6566
+ def _typecheckingstub__cfefccda3fbe1ff1c577b203b8a3bbfc01f7f1d4af0e6ac2d49593339709bd0c(
6567
+ spec: builtins.str,
6568
+ ) -> None:
6569
+ """Type checking stubs"""
6570
+ pass
6571
+
6572
+ def _typecheckingstub__476e06a93af3d873cd3d5aa2eb681ec297066fbb9e27bac268fb38df7b1fe327(
6573
+ spec: builtins.str,
6574
+ ) -> None:
6575
+ """Type checking stubs"""
6576
+ pass
6577
+
6578
+ def _typecheckingstub__7160d30dca474dc5d88b1ee88cb680c95003b72e43b0c36e6476ea71df3e39bc(
6579
+ *,
4767
6580
  python_exec: typing.Optional[builtins.str] = None,
6581
+ build_system: typing.Optional[typing.Union[BuildSystem, typing.Dict[builtins.str, typing.Any]]] = None,
6582
+ project: typing.Optional[typing.Union[PyprojectTomlProject, typing.Dict[builtins.str, typing.Any]]] = None,
6583
+ uv: typing.Optional[typing.Union[_UvConfiguration_126496a9, typing.Dict[builtins.str, typing.Any]]] = None,
4768
6584
  ) -> None:
4769
6585
  """Type checking stubs"""
4770
6586
  pass
@@ -4798,6 +6614,7 @@ def _typecheckingstub__ffb2a68f24fc1fda645188af9796f00c5dd2cfddf0c67e4d824be027c
4798
6614
  package_name: typing.Optional[builtins.str] = None,
4799
6615
  poetry_options: typing.Optional[typing.Union[PoetryPyprojectOptionsWithoutDeps, typing.Dict[builtins.str, typing.Any]]] = None,
4800
6616
  setup_config: typing.Optional[typing.Mapping[builtins.str, typing.Any]] = None,
6617
+ uv_options: typing.Optional[typing.Union[UvOptions, typing.Dict[builtins.str, typing.Any]]] = None,
4801
6618
  python_exec: typing.Optional[builtins.str] = None,
4802
6619
  ) -> None:
4803
6620
  """Type checking stubs"""
@@ -4817,6 +6634,7 @@ def _typecheckingstub__58d69e7441cb3bc0f904d3072147d8851b799f65424aafad7c14abead
4817
6634
  license: typing.Optional[builtins.str] = None,
4818
6635
  maintainers: typing.Optional[typing.Sequence[builtins.str]] = None,
4819
6636
  name: typing.Optional[builtins.str] = None,
6637
+ package_mode: typing.Optional[builtins.bool] = None,
4820
6638
  packages: typing.Optional[typing.Sequence[typing.Any]] = None,
4821
6639
  plugins: typing.Any = None,
4822
6640
  readme: typing.Optional[builtins.str] = None,
@@ -4830,3 +6648,6 @@ def _typecheckingstub__58d69e7441cb3bc0f904d3072147d8851b799f65424aafad7c14abead
4830
6648
  ) -> None:
4831
6649
  """Type checking stubs"""
4832
6650
  pass
6651
+
6652
+ for cls in [IPackageProvider, IPythonDeps, IPythonEnv, IPythonPackaging]:
6653
+ typing.cast(typing.Any, cls).__protocol_attrs__ = typing.cast(typing.Any, cls).__protocol_attrs__ - set(['__jsii_proxy_class__', '__jsii_type__'])