mac-alias 2.2.3__tar.gz → 2.2.4rc1__tar.gz
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.
- mac_alias-2.2.4rc1/.github/dependabot.yml +30 -0
- mac_alias-2.2.4rc1/.github/workflows/ci.yml +114 -0
- mac_alias-2.2.4rc1/.github/workflows/dependabot-changenote.yml +19 -0
- mac_alias-2.2.4rc1/.github/workflows/publish.yml +22 -0
- mac_alias-2.2.4rc1/.github/workflows/release.yml +86 -0
- mac_alias-2.2.4rc1/.github/zizmor.yml +9 -0
- mac_alias-2.2.4rc1/.gitignore +14 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/.pre-commit-config.yaml +5 -1
- mac_alias-2.2.4rc1/CHANGELOG.md +144 -0
- mac_alias-2.2.4rc1/PKG-INFO +39 -0
- mac_alias-2.2.4rc1/README.md +11 -0
- mac_alias-2.2.4rc1/changes/template.md +29 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/docs/conf.py +2 -9
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/pyproject.toml +38 -17
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/src/mac_alias/__init__.py +31 -29
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/src/mac_alias/alias.py +6 -4
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/src/mac_alias/bookmark.py +4 -4
- mac_alias-2.2.4rc1/src/mac_alias.egg-info/PKG-INFO +39 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/src/mac_alias.egg-info/SOURCES.txt +12 -2
- mac_alias-2.2.4rc1/src/mac_alias.egg-info/scm_file_list.json +35 -0
- mac_alias-2.2.4rc1/src/mac_alias.egg-info/scm_version.json +8 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/tox.ini +14 -10
- mac_alias-2.2.3/PKG-INFO +0 -72
- mac_alias-2.2.3/README.rst +0 -44
- mac_alias-2.2.3/src/mac_alias.egg-info/PKG-INFO +0 -72
- mac_alias-2.2.3/src/mac_alias.egg-info/entry_points.txt +0 -2
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/.readthedocs.yaml +0 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/LICENSE +0 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/docs/Makefile +0 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/docs/_static/README.rst +0 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/docs/alias_fmt.rst +0 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/docs/bookmark_fmt.rst +0 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/docs/index.rst +0 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/docs/mac_alias.rst +0 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/docs/make.bat +0 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/setup.cfg +0 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/src/mac_alias/osx.py +0 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/src/mac_alias/utils.py +0 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/src/mac_alias.egg-info/dependency_links.txt +0 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/src/mac_alias.egg-info/top_level.txt +0 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/tests/__init__.py +0 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/tests/test_alias.py +0 -0
- {mac_alias-2.2.3 → mac_alias-2.2.4rc1}/tests/test_bookmark.py +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
|
|
3
|
+
multi-ecosystem-groups:
|
|
4
|
+
dependencies:
|
|
5
|
+
schedule:
|
|
6
|
+
# Check for updates on the first Sunday of every month, 8PM UTC
|
|
7
|
+
interval: "cron"
|
|
8
|
+
cronjob: "0 20 * * sun#1"
|
|
9
|
+
|
|
10
|
+
updates:
|
|
11
|
+
- package-ecosystem: "github-actions"
|
|
12
|
+
directory: "/"
|
|
13
|
+
patterns: ["*"]
|
|
14
|
+
multi-ecosystem-group: "dependencies"
|
|
15
|
+
cooldown:
|
|
16
|
+
default-days: 7
|
|
17
|
+
|
|
18
|
+
- package-ecosystem: "pip"
|
|
19
|
+
directory: "/"
|
|
20
|
+
patterns: ["*"]
|
|
21
|
+
multi-ecosystem-group: "dependencies"
|
|
22
|
+
cooldown:
|
|
23
|
+
default-days: 7
|
|
24
|
+
|
|
25
|
+
- package-ecosystem: "pre-commit"
|
|
26
|
+
directory: "/"
|
|
27
|
+
patterns: ["*"]
|
|
28
|
+
multi-ecosystem-group: "dependencies"
|
|
29
|
+
cooldown:
|
|
30
|
+
default-days: 7
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
on:
|
|
3
|
+
pull_request:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
workflow_call:
|
|
8
|
+
inputs:
|
|
9
|
+
attest-package:
|
|
10
|
+
description: "Create GitHub provenance attestation for the package."
|
|
11
|
+
default: "false"
|
|
12
|
+
type: string
|
|
13
|
+
outputs:
|
|
14
|
+
artifact-basename:
|
|
15
|
+
description: "Base name of the uploaded artifacts; use for artifact retrieval."
|
|
16
|
+
value: ${{ jobs.package.outputs.artifact-basename }}
|
|
17
|
+
|
|
18
|
+
# Cancel active CI runs for a PR before starting another run
|
|
19
|
+
concurrency:
|
|
20
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
21
|
+
cancel-in-progress: true
|
|
22
|
+
|
|
23
|
+
permissions:
|
|
24
|
+
contents: read
|
|
25
|
+
|
|
26
|
+
defaults:
|
|
27
|
+
run:
|
|
28
|
+
shell: bash
|
|
29
|
+
|
|
30
|
+
env:
|
|
31
|
+
FORCE_COLOR: "1"
|
|
32
|
+
|
|
33
|
+
jobs:
|
|
34
|
+
pre-commit:
|
|
35
|
+
name: Pre-commit checks
|
|
36
|
+
runs-on: "ubuntu-latest"
|
|
37
|
+
steps:
|
|
38
|
+
- name: Checkout
|
|
39
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
40
|
+
with:
|
|
41
|
+
persist-credentials: false
|
|
42
|
+
fetch-depth: 1
|
|
43
|
+
|
|
44
|
+
- name: Set up Python
|
|
45
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
46
|
+
with:
|
|
47
|
+
python-version: "3.X"
|
|
48
|
+
|
|
49
|
+
- name: Lint with prek
|
|
50
|
+
uses: j178/prek-action@44924fe9ef4a6f88253c4b6b1bf11c689d3ce53d # v3.1.0
|
|
51
|
+
|
|
52
|
+
towncrier:
|
|
53
|
+
name: Check towncrier
|
|
54
|
+
uses: beeware/.github/.github/workflows/towncrier-run.yml@main
|
|
55
|
+
permissions:
|
|
56
|
+
contents: read
|
|
57
|
+
pull-requests: write
|
|
58
|
+
with:
|
|
59
|
+
tox-source: "--group tox"
|
|
60
|
+
|
|
61
|
+
package:
|
|
62
|
+
name: Package mac_alias
|
|
63
|
+
needs: [ pre-commit, towncrier ]
|
|
64
|
+
permissions:
|
|
65
|
+
id-token: write
|
|
66
|
+
attestations: write
|
|
67
|
+
contents: read
|
|
68
|
+
uses: beeware/.github/.github/workflows/python-package-create.yml@main
|
|
69
|
+
with:
|
|
70
|
+
attest: ${{ inputs.attest-package }}
|
|
71
|
+
|
|
72
|
+
unit-tests:
|
|
73
|
+
name: Unit tests
|
|
74
|
+
needs: package
|
|
75
|
+
strategy:
|
|
76
|
+
fail-fast: false
|
|
77
|
+
matrix:
|
|
78
|
+
python-version: [ "3.11", "3.12", "3.13", "3.14", "3.15", "3.16" ]
|
|
79
|
+
include:
|
|
80
|
+
# Run all Python versions on M1
|
|
81
|
+
- macOS-version: "macos-26"
|
|
82
|
+
|
|
83
|
+
# Run the most recent Python on macOS 15 M1
|
|
84
|
+
- python-version: "3.x"
|
|
85
|
+
macOS-version: "macos-15"
|
|
86
|
+
# Run the most recent Python on macOS 15 intel
|
|
87
|
+
- python-version: "3.x"
|
|
88
|
+
macOS-version: "macos-15-intel"
|
|
89
|
+
# Run the most recent Python on macOS 27
|
|
90
|
+
- python-version: "3.x"
|
|
91
|
+
macOS-version: "xcode-27"
|
|
92
|
+
|
|
93
|
+
runs-on: ${{ matrix.macOS-version }}
|
|
94
|
+
steps:
|
|
95
|
+
- name: Checkout
|
|
96
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
97
|
+
with:
|
|
98
|
+
persist-credentials: false
|
|
99
|
+
fetch-depth: 1
|
|
100
|
+
|
|
101
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
102
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
103
|
+
with:
|
|
104
|
+
python-version: ${{ matrix.python-version }}
|
|
105
|
+
allow-prereleases: true
|
|
106
|
+
|
|
107
|
+
- name: Install dependencies
|
|
108
|
+
run: |
|
|
109
|
+
python -m pip install --upgrade pip
|
|
110
|
+
python -m pip install --group tox
|
|
111
|
+
|
|
112
|
+
- name: Test
|
|
113
|
+
run: |
|
|
114
|
+
tox -e py
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
name: Dependabot Change Note
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- 'dependabot/**'
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
pull-requests: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
changenote:
|
|
14
|
+
name: Dependabot Change Note
|
|
15
|
+
uses: beeware/.github/.github/workflows/dependabot-changenote.yml@main
|
|
16
|
+
secrets:
|
|
17
|
+
BRUTUS_PAT_TOKEN: ${{ secrets.BRUTUS_PAT_TOKEN }}
|
|
18
|
+
with:
|
|
19
|
+
changenote-format: "md"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: Upload Python Package
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: published
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
deploy:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
permissions:
|
|
11
|
+
# This permission is required for trusted publishing.
|
|
12
|
+
id-token: write
|
|
13
|
+
steps:
|
|
14
|
+
- uses: dsaltares/fetch-gh-release-asset@aa2ab1243d6e0d5b405b973c89fa4d06a2d0fff7 # 1.1.2
|
|
15
|
+
with:
|
|
16
|
+
version: tags/${{ github.event.release.tag_name }}
|
|
17
|
+
file: ${{ github.event.repository.name }}.*
|
|
18
|
+
regex: true
|
|
19
|
+
target: dist/
|
|
20
|
+
|
|
21
|
+
- name: Publish release to production PyPI
|
|
22
|
+
uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
name: Create Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*'
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
ci:
|
|
10
|
+
name: CI
|
|
11
|
+
permissions:
|
|
12
|
+
id-token: write
|
|
13
|
+
contents: read
|
|
14
|
+
attestations: write
|
|
15
|
+
pull-requests: write
|
|
16
|
+
uses: $/.github/workflows/ci.yml
|
|
17
|
+
with:
|
|
18
|
+
attest-package: "true"
|
|
19
|
+
|
|
20
|
+
docs:
|
|
21
|
+
permissions:
|
|
22
|
+
contents: read
|
|
23
|
+
name: Verify Docs Build
|
|
24
|
+
uses: beeware/.github/.github/workflows/docs-build-verify.yml@main
|
|
25
|
+
secrets:
|
|
26
|
+
RTD_API_TOKEN: ${{ secrets.RTD_API_TOKEN }}
|
|
27
|
+
with:
|
|
28
|
+
project-name: "mac-alias"
|
|
29
|
+
project-version: ${{ github.ref_name }}
|
|
30
|
+
|
|
31
|
+
release:
|
|
32
|
+
name: Create Release
|
|
33
|
+
needs: ci
|
|
34
|
+
runs-on: ubuntu-latest
|
|
35
|
+
permissions:
|
|
36
|
+
contents: write
|
|
37
|
+
# This permission is required for trusted publishing.
|
|
38
|
+
id-token: write
|
|
39
|
+
steps:
|
|
40
|
+
- name: Set build variables
|
|
41
|
+
run: |
|
|
42
|
+
echo "VERSION=${GITHUB_REF_NAME#v}" | tee -a $GITHUB_ENV
|
|
43
|
+
|
|
44
|
+
- name: Checkout
|
|
45
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
46
|
+
with:
|
|
47
|
+
persist-credentials: false
|
|
48
|
+
fetch-depth: 0
|
|
49
|
+
fetch-tags: true
|
|
50
|
+
|
|
51
|
+
- name: Set up Python
|
|
52
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
53
|
+
with:
|
|
54
|
+
python-version: "3.x"
|
|
55
|
+
|
|
56
|
+
- name: Get packages
|
|
57
|
+
uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
58
|
+
with:
|
|
59
|
+
pattern: Packages-*
|
|
60
|
+
merge-multiple: true
|
|
61
|
+
path: dist
|
|
62
|
+
|
|
63
|
+
- name: Install packages
|
|
64
|
+
run: pip install dist/*.whl
|
|
65
|
+
|
|
66
|
+
- name: Check version number
|
|
67
|
+
# Check that the version number of the installed package matches the tag.
|
|
68
|
+
run: |
|
|
69
|
+
set -x
|
|
70
|
+
test $(python -c "import mac_alias; print(mac_alias.__version__)") = $VERSION
|
|
71
|
+
|
|
72
|
+
- name: Create release
|
|
73
|
+
env:
|
|
74
|
+
GH_TOKEN: ${{ github.token }}
|
|
75
|
+
GH_REPO: ${{ github.repository }}
|
|
76
|
+
run: |
|
|
77
|
+
gh release create "${GITHUB_REF_NAME}" \
|
|
78
|
+
--title "$VERSION" \
|
|
79
|
+
--draft \
|
|
80
|
+
--verify-tag \
|
|
81
|
+
dist/*
|
|
82
|
+
|
|
83
|
+
- name: Publish release to Test PyPI
|
|
84
|
+
uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
|
|
85
|
+
with:
|
|
86
|
+
repository-url: https://test.pypi.org/legacy/
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
rules:
|
|
2
|
+
unpinned-uses:
|
|
3
|
+
config:
|
|
4
|
+
# Allow BeeWare-provided actions to be unpinned. If an attacker is in a
|
|
5
|
+
# position to exploit those action, they're probably able to exploit
|
|
6
|
+
# repositories directly; and it's significantly easier for our internal
|
|
7
|
+
# actions to automatically be the most recent versions.
|
|
8
|
+
policies:
|
|
9
|
+
beeware/*: ref-pin
|
|
@@ -9,8 +9,12 @@ repos:
|
|
|
9
9
|
- id: end-of-file-fixer
|
|
10
10
|
- id: trailing-whitespace
|
|
11
11
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
12
|
-
rev: v0.
|
|
12
|
+
rev: v0.17.2
|
|
13
13
|
hooks:
|
|
14
14
|
- id: ruff-format
|
|
15
15
|
- id: ruff-check
|
|
16
16
|
args: [ --fix ]
|
|
17
|
+
- repo: https://github.com/zizmorcore/zizmor-pre-commit
|
|
18
|
+
rev: v1.31.1
|
|
19
|
+
hooks:
|
|
20
|
+
- id: zizmor
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Release History
|
|
2
|
+
|
|
3
|
+
<!-- towncrier release notes start -->
|
|
4
|
+
|
|
5
|
+
## 2.2.4 (2026-11-11)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* Support for Python 3.16 was added. ([#234](https://github.com/dmgbuild/mac_alias/issues/234))
|
|
10
|
+
|
|
11
|
+
### Backward Incompatible Changes
|
|
12
|
+
|
|
13
|
+
* Support for Python 3.10 was dropped. ([#231](https://github.com/dmgbuild/mac_alias/issues/231))
|
|
14
|
+
|
|
15
|
+
### Misc
|
|
16
|
+
|
|
17
|
+
* [#205](https://github.com/dmgbuild/mac_alias/issues/205), [#206](https://github.com/dmgbuild/mac_alias/issues/206), [#207](https://github.com/dmgbuild/mac_alias/issues/207), [#208](https://github.com/dmgbuild/mac_alias/issues/208), [#209](https://github.com/dmgbuild/mac_alias/issues/209), [#211](https://github.com/dmgbuild/mac_alias/issues/211), [#212](https://github.com/dmgbuild/mac_alias/issues/212), [#213](https://github.com/dmgbuild/mac_alias/issues/213), [#214](https://github.com/dmgbuild/mac_alias/issues/214), [#215](https://github.com/dmgbuild/mac_alias/issues/215), [#216](https://github.com/dmgbuild/mac_alias/issues/216), [#217](https://github.com/dmgbuild/mac_alias/issues/217), [#218](https://github.com/dmgbuild/mac_alias/issues/218), [#220](https://github.com/dmgbuild/mac_alias/issues/220), [#222](https://github.com/dmgbuild/mac_alias/issues/222), [#223](https://github.com/dmgbuild/mac_alias/issues/223), [#224](https://github.com/dmgbuild/mac_alias/issues/224), [#225](https://github.com/dmgbuild/mac_alias/issues/225), [#226](https://github.com/dmgbuild/mac_alias/issues/226), [#227](https://github.com/dmgbuild/mac_alias/issues/227), [#228](https://github.com/dmgbuild/mac_alias/issues/228), [#229](https://github.com/dmgbuild/mac_alias/issues/229), [#230](https://github.com/dmgbuild/mac_alias/issues/230), [#232](https://github.com/dmgbuild/mac_alias/issues/232), [#233](https://github.com/dmgbuild/mac_alias/issues/233), [#235](https://github.com/dmgbuild/mac_alias/issues/235), [#236](https://github.com/dmgbuild/mac_alias/issues/236)
|
|
18
|
+
|
|
19
|
+
## 2.2.3 (2025-12-04)
|
|
20
|
+
|
|
21
|
+
### Features
|
|
22
|
+
|
|
23
|
+
* Support for Python 3.13, 3.14 and 3.15 was added.
|
|
24
|
+
|
|
25
|
+
### Backward Incompatible Changes
|
|
26
|
+
|
|
27
|
+
* Support for Python 3.7, 3.8 and 3.9 was dropped.
|
|
28
|
+
|
|
29
|
+
### Misc
|
|
30
|
+
|
|
31
|
+
* [#204](https://github.com/dmgbuild/mac_alias/issues/204), [#24](https://github.com/dmgbuild/mac_alias/issues/24)
|
|
32
|
+
|
|
33
|
+
## 2.2.2 (2022-12-06)
|
|
34
|
+
|
|
35
|
+
### Bugfixes
|
|
36
|
+
|
|
37
|
+
* `kBookmarkVolumePath` and `kBookmarkVolumeURL` are now correctly exported from the top-level package. ([#20](https://github.com/dmgbuild/mac_alias/issues/20))
|
|
38
|
+
|
|
39
|
+
## 2.2.1 (2022-11-24)
|
|
40
|
+
|
|
41
|
+
### Features
|
|
42
|
+
|
|
43
|
+
* The project now uses a PEP 517 compliant build configuration, and declares Python 3.7 to 3.12 as supported versions. ([#19](https://github.com/dmgbuild/mac_alias/issues/19))
|
|
44
|
+
|
|
45
|
+
### Bugfixes
|
|
46
|
+
|
|
47
|
+
* A stray entry in Alias serialization was removed. ([#12](https://github.com/dmgbuild/mac_alias/issues/12))
|
|
48
|
+
|
|
49
|
+
### Backward Incompatible Changes
|
|
50
|
+
|
|
51
|
+
* Support for Python 2, and Python 3 versions prior to 3.7 was dropped.
|
|
52
|
+
|
|
53
|
+
### Misc
|
|
54
|
+
|
|
55
|
+
* [#13](https://github.com/dmgbuild/mac_alias/issues/13), [#14](https://github.com/dmgbuild/mac_alias/issues/14), [#16](https://github.com/dmgbuild/mac_alias/issues/16), [#17](https://github.com/dmgbuild/mac_alias/issues/17)
|
|
56
|
+
|
|
57
|
+
## 2.2.0 (2020-12-08)
|
|
58
|
+
|
|
59
|
+
### Features
|
|
60
|
+
|
|
61
|
+
* `osx.py` was updated with definitions from macOS 11 (Big Sur).
|
|
62
|
+
|
|
63
|
+
### Bugfixes
|
|
64
|
+
|
|
65
|
+
* `statfs` and `fstatfs` are now correctly located on ARM64 (Apple Silicon) machines. ([#11](https://github.com/dmgbuild/mac_alias/issues/11))
|
|
66
|
+
|
|
67
|
+
## 2.1.1 (2020-11-28)
|
|
68
|
+
|
|
69
|
+
### Bugfixes
|
|
70
|
+
|
|
71
|
+
* A `NameError` when reading an Alias from a file descriptor was corrected. ([#9](https://github.com/dmgbuild/mac_alias/issues/9))
|
|
72
|
+
|
|
73
|
+
## 2.1.0 (2020-10-11)
|
|
74
|
+
|
|
75
|
+
### Features
|
|
76
|
+
|
|
77
|
+
* Tentative support for the Alias v3 format was added.
|
|
78
|
+
|
|
79
|
+
### Bugfixes
|
|
80
|
+
|
|
81
|
+
* Volume paths are now normalized to NFC form before being compared, avoiding Unicode string comparison issues. ([#7](https://github.com/dmgbuild/mac_alias/issues/7))
|
|
82
|
+
|
|
83
|
+
## 2.0.7 (2018-02-13)
|
|
84
|
+
|
|
85
|
+
### Bugfixes
|
|
86
|
+
|
|
87
|
+
* A number of Python 3 compatibility problems were corrected. ([#3](https://github.com/dmgbuild/mac_alias/issues/3))
|
|
88
|
+
|
|
89
|
+
## 2.0.6 (2017-08-02)
|
|
90
|
+
|
|
91
|
+
### Features
|
|
92
|
+
|
|
93
|
+
* Bookmarks can now be parsed from `bytearray` data.
|
|
94
|
+
|
|
95
|
+
### Bugfixes
|
|
96
|
+
|
|
97
|
+
* Stray debugging `print` statements were removed from bookmark generation.
|
|
98
|
+
|
|
99
|
+
## 2.0.5 (2017-08-02)
|
|
100
|
+
|
|
101
|
+
### Bugfixes
|
|
102
|
+
|
|
103
|
+
* Byte strings are now used with `struct.pack`, correcting a Python 3 compatibility problem.
|
|
104
|
+
|
|
105
|
+
## 2.0.4 (2017-07-28)
|
|
106
|
+
|
|
107
|
+
### Bugfixes
|
|
108
|
+
|
|
109
|
+
* A number of Python 3 compatibility problems were corrected.
|
|
110
|
+
|
|
111
|
+
## 2.0.2 (2017-07-27)
|
|
112
|
+
|
|
113
|
+
### Features
|
|
114
|
+
|
|
115
|
+
* A basic test suite was added.
|
|
116
|
+
|
|
117
|
+
### Bugfixes
|
|
118
|
+
|
|
119
|
+
* A number of Python 3 compatibility problems were corrected.
|
|
120
|
+
|
|
121
|
+
## 2.0.1 (2017-04-28)
|
|
122
|
+
|
|
123
|
+
### Bugfixes
|
|
124
|
+
|
|
125
|
+
* Generated bookmarks now use generic ("nobody") user information, rather than details of the author.
|
|
126
|
+
|
|
127
|
+
## 2.0.0 (2016-12-02)
|
|
128
|
+
|
|
129
|
+
### Features
|
|
130
|
+
|
|
131
|
+
* Support for reading and generating Bookmark records was added.
|
|
132
|
+
|
|
133
|
+
## 1.1.0 (2015-10-19)
|
|
134
|
+
|
|
135
|
+
### Bugfixes
|
|
136
|
+
|
|
137
|
+
* Values provided to the `TargetInfo` initializer are now used, rather than being ignored.
|
|
138
|
+
* Floor division is now used explicitly where required, correcting Python 3 compatibility.
|
|
139
|
+
* The `TAG_APPLESHARE_SERVER_NAME` tag value was corrected.
|
|
140
|
+
* The full path to `libc` is now used, correcting a problem on OS X 10.11 (El Capitan).
|
|
141
|
+
|
|
142
|
+
## 1.0.0 (2014-02-13)
|
|
143
|
+
|
|
144
|
+
* Initial release.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mac_alias
|
|
3
|
+
Version: 2.2.4rc1
|
|
4
|
+
Summary: Generate/parse macOS Alias records from Python
|
|
5
|
+
Author-email: Alastair Houghton <alastair@alastairs-place.net>
|
|
6
|
+
Maintainer-email: Russell Keith-Magee <russell@keith-magee.com>
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Project-URL: Documentation, https://mac-alias.readthedocs.io/en/latest/
|
|
9
|
+
Project-URL: Homepage, https://github.com/dmgbuild/mac_alias
|
|
10
|
+
Project-URL: Tracker, https://github.com/dmgbuild/mac_alias/issues
|
|
11
|
+
Project-URL: Source, https://github.com/dmgbuild/mac_alias
|
|
12
|
+
Keywords: mac_alias
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.16
|
|
21
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
22
|
+
Classifier: Topic :: Desktop Environment
|
|
23
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
+
Requires-Python: >=3.11
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
License-File: LICENSE
|
|
27
|
+
Dynamic: license-file
|
|
28
|
+
|
|
29
|
+
# mac_alias
|
|
30
|
+
|
|
31
|
+
[](https://pypi.python.org/pypi/mac_alias) [](https://pypi.python.org/pypi/mac_alias) [](https://pypi.python.org/pypi/mac_alias) [](https://github.com/dmgbuild/mac_alias/blob/main/LICENSE) [](https://github.com/dmgbuild/mac_alias/actions)
|
|
32
|
+
|
|
33
|
+
`mac_alias` lets you generate or read binary Alias and Bookmark records from Python code.
|
|
34
|
+
|
|
35
|
+
While it is written in pure Python, some macOS specific code is required to generate a proper Alias or Bookmark record for a given file, so this module currently is not portable to other platforms.
|
|
36
|
+
|
|
37
|
+
Credit is due to Wim Lewis <wiml@hhhh.org>, whose work on reverse engineering the alias format was extremely useful in writing this code. Alastair Houghton <alastair@alastairs-place.net> was responsible for reverse engineering the bookmark format.
|
|
38
|
+
|
|
39
|
+
See the [documentation](https://mac-alias.readthedocs.io) for more information.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# mac_alias
|
|
2
|
+
|
|
3
|
+
[](https://pypi.python.org/pypi/mac_alias) [](https://pypi.python.org/pypi/mac_alias) [](https://pypi.python.org/pypi/mac_alias) [](https://github.com/dmgbuild/mac_alias/blob/main/LICENSE) [](https://github.com/dmgbuild/mac_alias/actions)
|
|
4
|
+
|
|
5
|
+
`mac_alias` lets you generate or read binary Alias and Bookmark records from Python code.
|
|
6
|
+
|
|
7
|
+
While it is written in pure Python, some macOS specific code is required to generate a proper Alias or Bookmark record for a given file, so this module currently is not portable to other platforms.
|
|
8
|
+
|
|
9
|
+
Credit is due to Wim Lewis <wiml@hhhh.org>, whose work on reverse engineering the alias format was extremely useful in writing this code. Alastair Houghton <alastair@alastairs-place.net> was responsible for reverse engineering the bookmark format.
|
|
10
|
+
|
|
11
|
+
See the [documentation](https://mac-alias.readthedocs.io) for more information.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{% for section, _ in sections.items() %}
|
|
2
|
+
{% if section %}
|
|
3
|
+
{{section}}
|
|
4
|
+
|
|
5
|
+
{% endif %}
|
|
6
|
+
|
|
7
|
+
{% if sections[section] %}
|
|
8
|
+
{% for category, val in definitions.items() if category in sections[section]%}
|
|
9
|
+
### {{ definitions[category]['name'] }}
|
|
10
|
+
|
|
11
|
+
{% if definitions[category]['showcontent'] %}
|
|
12
|
+
{% for text, values in sections[section][category].items() %}
|
|
13
|
+
* {{ text }} ({{ values|join(', ') }})
|
|
14
|
+
{% endfor %}
|
|
15
|
+
{% else %}
|
|
16
|
+
* {{ sections[section][category]['']|join(', ') }}
|
|
17
|
+
{% endif %}
|
|
18
|
+
{% if sections[section][category]|length == 0 %}
|
|
19
|
+
No significant changes.
|
|
20
|
+
|
|
21
|
+
{% else %}
|
|
22
|
+
{% endif %}
|
|
23
|
+
|
|
24
|
+
{% endfor %}
|
|
25
|
+
{% else %}
|
|
26
|
+
No significant changes.
|
|
27
|
+
|
|
28
|
+
{% endif %}
|
|
29
|
+
{% endfor %}
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
# serve to show the default.
|
|
13
13
|
|
|
14
14
|
import os
|
|
15
|
-
import re
|
|
16
15
|
import sys
|
|
16
|
+
from importlib.metadata import version
|
|
17
17
|
|
|
18
18
|
# If extensions (or modules to document with autodoc) are in another directory,
|
|
19
19
|
# add these directories to sys.path here. If the directory is relative to the
|
|
@@ -57,14 +57,7 @@ copyright = "2014-2020, Alastair Houghton"
|
|
|
57
57
|
# built documents.
|
|
58
58
|
#
|
|
59
59
|
# The full version, including alpha/beta/rc tags.
|
|
60
|
-
|
|
61
|
-
version_match = re.search(
|
|
62
|
-
r"^__version__ = ['\"]([^'\"]*)['\"]", version_file.read(), re.MULTILINE
|
|
63
|
-
)
|
|
64
|
-
if version_match:
|
|
65
|
-
release = version_match.group(1)
|
|
66
|
-
else:
|
|
67
|
-
raise RuntimeError("Unable to find version string.")
|
|
60
|
+
release = version("mac_alias")
|
|
68
61
|
|
|
69
62
|
# The short X.Y version.
|
|
70
63
|
version = ".".join(release.split(".")[:2])
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
[build-system]
|
|
2
2
|
requires = [
|
|
3
|
-
"setuptools==
|
|
3
|
+
"setuptools==84.2.1",
|
|
4
|
+
"setuptools_scm==10.3.4",
|
|
4
5
|
]
|
|
5
6
|
build-backend = "setuptools.build_meta"
|
|
6
7
|
|
|
@@ -8,8 +9,8 @@ build-backend = "setuptools.build_meta"
|
|
|
8
9
|
dynamic = ["version"]
|
|
9
10
|
name = "mac_alias"
|
|
10
11
|
description = "Generate/parse macOS Alias records from Python"
|
|
11
|
-
readme = "README.
|
|
12
|
-
requires-python = ">= 3.
|
|
12
|
+
readme = "README.md"
|
|
13
|
+
requires-python = ">= 3.11"
|
|
13
14
|
license = "MIT"
|
|
14
15
|
license-files = [
|
|
15
16
|
"LICENSE",
|
|
@@ -26,12 +27,12 @@ keywords = [
|
|
|
26
27
|
classifiers = [
|
|
27
28
|
"Development Status :: 5 - Production/Stable",
|
|
28
29
|
"Programming Language :: Python :: 3",
|
|
29
|
-
"Programming Language :: Python :: 3.10",
|
|
30
30
|
"Programming Language :: Python :: 3.11",
|
|
31
31
|
"Programming Language :: Python :: 3.12",
|
|
32
32
|
"Programming Language :: Python :: 3.13",
|
|
33
33
|
"Programming Language :: Python :: 3.14",
|
|
34
34
|
"Programming Language :: Python :: 3.15",
|
|
35
|
+
"Programming Language :: Python :: 3.16",
|
|
35
36
|
"Programming Language :: Python :: 3 :: Only",
|
|
36
37
|
"Topic :: Desktop Environment",
|
|
37
38
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
@@ -43,26 +44,27 @@ Homepage = "https://github.com/dmgbuild/mac_alias"
|
|
|
43
44
|
Tracker = "https://github.com/dmgbuild/mac_alias/issues"
|
|
44
45
|
Source = "https://github.com/dmgbuild/mac_alias"
|
|
45
46
|
|
|
46
|
-
[project.scripts]
|
|
47
|
-
mac_alias = "mac_alias.__main__:main"
|
|
48
|
-
|
|
49
47
|
[dependency-groups]
|
|
50
48
|
package = [
|
|
51
|
-
"build == 1.
|
|
52
|
-
"twine ==
|
|
49
|
+
"build == 1.6.1",
|
|
50
|
+
"twine == 7.0.0",
|
|
53
51
|
]
|
|
54
52
|
|
|
55
53
|
pre-commit = [
|
|
56
|
-
"prek == 0.
|
|
54
|
+
"prek == 0.5.7",
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
towncrier = [
|
|
58
|
+
"towncrier==26.9.0",
|
|
57
59
|
]
|
|
58
60
|
|
|
59
61
|
test = [
|
|
60
|
-
"coverage == 7.
|
|
61
|
-
"pytest ==
|
|
62
|
+
"coverage == 7.17.0",
|
|
63
|
+
"pytest == 9.1.1",
|
|
62
64
|
]
|
|
63
65
|
|
|
64
66
|
tox = [
|
|
65
|
-
"tox-uv == 1.
|
|
67
|
+
"tox-uv == 1.37.0"
|
|
66
68
|
]
|
|
67
69
|
|
|
68
70
|
dev = [
|
|
@@ -73,12 +75,12 @@ dev = [
|
|
|
73
75
|
|
|
74
76
|
# Docs are always built on Py3.12; see RTD and tox config files.
|
|
75
77
|
docs = [
|
|
76
|
-
"furo == 2025.
|
|
77
|
-
"sphinx ==
|
|
78
|
+
"furo == 2025.12.19",
|
|
79
|
+
"sphinx == 9.0.4",
|
|
78
80
|
]
|
|
79
81
|
|
|
80
|
-
[tool.
|
|
81
|
-
|
|
82
|
+
[tool.setuptools_scm]
|
|
83
|
+
# An empty table is needed to enable setuptools_scm
|
|
82
84
|
|
|
83
85
|
[tool.coverage.run]
|
|
84
86
|
branch = true
|
|
@@ -129,3 +131,22 @@ extend-select = [
|
|
|
129
131
|
# F403: * import used; unable to detect undefined names
|
|
130
132
|
# F405: undefined, or defined from star imports
|
|
131
133
|
"src/mac_alias/__init__.py" = ["F403", "F405"]
|
|
134
|
+
# Ignores needed to pass the Ruff 0.16 update.
|
|
135
|
+
"src/mac_alias/alias.py" = ["UP031", "RUF012"]
|
|
136
|
+
"src/mac_alias/osx.py" = ["UP031", "RUF012"]
|
|
137
|
+
|
|
138
|
+
[tool.towncrier]
|
|
139
|
+
directory = "changes"
|
|
140
|
+
package = "mac_alias"
|
|
141
|
+
package_dir = "src"
|
|
142
|
+
filename = "CHANGELOG.md"
|
|
143
|
+
title_format = "## {version} ({project_date})"
|
|
144
|
+
issue_format = "[#{issue}](https://github.com/dmgbuild/mac_alias/issues/{issue})"
|
|
145
|
+
template = "changes/template.md"
|
|
146
|
+
type = [
|
|
147
|
+
{ directory = "feature", name = "Features", showcontent = true },
|
|
148
|
+
{ directory = "bugfix", name = "Bugfixes", showcontent = true },
|
|
149
|
+
{ directory = "removal", name = "Backward Incompatible Changes", showcontent = true },
|
|
150
|
+
{ directory = "doc", name = "Documentation", showcontent = true },
|
|
151
|
+
{ directory = "misc", name = "Misc", showcontent = false },
|
|
152
|
+
]
|
|
@@ -1,46 +1,48 @@
|
|
|
1
|
+
from importlib.metadata import version
|
|
2
|
+
|
|
1
3
|
from .alias import *
|
|
2
4
|
from .bookmark import *
|
|
3
5
|
|
|
4
|
-
__version__ = "
|
|
6
|
+
__version__ = version("mac_alias")
|
|
5
7
|
|
|
6
8
|
__all__ = [
|
|
7
|
-
"
|
|
8
|
-
"ALIAS_KIND_FILE",
|
|
9
|
-
"ALIAS_KIND_FOLDER",
|
|
10
|
-
"ALIAS_HFS_VOLUME_SIGNATURE",
|
|
11
|
-
"ALIAS_FIXED_DISK",
|
|
12
|
-
"ALIAS_NETWORK_DISK",
|
|
9
|
+
"ALIAS_1_44MB_FLOPPY_DISK",
|
|
13
10
|
"ALIAS_400KB_FLOPPY_DISK",
|
|
14
11
|
"ALIAS_800KB_FLOPPY_DISK",
|
|
15
|
-
"ALIAS_1_44MB_FLOPPY_DISK",
|
|
16
12
|
"ALIAS_EJECTABLE_DISK",
|
|
13
|
+
"ALIAS_FIXED_DISK",
|
|
14
|
+
"ALIAS_HFS_VOLUME_SIGNATURE",
|
|
15
|
+
"ALIAS_KIND_FILE",
|
|
16
|
+
"ALIAS_KIND_FOLDER",
|
|
17
|
+
"ALIAS_NETWORK_DISK",
|
|
17
18
|
"ALIAS_NO_CNID",
|
|
18
|
-
"
|
|
19
|
+
"URL",
|
|
20
|
+
"Alias",
|
|
21
|
+
"AppleShareInfo",
|
|
22
|
+
"Bookmark",
|
|
23
|
+
"Data",
|
|
24
|
+
"TargetInfo",
|
|
25
|
+
"VolumeInfo",
|
|
26
|
+
"__version__",
|
|
19
27
|
"kBookmarkCNIDPath",
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"kBookmarkFileID",
|
|
28
|
+
"kBookmarkContainingFolder",
|
|
29
|
+
"kBookmarkCreationOptions",
|
|
23
30
|
"kBookmarkFileCreationDate",
|
|
31
|
+
"kBookmarkFileID",
|
|
32
|
+
"kBookmarkFileName",
|
|
33
|
+
"kBookmarkFileProperties",
|
|
34
|
+
"kBookmarkPath",
|
|
35
|
+
"kBookmarkSecurityExtension",
|
|
24
36
|
"kBookmarkTOCPath",
|
|
37
|
+
"kBookmarkUID",
|
|
38
|
+
"kBookmarkURLLengths",
|
|
39
|
+
"kBookmarkUserName",
|
|
40
|
+
"kBookmarkVolumeCreationDate",
|
|
41
|
+
"kBookmarkVolumeName",
|
|
25
42
|
"kBookmarkVolumePath",
|
|
43
|
+
"kBookmarkVolumeProperties",
|
|
44
|
+
"kBookmarkVolumeSize",
|
|
26
45
|
"kBookmarkVolumeURL",
|
|
27
|
-
"kBookmarkVolumeName",
|
|
28
46
|
"kBookmarkVolumeUUID",
|
|
29
|
-
"kBookmarkVolumeSize",
|
|
30
|
-
"kBookmarkVolumeCreationDate",
|
|
31
|
-
"kBookmarkVolumeProperties",
|
|
32
|
-
"kBookmarkContainingFolder",
|
|
33
|
-
"kBookmarkUserName",
|
|
34
|
-
"kBookmarkUID",
|
|
35
47
|
"kBookmarkWasFileReference",
|
|
36
|
-
"kBookmarkCreationOptions",
|
|
37
|
-
"kBookmarkURLLengths",
|
|
38
|
-
"kBookmarkSecurityExtension",
|
|
39
|
-
"AppleShareInfo",
|
|
40
|
-
"VolumeInfo",
|
|
41
|
-
"TargetInfo",
|
|
42
|
-
"Alias",
|
|
43
|
-
"Bookmark",
|
|
44
|
-
"Data",
|
|
45
|
-
"URL",
|
|
46
48
|
]
|
|
@@ -297,12 +297,14 @@ class Alias:
|
|
|
297
297
|
version=2,
|
|
298
298
|
volume=None,
|
|
299
299
|
target=None,
|
|
300
|
-
extra=
|
|
300
|
+
extra=None,
|
|
301
301
|
):
|
|
302
302
|
"""Construct a new :class:`Alias` object with the specified
|
|
303
303
|
contents."""
|
|
304
304
|
|
|
305
305
|
#: Application specific information (four byte byte-string)
|
|
306
|
+
if extra is None:
|
|
307
|
+
extra = []
|
|
306
308
|
self.appinfo = appinfo
|
|
307
309
|
|
|
308
310
|
#: Version (we support versions 2 and 3)
|
|
@@ -344,7 +346,7 @@ class Alias:
|
|
|
344
346
|
levels_to, # h
|
|
345
347
|
volattrs, # I
|
|
346
348
|
volfsid, # 2s
|
|
347
|
-
|
|
349
|
+
_reserved, # 10s
|
|
348
350
|
) = struct.unpack(b">h28pI2shI64pII4s4shhI2s10s", b.read(142))
|
|
349
351
|
else:
|
|
350
352
|
(
|
|
@@ -356,7 +358,7 @@ class Alias:
|
|
|
356
358
|
cnid, # I
|
|
357
359
|
crdate_hr, # Q
|
|
358
360
|
volattrs, # I
|
|
359
|
-
|
|
361
|
+
_reserved, # 14s
|
|
360
362
|
) = struct.unpack(b">hQ4shIIQI14s", b.read(46))
|
|
361
363
|
|
|
362
364
|
volname = b""
|
|
@@ -463,7 +465,7 @@ class Alias:
|
|
|
463
465
|
def for_file(cls, path):
|
|
464
466
|
"""Create an :class:`Alias` that points at the specified file."""
|
|
465
467
|
if sys.platform != "darwin":
|
|
466
|
-
raise
|
|
468
|
+
raise RuntimeError("Not implemented (requires special support)")
|
|
467
469
|
|
|
468
470
|
path = encode_utf8(path)
|
|
469
471
|
|
|
@@ -294,7 +294,7 @@ class Bookmark:
|
|
|
294
294
|
elif dtype == BMK_NULL:
|
|
295
295
|
return None
|
|
296
296
|
|
|
297
|
-
print("Unknown data type
|
|
297
|
+
print(f"Unknown data type {typecode:08x}") # noqa: T201
|
|
298
298
|
return (typecode, databytes)
|
|
299
299
|
|
|
300
300
|
@classmethod
|
|
@@ -307,7 +307,7 @@ class Bookmark:
|
|
|
307
307
|
if isinstance(data, bytearray):
|
|
308
308
|
data = bytes(data)
|
|
309
309
|
|
|
310
|
-
magic, size,
|
|
310
|
+
magic, size, _dummy, hdrsize = struct.unpack(b"<4sIII", data[0:16])
|
|
311
311
|
|
|
312
312
|
if magic not in (b"book", b"alis"):
|
|
313
313
|
raise ValueError(f"Not a bookmark file (bad magic) {magic!r}")
|
|
@@ -348,7 +348,7 @@ class Bookmark:
|
|
|
348
348
|
toc = {}
|
|
349
349
|
for n in range(toccount):
|
|
350
350
|
ebase = tocbase + 20 + 12 * n
|
|
351
|
-
eid, eoffset,
|
|
351
|
+
eid, eoffset, _edummy = struct.unpack(b"<III", data[ebase : ebase + 12])
|
|
352
352
|
|
|
353
353
|
if eid & 0x80000000:
|
|
354
354
|
eid = cls._get_item(data, hdrsize, eid & 0x7FFFFFFF)
|
|
@@ -418,7 +418,7 @@ class Bookmark:
|
|
|
418
418
|
if item.base:
|
|
419
419
|
baseoff = offset + 16
|
|
420
420
|
reloff, baseenc = cls._encode_item(item.base, baseoff)
|
|
421
|
-
|
|
421
|
+
_xoffset, relenc = cls._encode_item(item.relative, reloff)
|
|
422
422
|
result = b"".join(
|
|
423
423
|
[
|
|
424
424
|
struct.pack(
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mac_alias
|
|
3
|
+
Version: 2.2.4rc1
|
|
4
|
+
Summary: Generate/parse macOS Alias records from Python
|
|
5
|
+
Author-email: Alastair Houghton <alastair@alastairs-place.net>
|
|
6
|
+
Maintainer-email: Russell Keith-Magee <russell@keith-magee.com>
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Project-URL: Documentation, https://mac-alias.readthedocs.io/en/latest/
|
|
9
|
+
Project-URL: Homepage, https://github.com/dmgbuild/mac_alias
|
|
10
|
+
Project-URL: Tracker, https://github.com/dmgbuild/mac_alias/issues
|
|
11
|
+
Project-URL: Source, https://github.com/dmgbuild/mac_alias
|
|
12
|
+
Keywords: mac_alias
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.16
|
|
21
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
22
|
+
Classifier: Topic :: Desktop Environment
|
|
23
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
+
Requires-Python: >=3.11
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
License-File: LICENSE
|
|
27
|
+
Dynamic: license-file
|
|
28
|
+
|
|
29
|
+
# mac_alias
|
|
30
|
+
|
|
31
|
+
[](https://pypi.python.org/pypi/mac_alias) [](https://pypi.python.org/pypi/mac_alias) [](https://pypi.python.org/pypi/mac_alias) [](https://github.com/dmgbuild/mac_alias/blob/main/LICENSE) [](https://github.com/dmgbuild/mac_alias/actions)
|
|
32
|
+
|
|
33
|
+
`mac_alias` lets you generate or read binary Alias and Bookmark records from Python code.
|
|
34
|
+
|
|
35
|
+
While it is written in pure Python, some macOS specific code is required to generate a proper Alias or Bookmark record for a given file, so this module currently is not portable to other platforms.
|
|
36
|
+
|
|
37
|
+
Credit is due to Wim Lewis <wiml@hhhh.org>, whose work on reverse engineering the alias format was extremely useful in writing this code. Alastair Houghton <alastair@alastairs-place.net> was responsible for reverse engineering the bookmark format.
|
|
38
|
+
|
|
39
|
+
See the [documentation](https://mac-alias.readthedocs.io) for more information.
|
|
@@ -1,9 +1,18 @@
|
|
|
1
|
+
.gitignore
|
|
1
2
|
.pre-commit-config.yaml
|
|
2
3
|
.readthedocs.yaml
|
|
4
|
+
CHANGELOG.md
|
|
3
5
|
LICENSE
|
|
4
|
-
README.
|
|
6
|
+
README.md
|
|
5
7
|
pyproject.toml
|
|
6
8
|
tox.ini
|
|
9
|
+
.github/dependabot.yml
|
|
10
|
+
.github/zizmor.yml
|
|
11
|
+
.github/workflows/ci.yml
|
|
12
|
+
.github/workflows/dependabot-changenote.yml
|
|
13
|
+
.github/workflows/publish.yml
|
|
14
|
+
.github/workflows/release.yml
|
|
15
|
+
changes/template.md
|
|
7
16
|
docs/Makefile
|
|
8
17
|
docs/alias_fmt.rst
|
|
9
18
|
docs/bookmark_fmt.rst
|
|
@@ -20,7 +29,8 @@ src/mac_alias/utils.py
|
|
|
20
29
|
src/mac_alias.egg-info/PKG-INFO
|
|
21
30
|
src/mac_alias.egg-info/SOURCES.txt
|
|
22
31
|
src/mac_alias.egg-info/dependency_links.txt
|
|
23
|
-
src/mac_alias.egg-info/
|
|
32
|
+
src/mac_alias.egg-info/scm_file_list.json
|
|
33
|
+
src/mac_alias.egg-info/scm_version.json
|
|
24
34
|
src/mac_alias.egg-info/top_level.txt
|
|
25
35
|
tests/__init__.py
|
|
26
36
|
tests/test_alias.py
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"files": [
|
|
3
|
+
".github/dependabot.yml",
|
|
4
|
+
".github/workflows/ci.yml",
|
|
5
|
+
".github/workflows/dependabot-changenote.yml",
|
|
6
|
+
".github/workflows/publish.yml",
|
|
7
|
+
".github/workflows/release.yml",
|
|
8
|
+
".github/zizmor.yml",
|
|
9
|
+
".gitignore",
|
|
10
|
+
".pre-commit-config.yaml",
|
|
11
|
+
".readthedocs.yaml",
|
|
12
|
+
"CHANGELOG.md",
|
|
13
|
+
"LICENSE",
|
|
14
|
+
"README.md",
|
|
15
|
+
"changes/template.md",
|
|
16
|
+
"docs/Makefile",
|
|
17
|
+
"docs/_static/README.rst",
|
|
18
|
+
"docs/alias_fmt.rst",
|
|
19
|
+
"docs/bookmark_fmt.rst",
|
|
20
|
+
"docs/conf.py",
|
|
21
|
+
"docs/index.rst",
|
|
22
|
+
"docs/mac_alias.rst",
|
|
23
|
+
"docs/make.bat",
|
|
24
|
+
"pyproject.toml",
|
|
25
|
+
"src/mac_alias/__init__.py",
|
|
26
|
+
"src/mac_alias/alias.py",
|
|
27
|
+
"src/mac_alias/bookmark.py",
|
|
28
|
+
"src/mac_alias/osx.py",
|
|
29
|
+
"src/mac_alias/utils.py",
|
|
30
|
+
"tests/__init__.py",
|
|
31
|
+
"tests/test_alias.py",
|
|
32
|
+
"tests/test_bookmark.py",
|
|
33
|
+
"tox.ini"
|
|
34
|
+
]
|
|
35
|
+
}
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
[tox]
|
|
2
|
-
envlist = docs,
|
|
2
|
+
envlist = pre-commit,towncrier-check,docs,py{311,312,313,314,315,316}
|
|
3
3
|
skip_missing_interpreters = true
|
|
4
4
|
|
|
5
|
-
[testenv]
|
|
5
|
+
[testenv:pre-commit]
|
|
6
|
+
package = wheel
|
|
7
|
+
wheel_build_env = .pkg
|
|
8
|
+
dependency_groups = pre-commit
|
|
9
|
+
commands = prek run --all-files --show-diff-on-failure --color=always
|
|
10
|
+
|
|
11
|
+
[testenv:towncrier{,-check}]
|
|
12
|
+
dependency_groups = towncrier
|
|
13
|
+
commands =
|
|
14
|
+
check : python -m towncrier.check --compare-with origin/main
|
|
15
|
+
!check : python -m towncrier {posargs}
|
|
16
|
+
|
|
17
|
+
[testenv:py{,311,312,313,314,315,316}]
|
|
6
18
|
dependency_groups = test
|
|
7
19
|
commands =
|
|
8
20
|
python -m coverage run -m pytest -vv
|
|
@@ -15,11 +27,3 @@ change_dir = docs
|
|
|
15
27
|
dependency_groups = docs
|
|
16
28
|
commands =
|
|
17
29
|
python -m sphinx build --fail-on-warning --keep-going --jobs auto -n --verbose --fresh-env --show-traceback --write-all -d _build/doctrees --builder html . {posargs:_build/html}
|
|
18
|
-
|
|
19
|
-
[testenv:package]
|
|
20
|
-
skip_install = True
|
|
21
|
-
passenv = FORCE_COLOR
|
|
22
|
-
dependency_groups = package
|
|
23
|
-
commands =
|
|
24
|
-
python -m build --sdist --wheel --outdir dist/ .
|
|
25
|
-
python -m twine check dist/*
|
mac_alias-2.2.3/PKG-INFO
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: mac_alias
|
|
3
|
-
Version: 2.2.3
|
|
4
|
-
Summary: Generate/parse macOS Alias records from Python
|
|
5
|
-
Author-email: Alastair Houghton <alastair@alastairs-place.net>
|
|
6
|
-
Maintainer-email: Russell Keith-Magee <russell@keith-magee.com>
|
|
7
|
-
License-Expression: MIT
|
|
8
|
-
Project-URL: Documentation, https://mac-alias.readthedocs.io/en/latest/
|
|
9
|
-
Project-URL: Homepage, https://github.com/dmgbuild/mac_alias
|
|
10
|
-
Project-URL: Tracker, https://github.com/dmgbuild/mac_alias/issues
|
|
11
|
-
Project-URL: Source, https://github.com/dmgbuild/mac_alias
|
|
12
|
-
Keywords: mac_alias
|
|
13
|
-
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
-
Classifier: Programming Language :: Python :: 3
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.15
|
|
21
|
-
Classifier: Programming Language :: Python :: 3 :: Only
|
|
22
|
-
Classifier: Topic :: Desktop Environment
|
|
23
|
-
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
-
Requires-Python: >=3.10
|
|
25
|
-
Description-Content-Type: text/x-rst
|
|
26
|
-
License-File: LICENSE
|
|
27
|
-
Dynamic: license-file
|
|
28
|
-
|
|
29
|
-
=========
|
|
30
|
-
mac_alias
|
|
31
|
-
=========
|
|
32
|
-
|
|
33
|
-
.. |pyversions| image:: https://img.shields.io/pypi/pyversions/mac_alias.svg
|
|
34
|
-
:target: https://pypi.python.org/pypi/mac_alias
|
|
35
|
-
:alt: Python Versions
|
|
36
|
-
|
|
37
|
-
.. |version| image:: https://img.shields.io/pypi/v/mac_alias.svg
|
|
38
|
-
:target: https://pypi.python.org/pypi/mac_alias
|
|
39
|
-
:alt: PyPI Version
|
|
40
|
-
|
|
41
|
-
.. |maturity| image:: https://img.shields.io/pypi/status/mac_alias.svg
|
|
42
|
-
:target: https://pypi.python.org/pypi/mac_alias
|
|
43
|
-
:alt: Maturity
|
|
44
|
-
|
|
45
|
-
.. |license| image:: https://img.shields.io/pypi/l/mac_alias.svg
|
|
46
|
-
:target: https://github.com/dmgbuild/mac_alias/blob/main/LICENSE
|
|
47
|
-
:alt: MIT License
|
|
48
|
-
|
|
49
|
-
.. |ci| image:: https://github.com/dmgbuild/mac_alias/workflows/CI/badge.svg?branch=main
|
|
50
|
-
:target: https://github.com/dmgbuild/mac_alias/actions
|
|
51
|
-
:alt: Build Status
|
|
52
|
-
|
|
53
|
-
|pyversions| |version| |maturity| |license| |ci|
|
|
54
|
-
|
|
55
|
-
What is this?
|
|
56
|
-
-------------
|
|
57
|
-
|
|
58
|
-
``mac_alias`` lets you generate or read binary Alias and Bookmark records
|
|
59
|
-
from Python code.
|
|
60
|
-
|
|
61
|
-
While it is written in pure Python, some OS X specific code is required to
|
|
62
|
-
generate a proper Alias or Bookmark record for a given file, so this module
|
|
63
|
-
currently is not portable to other platforms.
|
|
64
|
-
|
|
65
|
-
Credit is due to Wim Lewis <wiml@hhhh.org>, whose work on reverse engineering
|
|
66
|
-
the alias format was extremely useful in writing this code. Alastair Houghton
|
|
67
|
-
<alastair@alastairs-place.net> was responsible for reverse engineering the
|
|
68
|
-
bookmark format.
|
|
69
|
-
|
|
70
|
-
See the documentation_ for more information.
|
|
71
|
-
|
|
72
|
-
.. _documentation: http://mac-alias.rtfd.org
|
mac_alias-2.2.3/README.rst
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
=========
|
|
2
|
-
mac_alias
|
|
3
|
-
=========
|
|
4
|
-
|
|
5
|
-
.. |pyversions| image:: https://img.shields.io/pypi/pyversions/mac_alias.svg
|
|
6
|
-
:target: https://pypi.python.org/pypi/mac_alias
|
|
7
|
-
:alt: Python Versions
|
|
8
|
-
|
|
9
|
-
.. |version| image:: https://img.shields.io/pypi/v/mac_alias.svg
|
|
10
|
-
:target: https://pypi.python.org/pypi/mac_alias
|
|
11
|
-
:alt: PyPI Version
|
|
12
|
-
|
|
13
|
-
.. |maturity| image:: https://img.shields.io/pypi/status/mac_alias.svg
|
|
14
|
-
:target: https://pypi.python.org/pypi/mac_alias
|
|
15
|
-
:alt: Maturity
|
|
16
|
-
|
|
17
|
-
.. |license| image:: https://img.shields.io/pypi/l/mac_alias.svg
|
|
18
|
-
:target: https://github.com/dmgbuild/mac_alias/blob/main/LICENSE
|
|
19
|
-
:alt: MIT License
|
|
20
|
-
|
|
21
|
-
.. |ci| image:: https://github.com/dmgbuild/mac_alias/workflows/CI/badge.svg?branch=main
|
|
22
|
-
:target: https://github.com/dmgbuild/mac_alias/actions
|
|
23
|
-
:alt: Build Status
|
|
24
|
-
|
|
25
|
-
|pyversions| |version| |maturity| |license| |ci|
|
|
26
|
-
|
|
27
|
-
What is this?
|
|
28
|
-
-------------
|
|
29
|
-
|
|
30
|
-
``mac_alias`` lets you generate or read binary Alias and Bookmark records
|
|
31
|
-
from Python code.
|
|
32
|
-
|
|
33
|
-
While it is written in pure Python, some OS X specific code is required to
|
|
34
|
-
generate a proper Alias or Bookmark record for a given file, so this module
|
|
35
|
-
currently is not portable to other platforms.
|
|
36
|
-
|
|
37
|
-
Credit is due to Wim Lewis <wiml@hhhh.org>, whose work on reverse engineering
|
|
38
|
-
the alias format was extremely useful in writing this code. Alastair Houghton
|
|
39
|
-
<alastair@alastairs-place.net> was responsible for reverse engineering the
|
|
40
|
-
bookmark format.
|
|
41
|
-
|
|
42
|
-
See the documentation_ for more information.
|
|
43
|
-
|
|
44
|
-
.. _documentation: http://mac-alias.rtfd.org
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: mac_alias
|
|
3
|
-
Version: 2.2.3
|
|
4
|
-
Summary: Generate/parse macOS Alias records from Python
|
|
5
|
-
Author-email: Alastair Houghton <alastair@alastairs-place.net>
|
|
6
|
-
Maintainer-email: Russell Keith-Magee <russell@keith-magee.com>
|
|
7
|
-
License-Expression: MIT
|
|
8
|
-
Project-URL: Documentation, https://mac-alias.readthedocs.io/en/latest/
|
|
9
|
-
Project-URL: Homepage, https://github.com/dmgbuild/mac_alias
|
|
10
|
-
Project-URL: Tracker, https://github.com/dmgbuild/mac_alias/issues
|
|
11
|
-
Project-URL: Source, https://github.com/dmgbuild/mac_alias
|
|
12
|
-
Keywords: mac_alias
|
|
13
|
-
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
-
Classifier: Programming Language :: Python :: 3
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.15
|
|
21
|
-
Classifier: Programming Language :: Python :: 3 :: Only
|
|
22
|
-
Classifier: Topic :: Desktop Environment
|
|
23
|
-
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
-
Requires-Python: >=3.10
|
|
25
|
-
Description-Content-Type: text/x-rst
|
|
26
|
-
License-File: LICENSE
|
|
27
|
-
Dynamic: license-file
|
|
28
|
-
|
|
29
|
-
=========
|
|
30
|
-
mac_alias
|
|
31
|
-
=========
|
|
32
|
-
|
|
33
|
-
.. |pyversions| image:: https://img.shields.io/pypi/pyversions/mac_alias.svg
|
|
34
|
-
:target: https://pypi.python.org/pypi/mac_alias
|
|
35
|
-
:alt: Python Versions
|
|
36
|
-
|
|
37
|
-
.. |version| image:: https://img.shields.io/pypi/v/mac_alias.svg
|
|
38
|
-
:target: https://pypi.python.org/pypi/mac_alias
|
|
39
|
-
:alt: PyPI Version
|
|
40
|
-
|
|
41
|
-
.. |maturity| image:: https://img.shields.io/pypi/status/mac_alias.svg
|
|
42
|
-
:target: https://pypi.python.org/pypi/mac_alias
|
|
43
|
-
:alt: Maturity
|
|
44
|
-
|
|
45
|
-
.. |license| image:: https://img.shields.io/pypi/l/mac_alias.svg
|
|
46
|
-
:target: https://github.com/dmgbuild/mac_alias/blob/main/LICENSE
|
|
47
|
-
:alt: MIT License
|
|
48
|
-
|
|
49
|
-
.. |ci| image:: https://github.com/dmgbuild/mac_alias/workflows/CI/badge.svg?branch=main
|
|
50
|
-
:target: https://github.com/dmgbuild/mac_alias/actions
|
|
51
|
-
:alt: Build Status
|
|
52
|
-
|
|
53
|
-
|pyversions| |version| |maturity| |license| |ci|
|
|
54
|
-
|
|
55
|
-
What is this?
|
|
56
|
-
-------------
|
|
57
|
-
|
|
58
|
-
``mac_alias`` lets you generate or read binary Alias and Bookmark records
|
|
59
|
-
from Python code.
|
|
60
|
-
|
|
61
|
-
While it is written in pure Python, some OS X specific code is required to
|
|
62
|
-
generate a proper Alias or Bookmark record for a given file, so this module
|
|
63
|
-
currently is not portable to other platforms.
|
|
64
|
-
|
|
65
|
-
Credit is due to Wim Lewis <wiml@hhhh.org>, whose work on reverse engineering
|
|
66
|
-
the alias format was extremely useful in writing this code. Alastair Houghton
|
|
67
|
-
<alastair@alastairs-place.net> was responsible for reverse engineering the
|
|
68
|
-
bookmark format.
|
|
69
|
-
|
|
70
|
-
See the documentation_ for more information.
|
|
71
|
-
|
|
72
|
-
.. _documentation: http://mac-alias.rtfd.org
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|