{ "cells": [ { "cell_type": "markdown", "id": "db4c4bc4", "metadata": {}, "source": [ "# core\n", "\n", "> API details" ] }, { "cell_type": "code", "execution_count": null, "id": "83a2770d", "metadata": {}, "outputs": [], "source": [ "#| default_exp core" ] }, { "cell_type": "code", "execution_count": null, "id": "34218e2b", "metadata": {}, "outputs": [], "source": [ "#| hide\n", "from nbdev.showdoc import *" ] }, { "cell_type": "code", "execution_count": null, "id": "72de23ed", "metadata": {}, "outputs": [], "source": [ "#| export\n", "import re\n", "from fasthtml.common import *\n", "from fastcore.all import *" ] }, { "cell_type": "code", "execution_count": null, "id": "6c13e65f", "metadata": {}, "outputs": [], "source": [ "#| export\n", "def find_releases(path:str):\n", " \"Given a path, find the latest/pre release versions available\"\n", " try: pre,user,repo,*search = path.split('/')\n", " except ValueError: return '!!!Err: Invalid path'\n", " if pre not in ('pre', 'latest'): return '!!!first component should be \"pre\" or \"latest\"'\n", " gh = f'https://api.github.com/repos/{user}/{repo}/releases'\n", " if pre=='latest': gh += '/latest'\n", " try: rels=urljson(gh)\n", " except Exception as e: return f'!!!Could not access {gh}; {e}'\n", " if pre=='pre': rels = rels[0]\n", " urls = L(rels['assets']).itemgot('browser_download_url')\n", " if search: urls = [o for o in urls if re.search(search[0], o)]\n", " return '\\n'.join(urls)" ] }, { "cell_type": "code", "execution_count": null, "id": "471f6681", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'https://github.com/pytorch/pytorch/releases/download/v2.8.0/pytorch-v2.8.0.tar.gz'" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_releases('latest/pytorch/pytorch')" ] }, { "cell_type": "code", "execution_count": null, "id": "26c35496", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'https://github.com/caddyserver/caddy/releases/download/v2.10.2/caddy_2.10.2_linux_amd64.tar.gz'" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_releases('latest/caddyserver/caddy/linux_amd64.tar.gz$')" ] }, { "cell_type": "code", "execution_count": null, "id": "68bbba84", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "https://github.com/electron/electron/releases/download/v39.0.0-alpha.5/chromedriver-v39.0.0-alpha.5-darwin-arm64.zip\n", "https://github.com/electron/electron/releases/download/v39.0.0-alpha.5/electron-v39.0.0-alpha.5-darwin-arm64-dsym-snapshot.zip\n", "https://github.com/electron/electron/releases/download/v39.0.0-alpha.5/electron-v39.0.0-alpha.5-darwin-arm64-dsym.zip\n", "https://github.com/electron/electron/releases/download/v39.0.0-alpha.5/electron-v39.0.0-alpha.5-darwin-arm64-symbols.zip\n", "https://github.com/electron/electron/releases/download/v39.0.0-alpha.5/electron-v39.0.0-alpha.5-darwin-arm64.zip\n", "https://github.com/electron/electron/releases/download/v39.0.0-alpha.5/ffmpeg-v39.0.0-alpha.5-darwin-arm64.zip\n", "https://github.com/electron/electron/releases/download/v39.0.0-alpha.5/mksnapshot-v39.0.0-alpha.5-darwin-arm64.zip\n" ] } ], "source": [ "print(find_releases('pre/electron/electron/darwin-arm64'))" ] }, { "cell_type": "code", "execution_count": null, "id": "cfa18a67", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'!!!Invalid path'" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_releases('invalid')" ] }, { "cell_type": "code", "execution_count": null, "id": "f792fd33", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'!!!Could not access https://api.github.com/repos/nonexistent/repo/releases/latest; HTTP Error 404: Not Found\\n====Error Body====\\n{\\n \"message\": \"Not Found\",\\n \"documentation_url\": \"https://docs.github.com/rest/releases/releases#get-the-latest-release\",\\n \"status\": \"404\"\\n}\\n'" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Test non-existent repo\n", "find_releases('latest/nonexistent/repo')" ] }, { "cell_type": "code", "execution_count": null, "id": "694b87dc", "metadata": {}, "outputs": [], "source": [ "#| hide\n", "import nbdev; nbdev.nbdev_export()" ] } ], "metadata": {}, "nbformat": 4, "nbformat_minor": 5 }