Skip to content

Commit f4e879e

Browse files
committed
Add configuration for creating .desktop files in distributions.
1 parent e88a30d commit f4e879e

File tree

8 files changed

+47
-1
lines changed

8 files changed

+47
-1
lines changed

repo_helper/configuration/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
)
7777
from repo_helper.configuration.other import (
7878
additional_ignore,
79+
desktopfile,
7980
exclude_files,
8081
imgbot_ignore,
8182
pkginfo_extra,
@@ -205,6 +206,7 @@
205206
"enable_devmode",
206207
"pre_commit_exclude",
207208
"dump_schema",
209+
"desktopfile",
208210
]
209211

210212

@@ -304,6 +306,7 @@ def parse_yaml(repo_path: PathLike) -> Dict:
304306
use_experimental_backend,
305307
pre_commit_exclude,
306308
entry_points,
309+
desktopfile,
307310
]
308311

309312

repo_helper/configuration/other.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@
3636
"imgbot_ignore",
3737
"pkginfo_extra",
3838
"exclude_files",
39-
"pre_commit_exclude"
39+
"pre_commit_exclude",
40+
"desktopfile",
4041
]
4142

4243

@@ -163,3 +164,20 @@ class pre_commit_exclude(ConfigVar): # noqa
163164
@classmethod
164165
def validate(cls, raw_config_vars: Optional[Dict[str, Any]] = None) -> Any:
165166
return re.compile(super().validate(raw_config_vars)).pattern
167+
168+
169+
class desktopfile(ConfigVar): # noqa
170+
"""
171+
A key value mapping of entries for a Linux ``.desktop`` file.
172+
173+
.. code-block:: yaml
174+
175+
desktopfile:
176+
Exec: wxIconSaver
177+
Icon: document-save
178+
179+
``Version``, ``Name`` and ``Comment`` are pre-populated from :conf:`version`, :conf:`modname` and :conf:`short_desc`.
180+
"""
181+
182+
dtype = Dict[str, str]
183+
default: Dict[str, str] = {}

repo_helper/configuration/packaging.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ class use_experimental_backend(ConfigVar): # noqa
266266
def validate(cls, raw_config_vars: Optional[Dict[str, Any]] = None) -> Any: # noqa: D102
267267

268268
# this package
269+
from repo_helper.configuration import desktopfile
269270
from repo_helper.configuration.metadata import pure_python
270271
from repo_helper.configuration.other import exclude_files
271272

@@ -279,6 +280,7 @@ def validate(cls, raw_config_vars: Optional[Dict[str, Any]] = None) -> Any: # n
279280
additional_setup_args,
280281
setup_pre,
281282
py_modules,
283+
desktopfile,
282284
)
283285

284286
for key in disallowed_keys:

repo_helper/files/packaging.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,9 @@ def make_setup(repo_path: pathlib.Path, templates: jinja2.Environment) -> List[s
167167
data["description"] = repr(templates.globals["short_desc"])
168168
data["py_modules"] = templates.globals["py_modules"]
169169

170+
if templates.globals["desktopfile"]:
171+
data["data_files"] = "[('share/applications', ['{modname}.desktop'])]".format_map(templates.globals)
172+
170173
setup_args = sorted({**data, **templates.globals["additional_setup_args"]}.items())
171174

172175
setup_file.write_clean(setup.render(additional_setup_args="\n".join(f"\t\t{k}={v}," for k, v in setup_args)))

repo_helper/repo_helper_schema.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,10 @@
427427
"entry_points": {
428428
"type": "object",
429429
"description": "A mapping of entry point categories to a list of entries for each category."
430+
},
431+
"desktopfile": {
432+
"type": "object",
433+
"description": "A key value mapping of entries for a Linux ``.desktop`` file."
430434
}
431435
},
432436
"required": [

repo_helper/templates/setup._py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,19 @@ sys.path.append('.')
1212
# this package
1313
from __pkginfo__ import * # pylint: disable=wildcard-import
1414

15+
{% if desktopfile %}
16+
from textwrap import dedent
17+
with open('{{ modname }}.desktop', 'w') as desktop:
18+
desktop.write(dedent(f"""\
19+
[Desktop Entry]
20+
Version={__version__}
21+
Name={{ modname }}
22+
Comment={{ short_desc }}
23+
{% for k, v in desktopfile.items() %}{{ k }}={{ v }}
24+
{% endfor %}"""
25+
))
26+
{% endif %}
27+
1528
{{ "\n".join(setup_pre) }}
1629

1730
setup(

tests/test_configuration_/test_parse_yaml.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ console_scripts:
2727
- repo_helper = repo_helper.__main__:main
2828
- repo-helper = repo_helper.__main__:main
2929
copyright_years: '2020'
30+
desktopfile: {}
3031
docker_name: ''
3132
docker_shields: false
3233
docs_dir: doc-source

tests/test_files/test_packaging.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ def test_make_manifest_case_2(tmp_pathplus, demo_environment, file_regression: F
5656

5757
def test_make_setup_case_1(tmp_pathplus, demo_environment, file_regression: FileRegressionFixture):
5858
demo_environment.globals["use_experimental_backend"] = False
59+
demo_environment.globals["desktopfile"] = {}
5960

6061
managed_files = make_setup(tmp_pathplus, demo_environment)
6162
assert managed_files == ["setup.py"]
@@ -64,6 +65,7 @@ def test_make_setup_case_1(tmp_pathplus, demo_environment, file_regression: File
6465

6566
def test_make_setup_case_2(tmp_pathplus, demo_environment, file_regression: FileRegressionFixture):
6667
demo_environment.globals["use_experimental_backend"] = False
68+
demo_environment.globals["desktopfile"] = {}
6769

6870
demo_environment.globals.update(
6971
dict(

0 commit comments

Comments
 (0)