Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# FOSSA CLI Changelog

## v3.8.2
- Poetry: Defaults `category` to `main` if not present in lockfile. ([#1211](https://github.com/fossas/fossa-cli/pull/1211))

## v3.8.1
- Setup.py: Fixes an defect with `setup.py` parser, caused by failing to account for line comments or backslash. ([#1191](https://github.com/fossas/fossa-cli/pull/1191))
- Installation: `install-latest.sh` now directs `curl` and `wget` to pass `Cache-Control: no-cache` headers to the server. ([#1206](https://github.com/fossas/fossa-cli/pull/1206))
Expand Down
2 changes: 1 addition & 1 deletion docs/references/strategies/languages/python/poetry.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ We parse `pyproject.toml` to find direct dependencies and their [version constra
If `poetry.lock` file is discovered, following will be analyzed from lockfile to supplement the analyses:

- `[package.dependencies]` - package's dependencies
- `package.category` - package's environment (dev, test, etc.)
- `package.category` - package's environment (dev, test, etc.). If not present, defaults to `main`.
- `package.name` - name of the package
- `package.version` - resolved version of the package

Expand Down
15 changes: 11 additions & 4 deletions src/Strategy/Python/Poetry/Common.hs
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,14 @@ toMap pkgs = Map.fromList $ (\x -> (canonicalPkgName x, toDependency x)) <$> (fi

toDepEnvironment :: PoetryLockPackage -> DepEnvironment
toDepEnvironment pkg = case poetryLockPackageCategory pkg of
"dev" -> EnvDevelopment
"main" -> EnvProduction
"test" -> EnvTesting
other -> EnvOther other
Just category -> case category of
"dev" -> EnvDevelopment
"main" -> EnvProduction
"test" -> EnvTesting
other -> EnvOther other
Nothing -> defaultDepEnvironment

defaultDepEnvironment :: DepEnvironment
-- Poetry made this field optional. When not present, it defaults to `main`, which maps to `EnvProduction`.
-- https://github.com/python-poetry/poetry/pull/7637
defaultDepEnvironment = EnvProduction
53 changes: 35 additions & 18 deletions src/Strategy/Python/Poetry/PoetryLock.hs
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,10 @@ newtype PackageName = PackageName {unPackageName :: Text} deriving (Eq, Ord, Sho
poetryLockCodec :: TomlCodec PoetryLock
poetryLockCodec =
PoetryLock
<$> Toml.list poetryLockPackageCodec "package" .= poetryLockPackages
<*> Toml.table poetryMetadataCodec "metadata" .= poetryLockMetadata
<$> Toml.list poetryLockPackageCodec "package"
.= poetryLockPackages
<*> Toml.table poetryMetadataCodec "metadata"
.= poetryLockMetadata

-- | Metadata of poetry lock file.
data PoetryMetadata = PoetryMetadata
Expand All @@ -43,9 +45,12 @@ data PoetryMetadata = PoetryMetadata
poetryMetadataCodec :: TomlCodec PoetryMetadata
poetryMetadataCodec =
PoetryMetadata
<$> Toml.text "lock-version" .= poetryMetadataLockVersion
<*> Toml.text "content-hash" .= poetryMetadataContentHash
<*> Toml.text "python-versions" .= poetryMetadataPythonVersions
<$> Toml.text "lock-version"
.= poetryMetadataLockVersion
<*> Toml.text "content-hash"
.= poetryMetadataContentHash
<*> Toml.text "python-versions"
.= poetryMetadataPythonVersions

-- | A PoetryLockPackageSource represents [package.source] field in poetry.lock.
-- Source indicates from where the package was retrieved.
Expand All @@ -61,7 +66,7 @@ data PoetryLockPackageSource = PoetryLockPackageSource
data PoetryLockPackage = PoetryLockPackage
{ poetryLockPackageName :: PackageName
, poetryLockPackageVersion :: Text
, poetryLockPackageCategory :: Text
, poetryLockPackageCategory :: Maybe Text
, poetryLockPackageOptional :: Bool
, poetryLockPackagePythonVersions :: Text
, poetryLockPackageDependencies :: Map Text PoetryLockDependencySpec
Expand All @@ -72,21 +77,32 @@ data PoetryLockPackage = PoetryLockPackage
poetryLockPackageCodec :: TomlCodec PoetryLockPackage
poetryLockPackageCodec =
PoetryLockPackage
<$> Toml.diwrap (Toml.text "name") .= poetryLockPackageName
<*> Toml.text "version" .= poetryLockPackageVersion
<*> Toml.text "category" .= poetryLockPackageCategory
<*> Toml.bool "optional" .= poetryLockPackageOptional
<*> Toml.text "python-versions" .= poetryLockPackagePythonVersions
<*> Toml.tableMap Toml._KeyText poetryLockPackagePoetryLockDependencySpecCodec "dependencies" .= poetryLockPackageDependencies
<*> Toml.dioptional (Toml.table poetryLockPackageSourceCodec "source") .= poetryLockPackageSource
<$> Toml.diwrap (Toml.text "name")
.= poetryLockPackageName
<*> Toml.text "version"
.= poetryLockPackageVersion
<*> Toml.dioptional (Toml.text "category")
.= poetryLockPackageCategory
<*> Toml.bool "optional"
.= poetryLockPackageOptional
<*> Toml.text "python-versions"
.= poetryLockPackagePythonVersions
<*> Toml.tableMap Toml._KeyText poetryLockPackagePoetryLockDependencySpecCodec "dependencies"
.= poetryLockPackageDependencies
<*> Toml.dioptional (Toml.table poetryLockPackageSourceCodec "source")
.= poetryLockPackageSource

poetryLockPackageSourceCodec :: TomlCodec PoetryLockPackageSource
poetryLockPackageSourceCodec =
PoetryLockPackageSource
<$> Toml.text "type" .= poetryLockPackageSourceType
<*> Toml.text "url" .= poetryLockPackageSourceUrl
<*> Toml.dioptional (Toml.text "reference") .= poetryLockPackageSourceReference
<*> Toml.dioptional (Toml.text "resolved_reference") .= poetryLockPackageSourceResolvedReference
<$> Toml.text "type"
.= poetryLockPackageSourceType
<*> Toml.text "url"
.= poetryLockPackageSourceUrl
<*> Toml.dioptional (Toml.text "reference")
.= poetryLockPackageSourceReference
<*> Toml.dioptional (Toml.text "resolved_reference")
.= poetryLockPackageSourceResolvedReference

data PoetryLockDependencySpec
= TextVersion Text
Expand All @@ -102,7 +118,8 @@ newtype ObjectVersion = ObjectVersion
objectVersionCodec :: TomlCodec ObjectVersion
objectVersionCodec =
ObjectVersion
<$> Toml.text "version" .= unObjectVersion
<$> Toml.text "version"
.= unObjectVersion

matchTextVersion :: PoetryLockDependencySpec -> Maybe Text
matchTextVersion (TextVersion version) = Just version
Expand Down
12 changes: 6 additions & 6 deletions test/Python/Poetry/CommonSpec.hs
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ notSupportedPoetryLockDependency =
PoetryLockPackage
{ poetryLockPackageName = PackageName "pkgSourcedFromFile"
, poetryLockPackageVersion = "1.1.0"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Just "main"
, poetryLockPackageOptional = False
, poetryLockPackageDependencies = Map.empty
, poetryLockPackagePythonVersions = "*"
Expand Down Expand Up @@ -184,7 +184,7 @@ spec = do
[ PoetryLockPackage
{ poetryLockPackageName = PackageName "pkgOne"
, poetryLockPackageVersion = "1.21.0"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Just "main"
, poetryLockPackageOptional = False
, poetryLockPackageDependencies =
Map.fromList
Expand Down Expand Up @@ -216,7 +216,7 @@ spec = do
[ PoetryLockPackage
{ poetryLockPackageName = PackageName "pkgWithGitSource"
, poetryLockPackageVersion = "5.22.0.post0"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Just "main"
, poetryLockPackageOptional = False
, poetryLockPackageDependencies = Map.empty
, poetryLockPackagePythonVersions = "*"
Expand All @@ -243,7 +243,7 @@ spec = do
[ PoetryLockPackage
{ poetryLockPackageName = PackageName "pkgSourcedFromUrl"
, poetryLockPackageVersion = "3.92.1"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Just "main"
, poetryLockPackageOptional = False
, poetryLockPackageDependencies = Map.empty
, poetryLockPackagePythonVersions = "*"
Expand All @@ -270,7 +270,7 @@ spec = do
[ PoetryLockPackage
{ poetryLockPackageName = PackageName "pkgSourcedFromFile"
, poetryLockPackageVersion = "1.21.0"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Just "main"
, poetryLockPackageOptional = False
, poetryLockPackageDependencies = Map.empty
, poetryLockPackagePythonVersions = "*"
Expand All @@ -285,7 +285,7 @@ spec = do
[ PoetryLockPackage
{ poetryLockPackageName = PackageName "myprivatepkg"
, poetryLockPackageVersion = "0.0.1"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Just "main"
, poetryLockPackageOptional = False
, poetryLockPackageDependencies = Map.empty
, poetryLockPackagePythonVersions = ">=3.6"
Expand Down
16 changes: 8 additions & 8 deletions test/Python/Poetry/PoetryLockSpec.hs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ expectedPoetryLock =
[ PoetryLockPackage
{ poetryLockPackageName = PackageName "pkgWithGitSource"
, poetryLockPackageVersion = "5.22.0.post0"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Just "some_other_category"
, poetryLockPackageOptional = False
, poetryLockPackageDependencies = Map.empty
, poetryLockPackagePythonVersions = "*"
Expand All @@ -51,7 +51,7 @@ expectedPoetryLock =
, PoetryLockPackage
{ poetryLockPackageName = PackageName "pkgSourcedFromFile"
, poetryLockPackageVersion = "1.21.0"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Just "main"
, poetryLockPackageOptional = False
, poetryLockPackageDependencies = Map.empty
, poetryLockPackagePythonVersions = "*"
Expand All @@ -67,7 +67,7 @@ expectedPoetryLock =
, PoetryLockPackage
{ poetryLockPackageName = PackageName "pkgSourcedFromUrl"
, poetryLockPackageVersion = "3.92.1"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Nothing
, poetryLockPackageOptional = False
, poetryLockPackageDependencies = Map.empty
, poetryLockPackagePythonVersions = "*"
Expand All @@ -83,7 +83,7 @@ expectedPoetryLock =
, PoetryLockPackage
{ poetryLockPackageName = PackageName "pkgOne"
, poetryLockPackageVersion = "1.21.0"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Nothing
, poetryLockPackageOptional = False
, poetryLockPackageDependencies =
Map.fromList
Expand All @@ -103,7 +103,7 @@ expectedPoetryLock =
, PoetryLockPackage
{ poetryLockPackageName = PackageName "pkgOneChildofOne"
, poetryLockPackageVersion = "11.4"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Nothing
, poetryLockPackageOptional = False
, poetryLockPackageDependencies = Map.empty
, poetryLockPackagePythonVersions = "*"
Expand All @@ -112,7 +112,7 @@ expectedPoetryLock =
, PoetryLockPackage
{ poetryLockPackageName = PackageName "pkgTwoChildofOne"
, poetryLockPackageVersion = "5.4"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Nothing
, poetryLockPackageOptional = False
, poetryLockPackageDependencies = Map.empty
, poetryLockPackagePythonVersions = "*"
Expand All @@ -121,7 +121,7 @@ expectedPoetryLock =
, PoetryLockPackage
{ poetryLockPackageName = PackageName "pkgThreeChildofOne"
, poetryLockPackageVersion = "1.6.1"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Nothing
, poetryLockPackageOptional = False
, poetryLockPackageDependencies = Map.empty
, poetryLockPackagePythonVersions = "*"
Expand All @@ -130,7 +130,7 @@ expectedPoetryLock =
, PoetryLockPackage
{ poetryLockPackageName = PackageName "myprivatepkg"
, poetryLockPackageVersion = "0.0.1"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Nothing
, poetryLockPackageOptional = False
, poetryLockPackageDependencies = Map.empty
, poetryLockPackagePythonVersions = ">=3.6"
Expand Down
8 changes: 1 addition & 7 deletions test/Python/Poetry/testdata/poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 5 additions & 5 deletions test/Python/PoetrySpec.hs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ candidatePoetryLock =
[ PoetryLockPackage
{ poetryLockPackageName = PackageName "flow_pipes"
, poetryLockPackageVersion = "1.21.0"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Just "main"
, poetryLockPackageOptional = False
, poetryLockPackageDependencies = Map.fromList [("flow_pipes_gravity", TextVersion "^1.1")]
, poetryLockPackagePythonVersions = "*"
Expand All @@ -45,7 +45,7 @@ candidatePoetryLock =
, PoetryLockPackage
{ poetryLockPackageName = PackageName "flow_pipes_gravity"
, poetryLockPackageVersion = "1.1.1"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Just "main"
, poetryLockPackageOptional = False
, poetryLockPackageDependencies = Map.empty
, poetryLockPackagePythonVersions = "*"
Expand Down Expand Up @@ -83,7 +83,7 @@ spec = do
[ PoetryLockPackage
{ poetryLockPackageName = PackageName "somePkg"
, poetryLockPackageVersion = "1.21.0"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Just "main"
, poetryLockPackageOptional = False
, poetryLockPackageDependencies = Map.empty
, poetryLockPackagePythonVersions = "*"
Expand All @@ -99,7 +99,7 @@ spec = do
[ PoetryLockPackage
{ poetryLockPackageName = PackageName "somePkg"
, poetryLockPackageVersion = "1.21.0"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Just "main"
, poetryLockPackageOptional = False
, poetryLockPackageDependencies = Map.fromList [("pkgOneChildOne", TextVersion "*")]
, poetryLockPackagePythonVersions = "*"
Expand All @@ -108,7 +108,7 @@ spec = do
, PoetryLockPackage
{ poetryLockPackageName = PackageName "pkgOneChildOne"
, poetryLockPackageVersion = "1.22.0"
, poetryLockPackageCategory = "main"
, poetryLockPackageCategory = Just "main"
, poetryLockPackageOptional = False
, poetryLockPackageDependencies = Map.empty
, poetryLockPackagePythonVersions = "*"
Expand Down