pulumi/pkg/codegen/python/pyproject.go

89 lines
4.5 KiB
Go

// Copyright 2023-2024, Pulumi Corporation.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package python
// The specification for the pyproject.toml file can be found here.
// https://packaging.python.org/en/latest/specifications/declaring-project-metadata/
type PyprojectSchema struct {
Project *Project `toml:"project,omitempty" json:"project,omitempty"`
BuildSystem *BuildSystem `toml:"build-system,omitempty" json:"build-system,omitempty"`
Tool map[string]interface{} `toml:"tool,omitempty" json:"tool,omitempty"`
}
// Project is a view layer for a pyproject.toml file.
type Project struct {
Name *string `toml:"name,omitempty" json:"name,omitempty"`
Authors []Contact `toml:"authors,omitempty" json:"authors,omitempty"`
Classifiers []string `toml:"classifiers,omitempty" json:"classifiers,omitempty"`
Description *string `toml:"description,omitempty" json:"description,omitempty"`
Dependencies []string `toml:"dependencies,omitempty" json:"dependencies,omitempty"`
Dynamic []string `toml:"dynamic,omitempty" json:"dynamic,omitempty"`
EntryPoints Entrypoints `toml:"entry-points,omitempty" json:"entry-points,omitempty"`
GUIScripts Entrypoints `toml:"gui-scripts,omitempty" json:"gui-scripts,omitempty"`
// These are keywords used in package search.
Keywords []string `toml:"keywords,omitempty" json:"keywords,omitempty"`
License *License `toml:"license,omitempty" json:"license,omitempty"`
Maintainers []Contact `toml:"maintainers,omitempty" json:"maintainers,omitempty"`
//nolint:lll
OptionalDependencies OptionalDependencies `toml:"optional-dependencies,omitempty" json:"optional-dependencies,omitempty"`
// README is a path to a .md file or a .rst file
README *string `toml:"readme,omitempty" json:"readme,omitempty"`
// The version constraint e.g. ">=3.8"
RequiresPython *string `toml:"requires-python,omitempty" json:"requires-python,omitempty"`
Scripts Entrypoints `toml:"scripts,omitempty" json:"scripts,omitempty"`
// URLs provides core metadata about this project's website, a link
// to the repo, project documentation, and the project homepage.
URLs map[string]string `toml:"urls,omitempty" json:"urls,omitempty"`
// Version is the package version.
Version *string `toml:"version,omitempty" json:"version,omitempty"`
}
type BuildSystem struct {
Requires []string `toml:"requires,omitempty" json:"requires,omitempty"`
BuildBackend string `toml:"build-backend,omitempty" json:"build-backend,omitempty"`
}
// Contact references someone associated with the project, including
// their contact information. Contacts are used for both Authors and
// Maintainers, since both fields have the same schema and specification.
// It is often easier to specify both fields,
// but the precise rules for specifying either one or the other field
// can be found here:
// https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#authors-maintainers
type Contact struct {
Name string `toml:"name,omitempty" json:"name,omitempty"`
Email string `toml:"email,omitempty" json:"email,omitempty"`
}
// An Entrypoint is an object reference for an executable Python script. These
// scripts can be applications, plugins, or build-time metadata. Since Pulumi
// distributes libraries, we largely don't use this field, though we include it
// for completeness and consistency with the spec.
type Entrypoints map[string]string
// The license instance must populate either
// file or text, but not both. File is a path
// to a license file, while text is either the
// name of the license, or the text of the license.
type License struct {
File string `toml:"file,omitempty" json:"file,omitempty"`
Text string `toml:"text,omitempty" json:"text,omitempty"`
}
// OptionalDependencies provides a map from "Extras" (parlance specific to Python)
// to their dependencies. Each value in the array becomes a required dependency
// if the Extra is enabled.
type OptionalDependencies map[string][]string