bower.py: new generator
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
31cb1de5a8
commit
a806f39cbb
|
@ -12,6 +12,7 @@ gentle
|
|||
Supported generators
|
||||
--------------------
|
||||
|
||||
* [Bower](https://github.com/bower/spec/blob/master/json.md)
|
||||
* Crystal ([Shards](https://github.com/crystal-lang/shards/blob/master/docs/shard.yml.adoc))
|
||||
* Node.js ([npm](https://docs.npmjs.com/files/package.json/))
|
||||
* Python ([PEP 621](https://peps.python.org/pep-0621/))
|
||||
|
|
|
@ -13,6 +13,7 @@ import gentle
|
|||
from gentle.generators import AbstractGenerator
|
||||
from gentle.metadata import MetadataXML
|
||||
|
||||
import gentle.generators.bower
|
||||
import gentle.generators.cargo
|
||||
import gentle.generators.composer
|
||||
import gentle.generators.npm
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
# SPDX-License-Identifier: WTFPL
|
||||
# SPDX-FileCopyrightText: 2023 Anna <cyber@sysrq.in>
|
||||
# No warranty
|
||||
|
||||
"""
|
||||
Metadata XML generator for Bower.
|
||||
|
||||
The following attributes are supported:
|
||||
|
||||
* Upstream maintainer(s)
|
||||
* Remote ID
|
||||
"""
|
||||
|
||||
import json
|
||||
import logging
|
||||
from pathlib import Path
|
||||
|
||||
from gentle.generators import AbstractGenerator
|
||||
from gentle.metadata import Person, MetadataXML
|
||||
from gentle.metadata.utils import extract_name_email, extract_remote_id
|
||||
|
||||
logger = logging.getLogger("bower")
|
||||
|
||||
|
||||
class BowerGenerator(AbstractGenerator):
|
||||
def __init__(self, srcdir: Path):
|
||||
self.bower_json = srcdir / "bower.json"
|
||||
|
||||
def update_metadata_xml(self, mxml: MetadataXML) -> None:
|
||||
with open(self.bower_json) as file:
|
||||
try:
|
||||
package = json.load(file)
|
||||
except json.decoder.JSONDecodeError:
|
||||
return
|
||||
|
||||
for maint in package.get("authors", []):
|
||||
logger.info("Found upstream maintainer: %s", maint)
|
||||
if isinstance(maint, str):
|
||||
person = extract_name_email(maint)
|
||||
else:
|
||||
person = Person(name=maint.get("name", ""),
|
||||
email=maint.get("email", ""))
|
||||
|
||||
if person is not None and person.name:
|
||||
mxml.add_upstream_maintainer(person)
|
||||
|
||||
if (homepage := package.get("homepage")) is not None:
|
||||
logger.info("Found homepage: %s", homepage)
|
||||
if (remote_id := extract_remote_id(homepage)) is not None:
|
||||
mxml.add_upstream_remote_id(remote_id)
|
||||
|
||||
@property
|
||||
def active(self) -> bool:
|
||||
return self.bower_json.is_file()
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"name": "aurelia-framework",
|
||||
"version": "1.4.1",
|
||||
"description": "The aurelia framework brings together all the required core aurelia libraries into a ready-to-go application-building platform.",
|
||||
"keywords": [
|
||||
"aurelia",
|
||||
"framework",
|
||||
"spa"
|
||||
],
|
||||
"homepage": "http://aurelia.io",
|
||||
"main": "dist/commonjs/aurelia-framework.js",
|
||||
"moduleType": "node",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
"Rob Eisenberg <rob@bluespire.com> (http://robeisenberg.com/)"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "http://github.com/aurelia/framework"
|
||||
},
|
||||
"dependencies": {
|
||||
"aurelia-binding": "^2.0.0",
|
||||
"aurelia-dependency-injection": "^1.0.0",
|
||||
"aurelia-loader": "^1.0.0",
|
||||
"aurelia-logging": "^1.0.0",
|
||||
"aurelia-metadata": "^1.0.0",
|
||||
"aurelia-pal": "^1.0.0",
|
||||
"aurelia-path": "^1.0.0",
|
||||
"aurelia-task-queue": "^1.0.0",
|
||||
"aurelia-templating": "^1.11.1"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
SPDX-FileCopyrightText: 2023 Rob Eisenberg <rob@bluespire.com>
|
||||
|
||||
SPDX-License-Identifier: MIT
|
|
@ -0,0 +1,8 @@
|
|||
<pkgmetadata>
|
||||
<upstream>
|
||||
<maintainer>
|
||||
<name>Rob Eisenberg</name>
|
||||
<email>rob@bluespire.com</email>
|
||||
</maintainer>
|
||||
</upstream>
|
||||
</pkgmetadata>
|
|
@ -0,0 +1,3 @@
|
|||
SPDX-FileCopyrightText: 2023 Anna <cyber@sysrq.in>
|
||||
|
||||
SPDX-License-Identifier: CC0-1.0
|
|
@ -0,0 +1,41 @@
|
|||
# SPDX-License-Identifier: WTFPL
|
||||
# SPDX-FileCopyrightText: 2023 Anna <cyber@sysrq.in>
|
||||
# No warranty
|
||||
|
||||
from copy import deepcopy
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from gentle.generators.bower import BowerGenerator
|
||||
from gentle.metadata import MetadataXML
|
||||
|
||||
from tests.utils import compare_mxml
|
||||
|
||||
|
||||
def test_pkg_none(mxml: MetadataXML):
|
||||
gen = BowerGenerator(Path(__file__).parent / "pkg_none")
|
||||
assert not gen.active
|
||||
|
||||
|
||||
def test_pkg_empty(mxml: MetadataXML):
|
||||
gen = BowerGenerator(Path(__file__).parent / "pkg_empty")
|
||||
assert gen.active
|
||||
|
||||
mxml_old = deepcopy(mxml)
|
||||
gen.update_metadata_xml(mxml)
|
||||
assert compare_mxml(mxml_old, mxml) == ""
|
||||
|
||||
|
||||
@pytest.mark.parametrize("dirname", ["aurelia"])
|
||||
def test_pkg(mxml: MetadataXML, dirname: str):
|
||||
gen = BowerGenerator(Path(__file__).parent / dirname)
|
||||
assert gen.active
|
||||
|
||||
gen.update_metadata_xml(mxml)
|
||||
with open(Path(__file__).parent / dirname / "metadata.xml") as file:
|
||||
assert mxml.dumps() == file.read().rstrip()
|
||||
|
||||
mxml_prev = deepcopy(mxml)
|
||||
gen.update_metadata_xml(mxml)
|
||||
assert compare_mxml(mxml_prev, mxml) == ""
|
Loading…
Reference in New Issue