olink 0.1.0__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.
olink-0.1.0/.gitignore ADDED
@@ -0,0 +1,330 @@
1
+ ### Generated by gibo (https://github.com/simonwhitaker/gibo)
2
+ ### https://raw.github.com/github/gitignore/86922aee426c32ffb6098f9a38c42da75169501e/Global/macOS.gitignore
3
+
4
+ # General
5
+ .DS_Store
6
+ __MACOSX/
7
+ .AppleDouble
8
+ .LSOverride
9
+ Icon[
10
+
11
+ # Thumbnails
12
+ ._*
13
+
14
+ # Files that might appear in the root of a volume
15
+ .DocumentRevisions-V100
16
+ .fseventsd
17
+ .Spotlight-V100
18
+ .TemporaryItems
19
+ .Trashes
20
+ .VolumeIcon.icns
21
+ .com.apple.timemachine.donotpresent
22
+
23
+ # Directories potentially created on remote AFP share
24
+ .AppleDB
25
+ .AppleDesktop
26
+ Network Trash Folder
27
+ Temporary Items
28
+ .apdisk
29
+ ### Generated by gibo (https://github.com/simonwhitaker/gibo)
30
+ ### https://raw.github.com/github/gitignore/86922aee426c32ffb6098f9a38c42da75169501e/Global/Windows.gitignore
31
+
32
+ # Windows thumbnail cache files
33
+ Thumbs.db
34
+ Thumbs.db:encryptable
35
+ ehthumbs.db
36
+ ehthumbs_vista.db
37
+
38
+ # Dump file
39
+ *.stackdump
40
+
41
+ # Folder config file
42
+ [Dd]esktop.ini
43
+
44
+ # Recycle Bin used on file shares
45
+ $RECYCLE.BIN/
46
+
47
+ # Windows Installer files
48
+ *.cab
49
+ *.msi
50
+ *.msix
51
+ *.msm
52
+ *.msp
53
+
54
+ # Windows shortcuts
55
+ *.lnk
56
+ ### Generated by gibo (https://github.com/simonwhitaker/gibo)
57
+ ### https://raw.github.com/github/gitignore/86922aee426c32ffb6098f9a38c42da75169501e/Global/Linux.gitignore
58
+
59
+ *~
60
+
61
+ # temporary files which can be created if a process still has a handle open of a deleted file
62
+ .fuse_hidden*
63
+
64
+ # Metadata left by Dolphin file manager, which comes with KDE Plasma
65
+ .directory
66
+
67
+ # Linux trash folder which might appear on any partition or disk
68
+ .Trash-*
69
+
70
+ # .nfs files are created when an open file is removed but is still being accessed
71
+ .nfs*
72
+
73
+ # Log files created by default by the nohup command
74
+ nohup.out
75
+ ### Generated by gibo (https://github.com/simonwhitaker/gibo)
76
+ ### https://raw.github.com/github/gitignore/86922aee426c32ffb6098f9a38c42da75169501e/Global/VisualStudioCode.gitignore
77
+
78
+ .vscode/*
79
+ !.vscode/settings.json
80
+ !.vscode/tasks.json
81
+ !.vscode/launch.json
82
+ !.vscode/extensions.json
83
+ !.vscode/*.code-snippets
84
+ !*.code-workspace
85
+
86
+ # Built Visual Studio Code Extensions
87
+ *.vsix
88
+ ### Generated by gibo (https://github.com/simonwhitaker/gibo)
89
+ ### https://raw.github.com/github/gitignore/86922aee426c32ffb6098f9a38c42da75169501e/Python.gitignore
90
+
91
+ # Byte-compiled / optimized / DLL files
92
+ __pycache__/
93
+ *.py[codz]
94
+ *$py.class
95
+
96
+ # C extensions
97
+ *.so
98
+
99
+ # Distribution / packaging
100
+ .Python
101
+ build/
102
+ develop-eggs/
103
+ dist/
104
+ downloads/
105
+ eggs/
106
+ .eggs/
107
+ lib/
108
+ lib64/
109
+ parts/
110
+ sdist/
111
+ var/
112
+ wheels/
113
+ share/python-wheels/
114
+ *.egg-info/
115
+ .installed.cfg
116
+ *.egg
117
+ MANIFEST
118
+
119
+ # PyInstaller
120
+ # Usually these files are written by a python script from a template
121
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
122
+ *.manifest
123
+ *.spec
124
+
125
+ # Installer logs
126
+ pip-log.txt
127
+ pip-delete-this-directory.txt
128
+
129
+ # Unit test / coverage reports
130
+ htmlcov/
131
+ .tox/
132
+ .nox/
133
+ .coverage
134
+ .coverage.*
135
+ .cache
136
+ nosetests.xml
137
+ coverage.xml
138
+ *.cover
139
+ *.py.cover
140
+ .hypothesis/
141
+ .pytest_cache/
142
+ cover/
143
+
144
+ # Translations
145
+ *.mo
146
+ *.pot
147
+
148
+ # Django stuff:
149
+ *.log
150
+ local_settings.py
151
+ db.sqlite3
152
+ db.sqlite3-journal
153
+
154
+ # Flask stuff:
155
+ instance/
156
+ .webassets-cache
157
+
158
+ # Scrapy stuff:
159
+ .scrapy
160
+
161
+ # Sphinx documentation
162
+ docs/_build/
163
+
164
+ # PyBuilder
165
+ .pybuilder/
166
+ target/
167
+
168
+ # Jupyter Notebook
169
+ .ipynb_checkpoints
170
+
171
+ # IPython
172
+ profile_default/
173
+ ipython_config.py
174
+
175
+ # pyenv
176
+ # For a library or package, you might want to ignore these files since the code is
177
+ # intended to run in multiple environments; otherwise, check them in:
178
+ # .python-version
179
+
180
+ # pipenv
181
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
182
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
183
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
184
+ # install all needed dependencies.
185
+ # Pipfile.lock
186
+
187
+ # UV
188
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
189
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
190
+ # commonly ignored for libraries.
191
+ # uv.lock
192
+
193
+ # poetry
194
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
195
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
196
+ # commonly ignored for libraries.
197
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
198
+ # poetry.lock
199
+ # poetry.toml
200
+
201
+ # pdm
202
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
203
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
204
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
205
+ # pdm.lock
206
+ # pdm.toml
207
+ .pdm-python
208
+ .pdm-build/
209
+
210
+ # pixi
211
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
212
+ # pixi.lock
213
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
214
+ # in the .venv directory. It is recommended not to include this directory in version control.
215
+ .pixi
216
+
217
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
218
+ __pypackages__/
219
+
220
+ # Celery stuff
221
+ celerybeat-schedule
222
+ celerybeat.pid
223
+
224
+ # Redis
225
+ *.rdb
226
+ *.aof
227
+ *.pid
228
+
229
+ # RabbitMQ
230
+ mnesia/
231
+ rabbitmq/
232
+ rabbitmq-data/
233
+
234
+ # ActiveMQ
235
+ activemq-data/
236
+
237
+ # SageMath parsed files
238
+ *.sage.py
239
+
240
+ # Environments
241
+ .env
242
+ .envrc
243
+ .venv
244
+ env/
245
+ venv/
246
+ ENV/
247
+ env.bak/
248
+ venv.bak/
249
+
250
+ # Spyder project settings
251
+ .spyderproject
252
+ .spyproject
253
+
254
+ # Rope project settings
255
+ .ropeproject
256
+
257
+ # mkdocs documentation
258
+ /site
259
+
260
+ # mypy
261
+ .mypy_cache/
262
+ .dmypy.json
263
+ dmypy.json
264
+
265
+ # Pyre type checker
266
+ .pyre/
267
+
268
+ # pytype static type analyzer
269
+ .pytype/
270
+
271
+ # Cython debug symbols
272
+ cython_debug/
273
+
274
+ # PyCharm
275
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
276
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
277
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
278
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
279
+ # .idea/
280
+
281
+ # Abstra
282
+ # Abstra is an AI-powered process automation framework.
283
+ # Ignore directories containing user credentials, local state, and settings.
284
+ # Learn more at https://abstra.io/docs
285
+ .abstra/
286
+
287
+ # Visual Studio Code
288
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
289
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
290
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
291
+ # you could uncomment the following to ignore the entire vscode folder
292
+ # .vscode/
293
+
294
+ # Ruff stuff:
295
+ .ruff_cache/
296
+
297
+ # PyPI configuration file
298
+ .pypirc
299
+
300
+ # Marimo
301
+ marimo/_static/
302
+ marimo/_lsp/
303
+ __marimo__/
304
+
305
+ # Streamlit
306
+ .streamlit/secrets.toml
307
+ ### Generated by gibo (https://github.com/simonwhitaker/gibo)
308
+ ### https://raw.github.com/github/gitignore/86922aee426c32ffb6098f9a38c42da75169501e/GitHubPages.gitignore
309
+
310
+ # This .gitignore is appropriate for repositories deployed to GitHub Pages and using
311
+ # a Gemfile as specified at https://github.com/github/pages-gem#conventional
312
+
313
+ # Basic Jekyll gitignores (synchronize to Jekyll.gitignore)
314
+ _site/
315
+ .sass-cache/
316
+ .jekyll-cache/
317
+ .jekyll-metadata
318
+
319
+ # Additional Ruby/bundler ignore for when you run: bundle install
320
+ /vendor
321
+
322
+ # Specific ignore for GitHub Pages
323
+ # GitHub Pages will always use its own deployed version of pages-gem
324
+ # This means GitHub Pages will NOT use your Gemfile.lock and therefore it is
325
+ # counterproductive to check this file into the repository.
326
+ # Details at https://github.com/github/pages-gem/issues/768
327
+ Gemfile.lock
328
+
329
+ # hatch-vcs generated version file
330
+ src/olink/_version.py
olink-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Hasan Sezer Taşan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
olink-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,248 @@
1
+ Metadata-Version: 2.4
2
+ Name: olink
3
+ Version: 0.1.0
4
+ Summary: A CLI tool that opens external URLs related to your project.
5
+ Project-URL: Homepage, https://github.com/hasansezertasan/olink
6
+ Project-URL: Repository, https://github.com/hasansezertasan/olink
7
+ Project-URL: Issues, https://github.com/hasansezertasan/olink/issues
8
+ Project-URL: Changelog, https://github.com/hasansezertasan/olink/releases
9
+ Author-email: Hasan Sezer Taşan <hasansezertasan@gmail.com>
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Keywords: bitbucket,cli,developer-tools,git,github,gitlab,npm,open-url,pypi,tui
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Environment :: Console
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3 :: Only
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Topic :: Software Development
21
+ Classifier: Topic :: Software Development :: Version Control :: Git
22
+ Classifier: Topic :: Utilities
23
+ Classifier: Typing :: Typed
24
+ Requires-Python: >=3.14
25
+ Requires-Dist: defusedxml>=0.7.1
26
+ Requires-Dist: typer==0.26.7
27
+ Provides-Extra: tui
28
+ Requires-Dist: pyperclip==1.11.0; extra == 'tui'
29
+ Requires-Dist: textual>=3.0.0; extra == 'tui'
30
+ Description-Content-Type: text/markdown
31
+
32
+ # olink
33
+
34
+ A CLI tool that opens external URLs related to your project.
35
+
36
+ ## Installation
37
+
38
+ ```bash
39
+ uv tool install olink # CLI only
40
+ uv tool install 'olink[tui]' # Include the interactive TUI
41
+ ```
42
+
43
+ Or with `pipx`:
44
+
45
+ ```bash
46
+ pipx install olink
47
+ pipx install 'olink[tui]'
48
+ ```
49
+
50
+ ## Usage
51
+
52
+ ```bash
53
+ olink <target> # Open a target URL
54
+ olink -n <target> # Dry-run: print URL without opening
55
+ olink -d /path <target> # Use a different project directory
56
+ olink --list # List targets available for current project
57
+ olink --list-all # List all targets
58
+ olink --version # Show olink version
59
+ ```
60
+
61
+ ## Available Targets
62
+
63
+ ### Git Targets
64
+
65
+ Automatically detects GitHub, GitLab, Bitbucket, Gitea, and Forgejo (incl. Codeberg) from your remote URL. Self-hosted instances are detected by hostname keyword matching.
66
+
67
+ | Target | Description |
68
+ | ------------- | ------------------------------------ |
69
+ | `origin` | Open the remote origin URL |
70
+ | `upstream` | Open the upstream remote URL |
71
+ | `issues` | Open the issues page |
72
+ | `pulls` | Open pull/merge requests page |
73
+ | `actions` | Open CI/CD page (Actions, Pipelines) |
74
+ | `wiki` | Open the wiki page |
75
+ | `releases` | Open the releases page |
76
+ | `branches` | Open the branches page |
77
+ | `commits` | Open the commit history |
78
+ | `security` | Open the security page |
79
+ | `discussions` | Open the discussions page |
80
+
81
+ #### Supported Platforms
82
+
83
+ | Platform | Issues | PRs/MRs | CI/CD | Wiki | Releases |
84
+ | --------- | ----------- | ------------------- | -------------- | ---------- | ------------- |
85
+ | GitHub | `/issues` | `/pulls` | `/actions` | `/wiki` | `/releases` |
86
+ | GitLab | `/-/issues` | `/-/merge_requests` | `/-/pipelines` | `/-/wikis` | `/-/releases` |
87
+ | Bitbucket | `/issues` | `/pull-requests` | `/pipelines` | `/wiki` | `/downloads` |
88
+
89
+ **Note:** Some features are platform-specific:
90
+
91
+ - `discussions` is GitHub-only
92
+ - `security` is not available on Bitbucket, Gitea, or Forgejo
93
+ - Gitea/Forgejo paths mirror GitHub (`/issues`, `/pulls`, `/releases`, etc.)
94
+
95
+ **SSH aliases (`insteadOf`):** olink honors `[url "<rewritten>"].insteadOf = <prefix>` rules
96
+ in `.git/config`. Longest-prefix match wins, matching git's own behavior. This means
97
+ shorthand remotes like `github:owner/repo` resolve correctly when you have:
98
+
99
+ ```ini
100
+ [url "git@github.com:"]
101
+ insteadOf = github:
102
+ ```
103
+
104
+ ### Python / PyPI Targets
105
+
106
+ | Target | Description | Config File |
107
+ | ----------- | ------------------------------- | ---------------- |
108
+ | `pypi` | Open PyPI page | `pyproject.toml` |
109
+ | `inspector` | Open PyPI Inspector | `pyproject.toml` |
110
+ | `pypi-json` | Open PyPI JSON API | `pyproject.toml` |
111
+ | `pepy` | Open PePy download stats | `pyproject.toml` |
112
+ | `piwheels` | Open piwheels project page | `pyproject.toml` |
113
+ | `pypistats` | Open PyPI Stats | `pyproject.toml` |
114
+ | `piptrends` | Open Pip Trends | `pyproject.toml` |
115
+ | `clickpy` | Open ClickPy stats (ClickHouse) | `pyproject.toml` |
116
+ | `safety-db` | Open Safety DB vulnerabilities | `pyproject.toml` |
117
+
118
+ ### Multi-Ecosystem Targets
119
+
120
+ These services support multiple ecosystems (Python, npm, Rust, Go).
121
+
122
+ | Target | Description | Ecosystems |
123
+ | -------------- | ---------------------------------- | -------------------- |
124
+ | `snyk` | Open Snyk security advisor | pypi, npm, cargo, go |
125
+ | `libraries-io` | Open Libraries.io | pypi, npm, cargo, go |
126
+ | `deps` | Open deps.dev (Google Open Source) | pypi, npm, cargo, go |
127
+ | `ecosystems` | Open ecosyste.ms | pypi, npm, cargo, go |
128
+ | `socket` | Open Socket.dev package health | pypi, npm, cargo, go |
129
+
130
+ **Suffix Notation:** For projects with multiple ecosystems, use `target:ecosystem`:
131
+
132
+ ```bash
133
+ olink snyk:pypi # Explicit Python
134
+ olink snyk:npm # Explicit npm
135
+ olink deps:cargo # Explicit Rust
136
+ ```
137
+
138
+ If only one ecosystem is detected, the suffix is optional and auto-detection is used.
139
+
140
+ ### npm Targets
141
+
142
+ | Target | Description | Config File |
143
+ | --------------- | ------------------------------- | -------------- |
144
+ | `npm` | Open npm page | `package.json` |
145
+ | `bundlephobia` | Open Bundlephobia (bundle size) | `package.json` |
146
+ | `packagephobia` | Open Packagephobia (install) | `package.json` |
147
+ | `npm-stat` | Open npm-stat download charts | `package.json` |
148
+ | `jsdelivr` | Open jsDelivr package page | `package.json` |
149
+ | `unpkg` | Open UNPKG package page | `package.json` |
150
+ | `skypack` | Open Skypack package page | `package.json` |
151
+
152
+ ### Rust Targets
153
+
154
+ | Target | Description | Config File |
155
+ | -------- | --------------------------------- | ------------ |
156
+ | `crates` | Open crates.io page | `Cargo.toml` |
157
+ | `librs` | Open lib.rs (alternative browser) | `Cargo.toml` |
158
+ | `docsrs` | Open docs.rs API docs | `Cargo.toml` |
159
+
160
+ ### Go Targets
161
+
162
+ | Target | Description | Config File |
163
+ | -------- | --------------------------- | ----------- |
164
+ | `pkg-go` | Open pkg.go.dev module page | `go.mod` |
165
+ | `go-docs` | Open pkg.go.dev documentation | `go.mod` |
166
+
167
+ ### Other Ecosystem Targets
168
+
169
+ | Target | Description | Config File |
170
+ | ----------- | -------------------- | ---------------- |
171
+ | `packagist` | Open Packagist (PHP) | `composer.json` |
172
+ | `pub` | Open pub.dev (Dart) | `pubspec.yaml` |
173
+ | `gems` | Open RubyGems | `*.gemspec` |
174
+ | `rubygems-stats` | Open RubyGems download stats | `*.gemspec` |
175
+ | `open-vsx` | Open the Open VSX extension page | `package.json` |
176
+ | `maven` | Open Maven Central artifact page | `pom.xml` |
177
+ | `hackage` | Open Hackage package page | `*.cabal` |
178
+ | `cpan` | Open MetaCPAN module page | `Makefile.PL`, `dist.ini`, or `lib/*.pm` |
179
+ | `hex` | Open hex.pm (Elixir) | `mix.exs` |
180
+ | `nuget` | Open NuGet (.NET) | `*.csproj` |
181
+
182
+ ### Service Targets
183
+
184
+ | Target | Description |
185
+ | ----------- | ------------------- |
186
+ | `codecov` | Open Codecov page |
187
+ | `coveralls` | Open Coveralls page |
188
+
189
+ ## Examples
190
+
191
+ ```bash
192
+ # Open the GitHub repo for your project
193
+ olink origin
194
+
195
+ # Open issues page
196
+ olink issues
197
+
198
+ # Check the PyPI page for your package
199
+ olink pypi
200
+
201
+ # View download stats on PePy
202
+ olink pepy
203
+
204
+ # Check security vulnerabilities on Snyk
205
+ olink snyk
206
+
207
+ # In a monorepo with Python + npm, use explicit ecosystem
208
+ olink snyk:pypi # Check Python package on Snyk
209
+ olink deps:npm # View npm deps on deps.dev
210
+ olink socket:npm # Check npm package health on Socket.dev
211
+
212
+ # View dependency graph on deps.dev
213
+ olink deps
214
+
215
+ # Check npm bundle size
216
+ olink bundlephobia
217
+
218
+ # Open releases page
219
+ olink releases
220
+
221
+ # Open code coverage
222
+ olink codecov
223
+
224
+ # Preview URL without opening browser
225
+ olink -n pulls
226
+
227
+ # Open origin for a different project
228
+ olink -d ~/projects/other-project origin
229
+
230
+ # See which targets work for your project
231
+ olink --list
232
+ ```
233
+
234
+ ## Limitations
235
+
236
+ - olink must be run from the project root directory. Running from a subdirectory (e.g. `src/`) is not supported.
237
+
238
+ ## Requirements
239
+
240
+ - Python 3.14+
241
+
242
+ ## Development
243
+
244
+ See `JOURNAL.md` for a chronological record of decisions, attempts (including failures), and outcomes.
245
+
246
+ ## License
247
+
248
+ MIT