diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000000..2cbfcd20943b7 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,275 @@ +# Copyright 2022-2024, axodotdev +# SPDX-License-Identifier: MIT or Apache-2.0 +# +# CI that: +# +# * checks for a Git Tag that looks like a release +# * builds artifacts with cargo-dist (archives, installers, hashes) +# * uploads those artifacts to temporary workflow zip +# * on success, uploads the artifacts to a GitHub Release +# +# Note that the GitHub Release will be created with a generated +# title/body based on your changelogs. + +name: Release + +permissions: + contents: write + +# This task will run whenever you workflow_dispatch with a tag that looks like a version +# like "1.0.0", "v0.1.0-prerelease.1", "my-app/0.1.0", "releases/v1.0.0", etc. +# Various formats will be parsed into a VERSION and an optional PACKAGE_NAME, where +# PACKAGE_NAME must be the name of a Cargo package in your workspace, and VERSION +# must be a Cargo-style SemVer Version (must have at least major.minor.patch). +# +# If PACKAGE_NAME is specified, then the announcement will be for that +# package (erroring out if it doesn't have the given version or isn't cargo-dist-able). +# +# If PACKAGE_NAME isn't specified, then the announcement will be for all +# (cargo-dist-able) packages in the workspace with that version (this mode is +# intended for workspaces with only one dist-able package, or with all dist-able +# packages versioned/released in lockstep). +# +# If you push multiple tags at once, separate instances of this workflow will +# spin up, creating an independent announcement for each one. However, GitHub +# will hard limit this to 3 tags per commit, as it will assume more tags is a +# mistake. +# +# If there's a prerelease-style suffix to the version, then the release(s) +# will be marked as a prerelease. +on: + pull_request: + workflow_dispatch: + inputs: + tag: + description: Release Tag + required: true + default: dry-run + type: string + +jobs: + # Run 'cargo dist plan' (or host) to determine what tasks we need to do + plan: + runs-on: "ubuntu-20.04" + outputs: + val: ${{ steps.plan.outputs.manifest }} + tag: ${{ (inputs.tag != 'dry-run' && inputs.tag) || '' }} + tag-flag: ${{ inputs.tag && inputs.tag != 'dry-run' && format('--tag={0}', inputs.tag) || '' }} + publishing: ${{ inputs.tag && inputs.tag != 'dry-run' }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Install cargo-dist + # we specify bash to get pipefail; it guards against the `curl` command + # failing. otherwise `sh` won't catch that `curl` returned non-0 + shell: bash + run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.15.1/cargo-dist-installer.sh | sh" + # sure would be cool if github gave us proper conditionals... + # so here's a doubly-nested ternary-via-truthiness to try to provide the best possible + # functionality based on whether this is a pull_request, and whether it's from a fork. + # (PRs run on the *source* but secrets are usually on the *target* -- that's *good* + # but also really annoying to build CI around when it needs secrets to work right.) + - id: plan + run: | + cargo dist ${{ (inputs.tag && inputs.tag != 'dry-run' && format('host --steps=create --tag={0}', inputs.tag)) || 'plan' }} --output-format=json > plan-dist-manifest.json + echo "cargo dist ran successfully" + cat plan-dist-manifest.json + echo "manifest=$(jq -c "." plan-dist-manifest.json)" >> "$GITHUB_OUTPUT" + - name: "Upload dist-manifest.json" + uses: actions/upload-artifact@v4 + with: + name: artifacts-plan-dist-manifest + path: plan-dist-manifest.json + + # Build and packages all the platform-specific things + build-local-artifacts: + name: build-local-artifacts (${{ join(matrix.targets, ', ') }}) + # Let the initial task tell us to not run (currently very blunt) + needs: + - plan + if: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix.include != null && (needs.plan.outputs.publishing == 'true' || fromJson(needs.plan.outputs.val).ci.github.pr_run_mode == 'upload') || inputs.tag == 'dry-run' }} + strategy: + fail-fast: false + # Target platforms/runners are computed by cargo-dist in create-release. + # Each member of the matrix has the following arguments: + # + # - runner: the github runner + # - dist-args: cli flags to pass to cargo dist + # - install-dist: expression to run to install cargo-dist on the runner + # + # Typically there will be: + # - 1 "global" task that builds universal installers + # - N "local" tasks that build each platform's binaries and platform-specific installers + matrix: ${{ fromJson(needs.plan.outputs.val).ci.github.artifacts_matrix }} + runs-on: ${{ matrix.runner }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BUILD_MANIFEST_NAME: target/distrib/${{ join(matrix.targets, '-') }}-dist-manifest.json + steps: + - name: enable windows longpaths + run: | + git config --global core.longpaths true + - uses: actions/checkout@v4 + with: + submodules: recursive + - uses: swatinem/rust-cache@v2 + with: + key: ${{ join(matrix.targets, '-') }} + - name: Install cargo-dist + run: ${{ matrix.install_dist }} + # Get the dist-manifest + - name: Fetch local artifacts + uses: actions/download-artifact@v4 + with: + pattern: artifacts-* + path: target/distrib/ + merge-multiple: true + - name: Install dependencies + run: | + ${{ matrix.packages_install }} + - name: Build artifacts + run: | + # Actually do builds and make zips and whatnot + cargo dist build ${{ needs.plan.outputs.tag-flag }} --print=linkage --output-format=json ${{ matrix.dist_args }} > dist-manifest.json + echo "cargo dist ran successfully" + - id: cargo-dist + name: Post-build + # We force bash here just because github makes it really hard to get values up + # to "real" actions without writing to env-vars, and writing to env-vars has + # inconsistent syntax between shell and powershell. + shell: bash + run: | + # Parse out what we just built and upload it to scratch storage + echo "paths<> "$GITHUB_OUTPUT" + jq --raw-output ".upload_files[]" dist-manifest.json >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + + cp dist-manifest.json "$BUILD_MANIFEST_NAME" + - name: "Upload artifacts" + uses: actions/upload-artifact@v4 + with: + name: artifacts-build-local-${{ join(matrix.targets, '_') }} + path: | + ${{ steps.cargo-dist.outputs.paths }} + ${{ env.BUILD_MANIFEST_NAME }} + + # Build and package all the platform-agnostic(ish) things + build-global-artifacts: + needs: + - plan + - build-local-artifacts + runs-on: "ubuntu-20.04" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BUILD_MANIFEST_NAME: target/distrib/global-dist-manifest.json + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Install cargo-dist + shell: bash + run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.15.1/cargo-dist-installer.sh | sh" + # Get all the local artifacts for the global tasks to use (for e.g. checksums) + - name: Fetch local artifacts + uses: actions/download-artifact@v4 + with: + pattern: artifacts-* + path: target/distrib/ + merge-multiple: true + - id: cargo-dist + shell: bash + run: | + cargo dist build ${{ needs.plan.outputs.tag-flag }} --output-format=json "--artifacts=global" > dist-manifest.json + echo "cargo dist ran successfully" + + # Parse out what we just built and upload it to scratch storage + echo "paths<> "$GITHUB_OUTPUT" + jq --raw-output ".upload_files[]" dist-manifest.json >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + + cp dist-manifest.json "$BUILD_MANIFEST_NAME" + - name: "Upload artifacts" + uses: actions/upload-artifact@v4 + with: + name: artifacts-build-global + path: | + ${{ steps.cargo-dist.outputs.paths }} + ${{ env.BUILD_MANIFEST_NAME }} + # Determines if we should publish/announce + host: + needs: + - plan + - build-local-artifacts + - build-global-artifacts + # Only run if we're "publishing", and only if local and global didn't fail (skipped is fine) + if: ${{ always() && needs.plan.outputs.publishing == 'true' && (needs.build-global-artifacts.result == 'skipped' || needs.build-global-artifacts.result == 'success') && (needs.build-local-artifacts.result == 'skipped' || needs.build-local-artifacts.result == 'success') }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + runs-on: "ubuntu-20.04" + outputs: + val: ${{ steps.host.outputs.manifest }} + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: Install cargo-dist + run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.15.1/cargo-dist-installer.sh | sh" + # Fetch artifacts from scratch-storage + - name: Fetch artifacts + uses: actions/download-artifact@v4 + with: + pattern: artifacts-* + path: target/distrib/ + merge-multiple: true + # This is a harmless no-op for GitHub Releases, hosting for that happens in "announce" + - id: host + shell: bash + run: | + cargo dist host ${{ needs.plan.outputs.tag-flag }} --steps=upload --steps=release --output-format=json > dist-manifest.json + echo "artifacts uploaded and released successfully" + cat dist-manifest.json + echo "manifest=$(jq -c "." dist-manifest.json)" >> "$GITHUB_OUTPUT" + - name: "Upload dist-manifest.json" + uses: actions/upload-artifact@v4 + with: + # Overwrite the previous copy + name: artifacts-dist-manifest + path: dist-manifest.json + + # Create a GitHub Release while uploading all files to it + announce: + needs: + - plan + - host + # use "always() && ..." to allow us to wait for all publish jobs while + # still allowing individual publish jobs to skip themselves (for prereleases). + # "host" however must run to completion, no skipping allowed! + if: ${{ always() && needs.host.result == 'success' }} + runs-on: "ubuntu-20.04" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - name: "Download GitHub Artifacts" + uses: actions/download-artifact@v4 + with: + pattern: artifacts-* + path: artifacts + merge-multiple: true + - name: Cleanup + run: | + # Remove the granular manifests + rm -f artifacts/*-dist-manifest.json + - name: Create GitHub Release + uses: ncipollo/release-action@v1 + with: + tag: ${{ needs.plan.outputs.tag }} + name: ${{ fromJson(needs.host.outputs.val).announcement_title }} + body: ${{ fromJson(needs.host.outputs.val).announcement_github_body }} + prerelease: ${{ fromJson(needs.host.outputs.val).announcement_is_prerelease }} + artifacts: "artifacts/*" diff --git a/.github/workflows/turborepo-release.yml b/.github/workflows/turborepo-release.yml index 1f7e39ae7b2a9..d44f3b354a98f 100644 --- a/.github/workflows/turborepo-release.yml +++ b/.github/workflows/turborepo-release.yml @@ -99,152 +99,9 @@ jobs: - name: Run JS Package Tests run: turbo run check-types test --filter="./packages/*" --color - build-rust: - name: "Build Rust" - needs: [stage, rust-smoke-test, js-smoke-test] - strategy: - fail-fast: false - matrix: - settings: - - host: macos-latest - target: "x86_64-apple-darwin" - container-options: "--rm" - - host: macos-latest - target: "aarch64-apple-darwin" - container-options: "--rm" - - host: ubuntu-latest - container: ubuntu:xenial - container-options: "--platform=linux/amd64 --rm" - container-setup: "apt-get update && apt-get install -y curl musl-tools sudo unzip" - target: "x86_64-unknown-linux-musl" - setup: "apt-get install -y build-essential clang-5.0 lldb-5.0 llvm-5.0-dev libclang-5.0-dev" - - host: ubuntu-latest - container-options: "--rm" - target: "aarch64-unknown-linux-musl" - rust-build-env: 'CC_aarch64_unknown_linux_musl=clang AR_aarch64_unknown_linux_musl=llvm-ar RUSTFLAGS="-Clink-self-contained=yes -Clinker=rust-lld"' - setup: "sudo apt-get update && sudo apt-get install -y build-essential musl-tools clang llvm gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu" - - host: windows-latest - target: x86_64-pc-windows-gnu - setup: "rustup set default-host x86_64-pc-windows-gnu" - container-options: "--rm" - runs-on: ${{ matrix.settings.host }} - container: - image: ${{ matrix.settings.container }} - options: ${{ matrix.settings.container-options }} - steps: - - name: Show Stage Commit - run: echo "${{ needs.stage.outputs.stage-branch }}" - - name: Checkout repo - uses: actions/checkout@v3 - with: - ref: "${{ needs.stage.outputs.stage-branch }}" - - - name: Setup Container - if: ${{ matrix.settings.container-setup }} - run: ${{ matrix.settings.container-setup }} - - - name: Setup Protoc - uses: arduino/setup-protoc@v2.1.0 - with: - version: "26.x" - repo-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Setup capnproto - uses: ./.github/actions/setup-capnproto - - - name: Setup Rust Up - if: ${{ matrix.settings.container-setup }} - # setup-rust-toolchain uses the --retry-connrefused flag with curl to install rustup - # this flag was added in curl 7.52.0, but the Ubuntu version we use only has 7.47.0 - run: | - curl --proto '=https' --tlsv1.2 --retry 10 --location --silent --show-error --fail "https://sh.rustup.rs" | sh -s -- --default-toolchain none -y - echo "${CARGO_HOME:-$HOME/.cargo}/bin" >> $GITHUB_PATH - - - name: Rust Setup - uses: actions-rust-lang/setup-rust-toolchain@v1 - with: - target: ${{ matrix.settings.target }} - # needed to not make it override the defaults - rustflags: "" - # we want more specific settings - cache: false - - - name: Build Setup - shell: bash - if: ${{ matrix.settings.setup }} - run: ${{ matrix.settings.setup }} - - - name: Build - run: ${{ matrix.settings.rust-build-env }} cargo build --profile release-turborepo -p turbo --target ${{ matrix.settings.target }} - - - name: Upload Artifacts - uses: actions/upload-artifact@v3 - with: - name: turbo-${{ matrix.settings.target }} - path: target/${{ matrix.settings.target }}/release-turborepo/turbo* - - npm-publish: - name: "Publish To NPM" - runs-on: ubuntu-latest - needs: [stage, build-rust] - steps: - - name: Show Stage Commit - run: echo "${{ needs.stage.outputs.stage-branch }}" - - uses: actions/checkout@v3 - with: - ref: "${{ needs.stage.outputs.stage-branch }}" - - run: git fetch origin --tags - - uses: ./.github/actions/setup-node - with: - enable-corepack: false - - - name: Install Global Turbo - uses: ./.github/actions/install-global-turbo - - - name: Configure git - run: | - git config --global user.name 'Turbobot' - git config --global user.email 'turbobot@vercel.com' - - - name: Install GoReleaser - uses: goreleaser/goreleaser-action@v3 - with: - distribution: goreleaser-pro - version: v1.18.2 - install-only: true - env: - GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }} - - - name: Download Rust artifacts - uses: actions/download-artifact@v3 - with: - path: rust-artifacts - - - name: Move Rust artifacts into place - run: | - mv rust-artifacts/turbo-aarch64-apple-darwin cli/dist-darwin-arm64 - mv rust-artifacts/turbo-aarch64-unknown-linux-musl cli/dist-linux-arm64 - cp -r rust-artifacts/turbo-x86_64-pc-windows-gnu cli/dist-windows-arm64 - mv rust-artifacts/turbo-x86_64-unknown-linux-musl cli/dist-linux-amd64 - mv rust-artifacts/turbo-x86_64-apple-darwin cli/dist-darwin-amd64 - mv rust-artifacts/turbo-x86_64-pc-windows-gnu cli/dist-windows-amd64 - - - name: Perform Release - run: cd cli && make publish-turbo SKIP_PUBLISH=${{ inputs.dry_run && '--skip-publish' || '' }} - env: - GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - - # Upload published artifacts in case they are needed for debugging later - - name: Upload Artifacts - uses: actions/upload-artifact@v3 - with: - name: turbo-combined - path: cli/dist - create-release-pr: name: "Open Release Branch PR" - needs: [stage, npm-publish] + needs: [stage, js-smoke-test, rust-smoke-test] runs-on: ubuntu-latest steps: - name: Show Stage Commit diff --git a/Cargo.lock b/Cargo.lock index 563d5187b0118..619fcead1489e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -563,8 +563,8 @@ dependencies = [ "bytes", "futures-util", "http 0.2.11", - "http-body", - "hyper", + "http-body 0.4.5", + "hyper 0.14.28", "itoa", "matchit", "memchr", @@ -593,7 +593,7 @@ dependencies = [ "bytes", "futures-util", "http 0.2.11", - "http-body", + "http-body 0.4.5", "mime", "rustversion", "tower-layer", @@ -609,8 +609,8 @@ dependencies = [ "bytes", "futures-util", "http 0.2.11", - "http-body", - "hyper", + "http-body 0.4.5", + "hyper 0.14.28", "tokio", "tower-service", ] @@ -1306,7 +1306,7 @@ dependencies = [ "tracing", "url", "which", - "winreg", + "winreg 0.10.1", ] [[package]] @@ -1499,6 +1499,16 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +[[package]] +name = "colored" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +dependencies = [ + "lazy_static", + "windows-sys 0.48.0", +] + [[package]] name = "combine" version = "4.6.6" @@ -3305,7 +3315,7 @@ dependencies = [ "hash32", "rustc_version 0.4.0", "serde", - "spin 0.9.8", + "spin", "stable_deref_trait", ] @@ -3412,6 +3422,29 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "http-body" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +dependencies = [ + "bytes", + "futures-core", + "http 1.1.0", + "http-body 1.0.0", + "pin-project-lite", +] + [[package]] name = "httparse" version = "1.8.0" @@ -3437,7 +3470,7 @@ dependencies = [ "crossbeam-utils", "form_urlencoded", "futures-util", - "hyper", + "hyper 0.14.28", "isahc", "lazy_static", "levenshtein", @@ -3491,7 +3524,7 @@ dependencies = [ "futures-util", "h2", "http 0.2.11", - "http-body", + "http-body 0.4.5", "httparse", "httpdate", "itoa", @@ -3503,17 +3536,40 @@ dependencies = [ "want", ] +[[package]] +name = "hyper" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + [[package]] name = "hyper-rustls" -version = "0.23.2" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" dependencies = [ - "http 0.2.11", - "hyper", - "rustls 0.20.9", + "futures-util", + "http 1.1.0", + "hyper 1.3.1", + "hyper-util", + "rustls", + "rustls-pki-types", "tokio", "tokio-rustls", + "tower-service", ] [[package]] @@ -3522,7 +3578,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper", + "hyper 0.14.28", "pin-project-lite", "tokio", "tokio-io-timeout", @@ -3530,15 +3586,18 @@ dependencies = [ [[package]] name = "hyper-tls" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", - "hyper", + "http-body-util", + "hyper 1.3.1", + "hyper-util", "native-tls", "tokio", "tokio-native-tls", + "tower-service", ] [[package]] @@ -3547,13 +3606,33 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "880b8b1c98a5ec2a505c7c90db6d3f6f1f480af5655d9c5b55facc9382a5a5b5" dependencies = [ - "hyper", + "hyper 0.14.28", "pin-project", "tokio", "tokio-tungstenite", "tungstenite 0.18.0", ] +[[package]] +name = "hyper-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "hyper 1.3.1", + "pin-project-lite", + "socket2 0.5.4", + "tokio", + "tower", + "tower-service", + "tracing", +] + [[package]] name = "iana-time-zone" version = "0.1.57" @@ -3875,6 +3954,8 @@ dependencies = [ "mime", "once_cell", "polling", + "serde", + "serde_json", "slab", "sluice", "tracing", @@ -4694,6 +4775,26 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "mockito" +version = "0.32.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406f43768da5a859ce19bb0978fd8dc2167a7d9a52f3935c6a187242e1a4ff9f" +dependencies = [ + "assert-json-diff", + "colored", + "futures", + "hyper 0.14.28", + "lazy_static", + "log", + "rand 0.8.5", + "regex", + "serde_json", + "serde_urlencoded", + "similar", + "tokio", +] + [[package]] name = "modularize_imports" version = "0.68.16" @@ -5728,7 +5829,7 @@ dependencies = [ "shared_library", "shell-words", "winapi", - "winreg", + "winreg 0.10.1", ] [[package]] @@ -6415,21 +6516,22 @@ checksum = "e3a8614ee435691de62bcffcf4a66d91b3594bf1428a5722e79103249a095690" [[package]] name = "reqwest" -version = "0.11.17" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13293b639a097af28fc8a90f22add145a9c954e49d77da06263d58cf44d5fb91" +checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" dependencies = [ - "base64 0.21.4", + "base64 0.22.1", "bytes", - "encoding_rs", + "futures-channel", "futures-core", "futures-util", - "h2", - "http 0.2.11", - "http-body", - "hyper", + "http 1.1.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.3.1", "hyper-rustls", "hyper-tls", + "hyper-util", "ipnet", "js-sys", "log", @@ -6438,12 +6540,14 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.20.9", + "rustls", "rustls-native-certs", "rustls-pemfile", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", "tokio", "tokio-native-tls", "tokio-rustls", @@ -6454,8 +6558,8 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 0.22.6", - "winreg", + "webpki-roots", + "winreg 0.52.0", ] [[package]] @@ -6467,21 +6571,6 @@ dependencies = [ "bytemuck", ] -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", - "web-sys", - "winapi", -] - [[package]] name = "ring" version = "0.17.7" @@ -6491,8 +6580,8 @@ dependencies = [ "cc", "getrandom", "libc", - "spin 0.9.8", - "untrusted 0.9.0", + "spin", + "untrusted", "windows-sys 0.48.0", ] @@ -6665,57 +6754,56 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" -dependencies = [ - "log", - "ring 0.16.20", - "sct", - "webpki", -] - -[[package]] -name = "rustls" -version = "0.21.10" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" dependencies = [ "log", - "ring 0.17.7", + "ring", + "rustls-pki-types", "rustls-webpki", - "sct", + "subtle", + "zeroize", ] [[package]] name = "rustls-native-certs" -version = "0.6.3" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" dependencies = [ "openssl-probe", "rustls-pemfile", + "rustls-pki-types", "schannel", "security-framework", ] [[package]] name = "rustls-pemfile" -version = "1.0.2" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" dependencies = [ - "base64 0.21.4", + "base64 0.22.1", + "rustls-pki-types", ] +[[package]] +name = "rustls-pki-types" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" + [[package]] name = "rustls-webpki" -version = "0.101.7" +version = "0.102.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" dependencies = [ - "ring 0.17.7", - "untrusted 0.9.0", + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] @@ -6809,16 +6897,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring 0.16.20", - "untrusted 0.7.1", -] - [[package]] name = "seahash" version = "4.1.0" @@ -7384,12 +7462,6 @@ dependencies = [ "url", ] -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "spin" version = "0.9.8" @@ -9597,13 +9669,13 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.4" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" dependencies = [ - "rustls 0.20.9", + "rustls", + "rustls-pki-types", "tokio", - "webpki", ] [[package]] @@ -9737,8 +9809,8 @@ dependencies = [ "futures-util", "h2", "http 0.2.11", - "http-body", - "hyper", + "http-body 0.4.5", + "hyper 0.14.28", "hyper-timeout", "percent-encoding", "pin-project", @@ -9767,8 +9839,8 @@ dependencies = [ "bytes", "h2", "http 0.2.11", - "http-body", - "hyper", + "http-body 0.4.5", + "hyper 0.14.28", "hyper-timeout", "percent-encoding", "pin-project", @@ -10082,7 +10154,7 @@ dependencies = [ [[package]] name = "turbo" -version = "0.1.0" +version = "2.0.4-canary.3" dependencies = [ "anyhow", "assert_cmd", @@ -10624,7 +10696,7 @@ dependencies = [ "async-compression", "auto-hash-map", "futures", - "hyper", + "hyper 0.14.28", "hyper-tungstenite", "indexmap 1.9.3", "mime", @@ -11209,7 +11281,7 @@ dependencies = [ [[package]] name = "turborepo-lib" -version = "0.1.0" +version = "2.0.2-canary.1" dependencies = [ "anyhow", "assert_cmd", @@ -11690,12 +11762,6 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1865806a559042e51ab5414598446a5871b561d21b6764f2eabb0dd481d880a6" -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - [[package]] name = "untrusted" version = "0.9.0" @@ -11705,10 +11771,12 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "update-informer" version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f8811797a24ff123db3c6e1087aa42551d03d772b3724be421ad063da1f5f3f" dependencies = [ + "colored", "directories", + "isahc", + "mockito", + "once_cell", "reqwest", "semver 1.0.23", "serde", @@ -11718,21 +11786,22 @@ dependencies = [ [[package]] name = "ureq" -version = "2.9.1" +version = "2.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cdd25c339e200129fe4de81451814e5228c9b771d57378817d6117cc2b3f97" +checksum = "d11a831e3c0b56e438a28308e7c810799e3c118417f342d30ecec080105395cd" dependencies = [ - "base64 0.21.4", + "base64 0.22.1", "flate2", "log", "native-tls", "once_cell", - "rustls 0.21.10", + "rustls", + "rustls-pki-types", "rustls-webpki", "serde", "serde_json", "url", - "webpki-roots 0.25.3", + "webpki-roots", ] [[package]] @@ -12157,9 +12226,9 @@ dependencies = [ [[package]] name = "wasm-streams" -version = "0.2.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" dependencies = [ "futures-util", "js-sys", @@ -12541,31 +12610,15 @@ dependencies = [ "wasmer-toml", ] -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring 0.16.20", - "untrusted 0.7.1", -] - [[package]] name = "webpki-roots" -version = "0.22.6" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +checksum = "3c452ad30530b54a4d8e71952716a212b08efd0f3562baa66c29a618b07da7c3" dependencies = [ - "webpki", + "rustls-pki-types", ] -[[package]] -name = "webpki-roots" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" - [[package]] name = "weezl" version = "0.1.8" @@ -12942,6 +12995,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + [[package]] name = "wio" version = "0.2.2" diff --git a/Cargo.toml b/Cargo.toml index 1087dc0ede7b8..68c4183dec16a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ members = [ "crates/turbo-prehash", "crates/turbopack*", "crates/turborepo*", + "crates/update-informer", "packages/turbo-repository/rust", "xtask", ] @@ -76,6 +77,48 @@ turbopack-wasi = [ "path:crates/turbo-tasks-build", ] +# Config for 'cargo dist' +[workspace.metadata.dist] +# Whether to consider the binaries in a package for distribution (defaults true) +dist = false +# Build only the required packages, and individually +precise-builds = true +# The preferred cargo-dist version to use in CI (Cargo.toml SemVer syntax) +cargo-dist-version = "0.15.1" +# CI backends to support +ci = "github" +# The installers to generate for each app +installers = ["npm"] +# Target platforms to build apps for (Rust target-triple syntax) +targets = ["aarch64-apple-darwin", "aarch64-unknown-linux-musl", "x86_64-apple-darwin", "x86_64-unknown-linux-gnu", "x86_64-unknown-linux-musl", "x86_64-pc-windows-msvc"] +# The archive format to use for windows builds (defaults .zip) +windows-archive = ".tar.gz" +# The archive format to use for non-windows builds (defaults .tar.xz) +unix-archive = ".tar.gz" +# Publish jobs to run in CI +pr-run-mode = "plan" +# Whether CI should trigger releases with dispatches instead of tag pushes +dispatch-releases = true + +[workspace.metadata.dist.dependencies.homebrew] +protobuf = "*" +capnp = "*" + +[workspace.metadata.dist.dependencies.chocolatey] +protoc = "27.1.0" +capnproto = "*" + +[workspace.metadata.dist.dependencies.apt] +build-essential = "*" +musl-tools = "*" +musl-dev = "*" +clang = "*" +llvm = "*" +capnproto = "*" +gcc-aarch64-linux-gnu = { version = "*", targets = ["aarch64-unknown-linux-musl"] } +binutils-aarch64-linux-gnu = { version = "*", targets = ["aarch64-unknown-linux-musl"] } +protobuf-compiler = "2" + [workspace.lints.clippy] too_many_arguments = "allow" @@ -103,6 +146,11 @@ opt-level = "z" inherits = "release" strip = true +# The profile that 'cargo dist' will build with +[profile.dist] +inherits = "release" +lto = "thin" + # Declare dependencies used across workspace packages requires single version bump. # ref: https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#inheriting-a-dependency-from-a-workspace [workspace.dependencies] @@ -190,12 +238,13 @@ wax = { path = "crates/turborepo-wax" } turborepo-vercel-api = { path = "crates/turborepo-vercel-api" } turborepo-vercel-api-mock = { path = "crates/turborepo-vercel-api-mock" } turborepo-vt100 = { path = "crates/turborepo-vt100" } +update-informer = { path = "crates/update-informer", default-features = false, features = ["reqwest"] } # Be careful when selecting tls backend, including change default tls backend. # If you changed, must verify with ALL build targets with next-swc to ensure # it works. next-swc have various platforms, some doesn't support native (using openssl-sys) # and some aren't buildable with rustls. -reqwest = { version = "=0.11.17", default-features = false } +reqwest = { version = "0.12.4", default-features = false } chromiumoxide = { version = "0.5.0", features = [ "tokio-runtime", @@ -305,6 +354,7 @@ webbrowser = "0.8.7" which = "4.4.0" unicode-segmentation = "1.10.1" + [patch.crates-io] # TODO: Use upstream when https://github.com/servo/pathfinder/pull/566 lands pathfinder_simd = { git = "https://github.com/vercel/pathfinder", branch = "rm-stdarch_arm_crc32" } diff --git a/crates/turborepo-lib/Cargo.toml b/crates/turborepo-lib/Cargo.toml index 1c24655c424cd..7c5dacc574462 100644 --- a/crates/turborepo-lib/Cargo.toml +++ b/crates/turborepo-lib/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "turborepo-lib" -version = "0.1.0" +version = "2.0.2-canary.1" edition = "2021" license = "MIT" diff --git a/crates/turborepo-lib/src/lib.rs b/crates/turborepo-lib/src/lib.rs index c853bf85a79af..69f567e2e2e3e 100644 --- a/crates/turborepo-lib/src/lib.rs +++ b/crates/turborepo-lib/src/lib.rs @@ -48,12 +48,7 @@ pub use crate::{ }; pub fn get_version() -> &'static str { - include_str!("../../../version.txt") - .split_once('\n') - .expect("Failed to read version from version.txt") - .0 - // On windows we still have a trailing \r - .trim_end() + env!("CARGO_PKG_VERSION") } pub fn main() -> Result { diff --git a/crates/turborepo-lsp/Cargo.toml b/crates/turborepo-lsp/Cargo.toml index 5b1f508321fb9..ce1592da6eea0 100644 --- a/crates/turborepo-lsp/Cargo.toml +++ b/crates/turborepo-lsp/Cargo.toml @@ -21,6 +21,6 @@ tokio = { workspace = true, features = ["rt-multi-thread", "macros", "io-std"] } tokio-retry = "0.3.0" tower-lsp = "0.20.0" turbopath = { version = "0.1.0", path = "../turborepo-paths" } -turborepo-lib = { version = "0.1.0", path = "../turborepo-lib" } +turborepo-lib = { path = "../turborepo-lib" } turborepo-repository = { version = "0.1.0", path = "../turborepo-repository" } wax.workspace = true diff --git a/crates/turborepo-pidlock/Cargo.toml b/crates/turborepo-pidlock/Cargo.toml index 52c48da3ed56f..2a3aabd209972 100644 --- a/crates/turborepo-pidlock/Cargo.toml +++ b/crates/turborepo-pidlock/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Paul Hummer "] license = "MIT" edition = "2021" description = "A library for using pidfiles as resource locks" -repository = "https://github.com/rockstar/pidlock" +# repository = "https://github.com/rockstar/pidlock" keywords = ["pidfile", "file", "filelock", "server", "lock"] categories = ["filesystem"] readme = "README.md" diff --git a/crates/turborepo-updater/Cargo.toml b/crates/turborepo-updater/Cargo.toml index 40c7cd268d2c4..d957ad0b0792b 100644 --- a/crates/turborepo-updater/Cargo.toml +++ b/crates/turborepo-updater/Cargo.toml @@ -22,6 +22,4 @@ reqwest = { workspace = true, features = ["json", "blocking"] } semver = { workspace = true } serde = { workspace = true, features = ["derive"] } thiserror = { workspace = true } -update-informer = { version = "1.1", default-features = false, features = [ - "reqwest", -] } +update-informer = { workspace = true } diff --git a/crates/turborepo-vercel-api-mock/Cargo.toml b/crates/turborepo-vercel-api-mock/Cargo.toml index 76e876234f63f..94c9e53239be9 100644 --- a/crates/turborepo-vercel-api-mock/Cargo.toml +++ b/crates/turborepo-vercel-api-mock/Cargo.toml @@ -3,6 +3,7 @@ name = "turborepo-vercel-api-mock" version = "0.1.0" edition = "2021" license = "MIT" +publish = false # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/crates/turborepo-wax/Cargo.toml b/crates/turborepo-wax/Cargo.toml index f5cc1566f8279..22247d357de03 100644 --- a/crates/turborepo-wax/Cargo.toml +++ b/crates/turborepo-wax/Cargo.toml @@ -3,7 +3,7 @@ name = "wax" version = "0.6.0" authors = ["Sean Olson "] description = "Opinionated and portable globs that can be matched against paths and directory trees." -repository = "https://github.com/olson-sean-k/wax" +# repository = "https://github.com/olson-sean-k/wax" readme = "README.md" edition = "2021" rust-version = "1.66.1" diff --git a/crates/turborepo/Cargo.toml b/crates/turborepo/Cargo.toml index f1331b13fa0ea..e2fc6b47f9f85 100644 --- a/crates/turborepo/Cargo.toml +++ b/crates/turborepo/Cargo.toml @@ -1,9 +1,12 @@ [package] name = "turbo" -version = "0.1.0" +version = "2.0.4-canary.3" edition = "2021" license = "MIT" +[package.metadata.dist] +dist = true + [features] # By default, we enable rustls-tls for reqwest via downstream transitive features. # This is for the convenience of running daily dev workflows, i.e running diff --git a/crates/update-informer/.codecov.yml b/crates/update-informer/.codecov.yml new file mode 100644 index 0000000000000..022912ee39f7f --- /dev/null +++ b/crates/update-informer/.codecov.yml @@ -0,0 +1,5 @@ +coverage: + status: + project: + default: + target: 75% diff --git a/crates/update-informer/.editorconfig b/crates/update-informer/.editorconfig new file mode 100644 index 0000000000000..eb0de1622e120 --- /dev/null +++ b/crates/update-informer/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.yml] +indent_size = 2 + +[*.json] +indent_size = 2 diff --git a/crates/update-informer/.github/FUNDING.yml b/crates/update-informer/.github/FUNDING.yml new file mode 100644 index 0000000000000..fccbfaf9dff81 --- /dev/null +++ b/crates/update-informer/.github/FUNDING.yml @@ -0,0 +1 @@ +open_collective: update-informer diff --git a/crates/update-informer/.github/PULL_REQUEST_TEMPLATE.md b/crates/update-informer/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000000..55adac7ee0d93 --- /dev/null +++ b/crates/update-informer/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,17 @@ + + + + +#### ✔ Checklist: + + + +- [ ] Commit messages have been written in [Conventional Commits](https://www.conventionalcommits.org) format; +- [ ] Tests for the changes have been added (for bug fixes / features). + + diff --git a/crates/update-informer/.github/actions-rs/grcov.yml b/crates/update-informer/.github/actions-rs/grcov.yml new file mode 100644 index 0000000000000..a27370d7b50e8 --- /dev/null +++ b/crates/update-informer/.github/actions-rs/grcov.yml @@ -0,0 +1,3 @@ +llvm: true +output-type: lcov +output-file: ./lcov.info diff --git a/crates/update-informer/.github/dependabot.yml b/crates/update-informer/.github/dependabot.yml new file mode 100644 index 0000000000000..148473c4edd49 --- /dev/null +++ b/crates/update-informer/.github/dependabot.yml @@ -0,0 +1,13 @@ +version: 2 +updates: + - package-ecosystem: "cargo" + directory: "/" + schedule: + interval: "daily" + open-pull-requests-limit: 10 + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + open-pull-requests-limit: 10 diff --git a/crates/update-informer/.github/workflows/ci.yml b/crates/update-informer/.github/workflows/ci.yml new file mode 100644 index 0000000000000..0809fa51397a2 --- /dev/null +++ b/crates/update-informer/.github/workflows/ci.yml @@ -0,0 +1,89 @@ +name: CI +on: + push: + branches: [main] + pull_request: + +env: + CARGO_TERM_COLOR: always + +jobs: + check-all: + runs-on: ubuntu-latest + strategy: + matrix: + registry: + - crates + - github + - npm + - pypi + http_client: + - ureq + - reqwest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - uses: Swatinem/rust-cache@v2.7.3 + - run: cargo check --no-default-features --features ${{ matrix.registry }},${{ matrix.http_client }} + - run: cargo fmt --all --check + - run: cargo clippy --no-default-features --features ${{ matrix.registry }},${{ matrix.http_client }} -- -D warnings + - run: cargo build --release --no-default-features --features ${{ matrix.registry }},${{ matrix.http_client }} + + test-coverage: + runs-on: ubuntu-latest + strategy: + matrix: + all_registries: ["crates,github,npm,pypi"] + http_client: + - ureq + - reqwest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@nightly + # https://github.com/dtolnay/rust-toolchain/issues/29 + - run: rustup override set nightly + - name: Set grcov version + run: echo "GRCOV_VERSION=$(cargo search --limit 1 grcov | head -n1 | cut -d '"' -f2)" >> $GITHUB_ENV + - run: cargo install --version $GRCOV_VERSION grcov + - name: Clean coverage + run: | + rm -f target/debug/deps/*.gcda + rm -f target/debug/deps/*.gcno + - uses: Swatinem/rust-cache@v2.7.3 + with: + key: ${{ env.GRCOV_VERSION }} + - run: cargo test --no-fail-fast --no-default-features --features ${{ matrix.all_registries }},${{ matrix.http_client }} + env: + CARGO_INCREMENTAL: "0" + RUSTFLAGS: | + -Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off + RUSTDOCFLAGS: | + -Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off + - uses: actions-rs/grcov@v0.1 + - uses: codecov/codecov-action@v4 + with: + file: ./lcov.info + + cargo-sort: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - uses: Swatinem/rust-cache@v2.7.3 + - run: cargo install cargo-sort + - run: cargo-sort --check + + links: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: lycheeverse/lychee-action@v1.9.3 + with: + args: . --verbose --exclude "pkg_name|your_own_registry" + fail: true + + style: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dprint/check@v2.2 diff --git a/crates/update-informer/.github/workflows/linters.yml b/crates/update-informer/.github/workflows/linters.yml new file mode 100644 index 0000000000000..fc55d20036937 --- /dev/null +++ b/crates/update-informer/.github/workflows/linters.yml @@ -0,0 +1,23 @@ +name: Linters +on: pull_request + +jobs: + misspell: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: reviewdog/action-misspell@v1 + with: + locale: "US" + + prlint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: CondeNast/conventional-pull-request-action@v0.2.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + ignoreCommits: "true" diff --git a/crates/update-informer/.github/workflows/release.yml b/crates/update-informer/.github/workflows/release.yml new file mode 100644 index 0000000000000..ff225166d26d8 --- /dev/null +++ b/crates/update-informer/.github/workflows/release.yml @@ -0,0 +1,27 @@ +name: Release +on: + push: + tags: + - "*.*.*" + +env: + CARGO_TERM_COLOR: always + +jobs: + release-crate: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Build and publish to crates.io + run: | + cargo login ${{ secrets.CRATES_TOKEN }} + cargo publish + - name: Publish release + uses: softprops/action-gh-release@v2 + with: + draft: true + body_path: CHANGELOG.md + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/crates/update-informer/.github/workflows/stale.yml b/crates/update-informer/.github/workflows/stale.yml new file mode 100644 index 0000000000000..24a66ce685a4a --- /dev/null +++ b/crates/update-informer/.github/workflows/stale.yml @@ -0,0 +1,21 @@ +name: "Close stale issues and PRs" +on: + schedule: + - cron: "30 1 * * *" + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v9 + with: + days-before-stale: 14 + days-before-close: 5 + stale-issue-label: "stale" + stale-pr-label: "stale" + exempt-issue-labels: "good first issue,help wanted,bug" + exempt-pr-labels: "dependencies,bug" + stale-issue-message: "This issue is stale because it has been open 14 days with no activity. Remove stale label or comment or this will be closed in 5 days." + stale-pr-message: "This PR is stale because it has been open 14 days with no activity. Remove stale label or comment or this will be closed in 5 days." + close-issue-message: "This issue was closed because it has been stalled for 5 days with no activity." + close-pr-message: "This PR was closed because it has been stalled for 5 days with no activity." diff --git a/crates/update-informer/.gitignore b/crates/update-informer/.gitignore new file mode 100644 index 0000000000000..96ef6c0b944e2 --- /dev/null +++ b/crates/update-informer/.gitignore @@ -0,0 +1,2 @@ +/target +Cargo.lock diff --git a/crates/update-informer/CHANGELOG.md b/crates/update-informer/CHANGELOG.md new file mode 100644 index 0000000000000..209f89eb229d8 --- /dev/null +++ b/crates/update-informer/CHANGELOG.md @@ -0,0 +1,168 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +## [v1.1.0](https://github.com/mgrachev/update-informer/releases/tag/v1.1.0) - 2023-06-27 + +### Features + +- Add `rustls-tls` and `native-tls` features ([#111](https://github.com/mgrachev/update-informer/pull/111)) +- Add `User-Agent` header for GitHub registry ([#114](https://github.com/mgrachev/update-informer/pull/114)) + +### Miscellaneous Tasks + +- Fix typo in README ([#112](https://github.com/mgrachev/update-informer/pull/112)) +- Update exempt labels for stale action ([#107](https://github.com/mgrachev/update-informer/pull/107)) + +### Update dependencies + +- Bump Swatinem/rust-cache from 2.4.0 to 2.5.0 ([#108](https://github.com/mgrachev/update-informer/pull/108)) +- Bump Swatinem/rust-cache from 2.3.0 to 2.4.0 ([#106](https://github.com/mgrachev/update-informer/pull/106)) +- Bump lycheeverse/lychee-action from 1.7.0 to 1.8.0 ([#105](https://github.com/mgrachev/update-informer/pull/105)) +- Bump Swatinem/rust-cache from 2.2.1 to 2.3.0 ([#104](https://github.com/mgrachev/update-informer/pull/104)) + +## [v1.0.0](https://github.com/mgrachev/update-informer/releases/tag/v1.0.0) - 2023-05-08 + +### Features + +- Add `npm` registry support ([#80](https://github.com/mgrachev/update-informer/pull/80)) +- Add `reqwest` crate support ([#81](https://github.com/mgrachev/update-informer/pull/81)) +- Add ability to use your own http client ([#83](https://github.com/mgrachev/update-informer/pull/83)) +- Use undefined http client if no other is selected ([#89](https://github.com/mgrachev/update-informer/pull/89)) +- Add `http_client` method for `FakeUpdateInformer` ([#87](https://github.com/mgrachev/update-informer/pull/87)) + +### CI + +- Check PR name instead of commits ([#85](https://github.com/mgrachev/update-informer/pull/85)) + +### Miscellaneous Tasks + +- Add example declarations for examples that have required features ([#90](https://github.com/mgrachev/update-informer/pull/90)) +- Add more examples ([#88](https://github.com/mgrachev/update-informer/pull/88)) +- Get rid of `orhun/git-cliff-action` ([#78](https://github.com/mgrachev/update-informer/pull/78)) + +### Refactor + +- Replace `Option<(&'a str, &'a str)>` with `HeaderMap` ([#101](https://github.com/mgrachev/update-informer/pull/101), [#102](https://github.com/mgrachev/update-informer/pull/102)) +- Change trait name `SendRequest` -> `HttpClient` ([#92](https://github.com/mgrachev/update-informer/pull/92)) +- Remove deprecated `FakeUpdateInformer::new` function ([#86](https://github.com/mgrachev/update-informer/pull/86)) +- Move current_version to package ([#82](https://github.com/mgrachev/update-informer/pull/82)) +- Remove deprecated function ([#79](https://github.com/mgrachev/update-informer/pull/79)) + +### Update dependencies + +- Update directories requirement from 4.0 to 5.0 ([#98](https://github.com/mgrachev/update-informer/pull/98)) +- Update mockito requirement from 0.31 to 0.32 ([#91](https://github.com/mgrachev/update-informer/pull/91)) +- Bump actions/stale from 7 to 8 ([#99](https://github.com/mgrachev/update-informer/pull/99)) +- Bump lycheeverse/lychee-action from 1.6.1 to 1.7.0 ([#100](https://github.com/mgrachev/update-informer/pull/100)) +- Bump Swatinem/rust-cache from 2.2.0 to 2.2.1 ([#95](https://github.com/mgrachev/update-informer/pull/95)) +- Bump lycheeverse/lychee-action from 1.5.4 to 1.6.1 ([#94](https://github.com/mgrachev/update-informer/pull/94)) +- Bump dprint/check from 2.1 to 2.2 ([#84](https://github.com/mgrachev/update-informer/pull/84)) +- Bump actions/stale from 6 to 7 ([#76](https://github.com/mgrachev/update-informer/pull/76)) + +## [v0.6.0](https://github.com/mgrachev/update-informer/releases/tag/v0.6.0) - 2022-12-08 + +### 🚀 Added + +- Support current version ([#72](https://github.com/mgrachev/update-informer/pull/72)) +- Add cargo-sort ([#51](https://github.com/mgrachev/update-informer/pull/51)) +- Add list of users +- Add `dprint` to check formatting ([#42](https://github.com/mgrachev/update-informer/pull/42)) +- Add action to check links + ci optimization ([#38](https://github.com/mgrachev/update-informer/pull/38)) + +### ⚙️ Changed + +- Bump wagoid/commitlint-github-action from 5.2.2 to 5.3.0 ([#71](https://github.com/mgrachev/update-informer/pull/71)) +- Bump lycheeverse/lychee-action from 1.5.3 to 1.5.4 ([#69](https://github.com/mgrachev/update-informer/pull/69)) +- Bump Swatinem/rust-cache from 2.1.0 to 2.2.0 ([#70](https://github.com/mgrachev/update-informer/pull/70)) +- Bump lycheeverse/lychee-action from 1.5.2 to 1.5.3 ([#68](https://github.com/mgrachev/update-informer/pull/68)) +- Bump lycheeverse/lychee-action from 1.5.1 to 1.5.2 ([#64](https://github.com/mgrachev/update-informer/pull/64)) +- Bump Swatinem/rust-cache from 2.0.1 to 2.1.0 ([#67](https://github.com/mgrachev/update-informer/pull/67)) +- Fix clippy warnings ([#66](https://github.com/mgrachev/update-informer/pull/66)) +- Bump wagoid/commitlint-github-action from 5.2.0 to 5.2.2 ([#63](https://github.com/mgrachev/update-informer/pull/63)) +- Bump Swatinem/rust-cache from 2.0.0 to 2.0.1 ([#62](https://github.com/mgrachev/update-informer/pull/62)) +- Bump wagoid/commitlint-github-action from 5.1.2 to 5.2.0 ([#60](https://github.com/mgrachev/update-informer/pull/60)) +- Replace `actions-rs/toolchain` with `dtolnay/rust-toolchain` ([#61](https://github.com/mgrachev/update-informer/pull/61)) +- Bump wagoid/commitlint-github-action from 5.0.2 to 5.1.2 ([#59](https://github.com/mgrachev/update-informer/pull/59)) +- Bump actions/stale from 5 to 6 ([#58](https://github.com/mgrachev/update-informer/pull/58)) +- Generate a changelog and update release process ([#57](https://github.com/mgrachev/update-informer/pull/57)) +- Update readme ([#56](https://github.com/mgrachev/update-informer/pull/56)) +- Bump lycheeverse/lychee-action from 1.5.0 to 1.5.1 ([#55](https://github.com/mgrachev/update-informer/pull/55)) +- Bump Swatinem/rust-cache from 1.4.0 to 2.0.0 ([#53](https://github.com/mgrachev/update-informer/pull/53)) +- Bump dprint/check from 2.0 to 2.1 ([#54](https://github.com/mgrachev/update-informer/pull/54)) +- Bump wagoid/commitlint-github-action from 5.0.1 to 5.0.2 ([#52](https://github.com/mgrachev/update-informer/pull/52)) +- Bump wagoid/commitlint-github-action from 4.1.11 to 5.0.1 ([#50](https://github.com/mgrachev/update-informer/pull/50)) +- Bump lycheeverse/lychee-action from 1.4.1 to 1.5.0 ([#48](https://github.com/mgrachev/update-informer/pull/48)) +- Bump actions/stale from 4 to 5 ([#45](https://github.com/mgrachev/update-informer/pull/45)) +- Bump Swatinem/rust-cache from 1.3.0 to 1.4.0 ([#44](https://github.com/mgrachev/update-informer/pull/44)) +- Bump wagoid/commitlint-github-action from 4.1.10 to 4.1.11 ([#43](https://github.com/mgrachev/update-informer/pull/43)) +- Bump codecov/codecov-action from 2.1.0 to 3 ([#41](https://github.com/mgrachev/update-informer/pull/41)) +- Bump actions-rs/toolchain from 1.0.6 to 1.0.7 ([#39](https://github.com/mgrachev/update-informer/pull/39)) +- Bump wagoid/commitlint-github-action from 4.1.9 to 4.1.10 ([#40](https://github.com/mgrachev/update-informer/pull/40)) + +## [v0.5.0](https://github.com/mgrachev/update-informer/releases/tag/v0.5.0) - 2022-03-24 + +### 🚀 Added + +- Add ability to implement your own registry ([#37](https://github.com/mgrachev/update-informer/pull/37)) +- Add `stale` action ([#33](https://github.com/mgrachev/update-informer/pull/33)) +- Add dependabot ([#28](https://github.com/mgrachev/update-informer/pull/28)) + +### ⚙️ Changed + +- Bump actions/cache from 2 to 3 ([#36](https://github.com/mgrachev/update-informer/pull/36)) +- Update `stale` action schedule +- Update mockito requirement from 0.30.0 to 0.31.0 ([#32](https://github.com/mgrachev/update-informer/pull/32)) +- Bump actions/checkout from 1 to 3 ([#31](https://github.com/mgrachev/update-informer/pull/31)) +- Bump wagoid/commitlint-github-action from 2 to 4.1.9 ([#29](https://github.com/mgrachev/update-informer/pull/29)) +- Bump codecov/codecov-action from 1 to 2.1.0 ([#30](https://github.com/mgrachev/update-informer/pull/30)) +- Update dependabot config +- Update `stale` schedule +- Update `stale` schedule ([#35](https://github.com/mgrachev/update-informer/pull/35)) +- Update `stale` action schedule ([#34](https://github.com/mgrachev/update-informer/pull/34)) + +## [v0.4.0](https://github.com/mgrachev/update-informer/releases/tag/v0.4.0) - 2022-02-21 + +### 🚀 Added + +- Add ability to not use cache files ([#27](https://github.com/mgrachev/update-informer/pull/27)) + +## [v0.3.0](https://github.com/mgrachev/update-informer/releases/tag/v0.3.0) - 2022-02-19 + +### 🚀 Added + +- Add cargo features ([#26](https://github.com/mgrachev/update-informer/pull/26)) +- Add configurable request timeout and interval ([#24](https://github.com/mgrachev/update-informer/pull/24)) +- Add open collective +- Add more examples ([#23](https://github.com/mgrachev/update-informer/pull/23)) +- Add logo ([#19](https://github.com/mgrachev/update-informer/pull/19)) + +### ⚙️ Changed + +- Better cache directory naming scheme ([#21](https://github.com/mgrachev/update-informer/pull/21)) +- PyPI support ([#16](https://github.com/mgrachev/update-informer/pull/16)) +- Update readme +- Set up code coverage ([#15](https://github.com/mgrachev/update-informer/pull/15)) + +## [v0.2.0](https://github.com/mgrachev/update-informer/releases/tag/v0.2.0) - 2022-01-05 + +### 🚀 Added + +- Add `UpdateInformer` and `FakeUpdateInformer` structs for convenient use ([#14](https://github.com/mgrachev/update-informer/pull/14)) + +## [v0.1.0](https://github.com/mgrachev/update-informer/releases/tag/v0.1.0) - 2021-12-30 + +### 🚀 Added + +- Add `stub_check_version` function and update docs ([#13](https://github.com/mgrachev/update-informer/pull/13)) +- Add documentation and update examples ([#12](https://github.com/mgrachev/update-informer/pull/12)) +- Add tests for registries: crates.io and github ([#9](https://github.com/mgrachev/update-informer/pull/9)) +- Add main files + +### ⚙️ Changed + +- Save latest version to file and add interval check ([#11](https://github.com/mgrachev/update-informer/pull/11)) +- Set up ci/cd ([#10](https://github.com/mgrachev/update-informer/pull/10)) +- Check updates on github ([#8](https://github.com/mgrachev/update-informer/pull/8)) +- Check version on crates.io ([#1](https://github.com/mgrachev/update-informer/pull/1)) +- Initial commit diff --git a/crates/update-informer/Cargo.toml b/crates/update-informer/Cargo.toml new file mode 100644 index 0000000000000..614d67d0c3f3f --- /dev/null +++ b/crates/update-informer/Cargo.toml @@ -0,0 +1,64 @@ +[package] +name = "update-informer" +version = "1.1.0" # managed by release.sh +authors = ["Mikhail Grachev "] +categories = ["command-line-interface"] +documentation = "https://docs.rs/update-informer" +edition = "2021" +homepage = "https://github.com/mgrachev/update-informer" +include = ["/src", "README.md"] +keywords = ["cli", "update", "informer", "notifier", "github"] +license = "MIT" +readme = "README.md" +description = "Update informer for CLI applications" + +[features] +default = ["crates", "ureq", "rustls-tls"] +crates = [] +github = [] +npm = [] +pypi = [] +ureq = ["dep:ureq"] +reqwest = ["dep:reqwest"] +rustls-tls = ["ureq?/tls", "reqwest?/rustls-tls"] +native-tls = ["ureq?/native-tls", "reqwest?/native-tls"] + +[dependencies] +directories = "5.0" +semver = "1.0" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" + + [dependencies.reqwest] + default-features = false + features = ["blocking", "json"] + optional = true + version = "0.12.4" + + [dependencies.ureq] + default-features = false + features = ["gzip", "json"] + optional = true + version = "2.4" + +[dev-dependencies] +# Used in the examples of documentation +colored = "2.0" +isahc = { version = "1.7", features = ["json"] } +mockito = "0.32" +once_cell = "1.10" + +[[example]] +name = "github" +path = "examples/github.rs" +required-features = ["github"] + +[[example]] +name = "npm" +path = "examples/npm.rs" +required-features = ["npm"] + +[[example]] +name = "pypi" +path = "examples/pypi.rs" +required-features = ["pypi"] diff --git a/crates/update-informer/LICENSE b/crates/update-informer/LICENSE new file mode 100644 index 0000000000000..914134dc3ce20 --- /dev/null +++ b/crates/update-informer/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Mikhail Grachev + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/crates/update-informer/README.md b/crates/update-informer/README.md new file mode 100644 index 0000000000000..b6fe3f3fa1466 --- /dev/null +++ b/crates/update-informer/README.md @@ -0,0 +1,268 @@ +# Update-informer + +[ci-badge]: https://github.com/mgrachev/update-informer/workflows/CI/badge.svg +[ci-url]: https://github.com/mgrachev/update-informer/actions +[crates-badge]: https://img.shields.io/crates/v/update-informer +[crates-url]: https://crates.io/crates/update-informer +[docs-badge]: https://img.shields.io/docsrs/update-informer +[docs-url]: https://docs.rs/update-informer +[codecov-badge]: https://codecov.io/gh/mgrachev/update-informer/branch/main/graph/badge.svg?token=A4XD1DGFGJ +[codecov-url]: https://codecov.io/gh/mgrachev/update-informer +[downloads-badge]: https://img.shields.io/crates/d/update-informer +[directories]: https://github.com/dirs-dev/directories-rs +[ureq]: https://github.com/algesten/ureq +[semver]: https://github.com/dtolnay/semver +[serde]: https://github.com/serde-rs/serde +[GitHub CLI application]: https://github.com/cli/cli/blob/trunk/internal/update/update.go +[npm]: https://github.com/npm/cli/blob/latest/lib/utils/update-notifier.js +[JavaScript library]: https://github.com/yeoman/update-notifier +[MIT]: https://choosealicense.com/licenses/mit +[git-cliff]: https://github.com/orhun/git-cliff +[dotenv-linter]: https://github.com/dotenv-linter/dotenv-linter +[update-informer]: https://evrone.com/update-informer?utm_source=github&utm_campaign=update-informer +[Evrone]: https://evrone.com/?utm_source=github&utm_campaign=update-informer +[turbo]: https://github.com/vercel/turbo +[fselect]: https://github.com/jhspetersson/fselect +[reqwest]: https://github.com/seanmonstar/reqwest +[isahc]: https://github.com/sagebind/isahc +[here]: https://github.com/mgrachev/update-informer/tree/main/examples + +[![CI][ci-badge]][ci-url] +[![Version][crates-badge]][crates-url] +[![Docs.rs][docs-badge]][docs-url] +[![Codecov][codecov-badge]][codecov-url] +[![Downloads][downloads-badge]][crates-url] + +update-informer + +Update informer for CLI applications written in Rust 🦀 + +It checks for a new version on Crates.io, GitHub, Npm and PyPI 🚀 + +## Benefits + +- Support of **Crates.io**, **GitHub**, **Npm** and **PyPI**. +- Configurable [check frequency](#interval) and [request timeout](#request-timeout). +- [Caching](#caching) the results of checking updates. +- Ability to implement your own [registry](#implementing-your-own-registry) or [http client](#using-your-own-http-client). +- **Minimum dependencies** - only [directories], [semver], [serde] and an HTTP client ([ureq] or [reqwest]). + +## Idea + +The idea is actually not new. This feature has long been present in the [GitHub CLI application] and [npm].
+There is also a popular [JavaScript library]. + +## Usage + +Add `update-informer` to `Cargo.toml`: + +```toml +[dependencies] +update-informer = "1.1" +``` + +By default, `update-informer` can only check on Crates.io and uses [ureq] as a default HTTP client. +To enable support for other registries or change the HTTP client, use `features`: + +```toml +[dependencies] +update-informer = { version = "1.1", default-features = false, features = ["github", "reqwest", "native-tls"] } +``` + +Available features: + +| Name | Type | Default? | +| ---------- | ------------------- | -------- | +| crates | Registry | Yes | +| github | Registry | No | +| npm | Registry | No | +| pypi | Registry | No | +| [ureq] | HTTP client | Yes | +| [reqwest] | HTTP client | No | +| rustls-tls | HTTP client feature | Yes | +| native-tls | HTTP client feature | No | + +## Checking for a new version + +To check for a new version, use the `UpdateInformer::check_version` function.
+This function takes the project name and current version as well as registry: + +```rust +use update_informer::{registry, Check}; + +let name = env!("CARGO_PKG_NAME"); +let version = env!("CARGO_PKG_VERSION"); +let informer = update_informer::new(registry::Crates, name, version); + +if let Some(version) = informer.check_version().ok().flatten() { + println!("New version is available: {}", version); +} +``` + +More examples you can find [here]. + +## Interval + +Note that the first check will start only after the interval has expired. +By default, the interval is **24 hours**, but you can change it: + +```rust +use std::time::Duration; +use update_informer::{registry, Check}; + +const EVERY_HOUR: Duration = Duration::from_secs(60 * 60); + +let informer = update_informer::new(registry::Crates, "crate_name", "0.1.0").interval(EVERY_HOUR); +informer.check_version(); // The check will start only after an hour +``` + +## Caching + +By default, `update-informer` creates a file in the cache directory to avoid spam requests to the registry API. + +In order not to cache requests, use a zero interval: + +```rust +use std::time::Duration; +use update_informer::{registry, Check}; + +let informer = update_informer::new(registry::Crates, "crate_name", "0.1.0").interval(Duration::ZERO); +informer.check_version(); +``` + +## Request timeout + +You can also change the request timeout. By default, it is **5 seconds**: + +```rust +use std::time::Duration; +use update_informer::{registry, Check}; + +const THIRTY_SECONDS: Duration = Duration::from_secs(30); + +let informer = update_informer::new(registry::Crates, "crate_name", "0.1.0").timeout(THIRTY_SECONDS); +informer.check_version(); +``` + +## Implementing your own registry + +You can implement your own registry to check updates. For example: + +```rust +use update_informer::{http_client::{GenericHttpClient, HttpClient}, registry, Check, Package, Registry, Result}; + +#[derive(serde::Deserialize)] +struct Response { + version: String, +} + +struct YourOwnRegistry; +impl Registry for YourOwnRegistry { + const NAME: &'static str = "your_own_registry"; + + fn get_latest_version(http_client: GenericHttpClient, pkg: &Package) -> Result> { + let url = "https://turbo.build/api/binaries/version"; + let resp = http_client.get::(&url)?; + + Ok(Some(resp.version)) + } +} + +let informer = update_informer::new(YourOwnRegistry, "turbo", "0.1.0"); +informer.check_version(); +``` + +## Using your own HTTP client + +You can use your own HTTP client to check updates. For example, [isahc]: + +```rust +use isahc::ReadResponseExt; +use std::time::Duration; +use serde::de::DeserializeOwned; +use update_informer::{http_client::{HeaderMap, HttpClient}, registry, Check}; + +struct YourOwnHttpClient; + +impl HttpClient for YourOwnHttpClient { + fn get( + url: &str, + _timeout: Duration, + _headers: HeaderMap, + ) -> update_informer::Result { + let json = isahc::get(url)?.json()?; + Ok(json) + } +} + +let informer = update_informer::new(registry::Crates, "crate_name", "0.1.0").http_client(YourOwnHttpClient); +informer.check_version(); +``` + +## Tests + +In order not to check for updates in tests, you can use the `FakeUpdateInformer::check_version` function, which returns the desired version: + +```rust +use update_informer::{registry, Check}; + +let name = "crate_name"; +let version = "0.1.0"; + +#[cfg(not(test))] +let informer = update_informer::new(registry::Crates, name, version); + +#[cfg(test)] +let informer = update_informer::fake(registry::Crates, name, version, "1.0.0"); + +if let Some(version) = informer.check_version().ok().flatten() { + println!("New version is available: {}", version); +} +``` + +## Integration tests + +To use the `FakeUpdateInformer::check_version` function in integration tests, you must first add the feature flag to `Cargo.toml`: + +```toml +[features] +stub_check_version = [] +``` + +Then use this feature flag in your code and integration tests: + +```rust +use update_informer::{registry, Check}; + +let name = "crate_name"; +let version = "0.1.0"; + +#[cfg(not(feature = "stub_check_version"))] +let informer = update_informer::new(registry::Crates, name, version); + +#[cfg(feature = "stub_check_version")] +let informer = update_informer::fake(registry::Crates, name, version, "1.0.0"); + +informer.check_version(); +``` + +## Users + +- [git-cliff] +- [dotenv-linter] +- [turbo] +- [fselect] + +## MSRV + +Minimum Supported Rust Version: 1.56.1 + +## Sponsors + +[update-informer] is created & supported by [Evrone] + +## License + +[MIT] diff --git a/crates/update-informer/cliff.toml b/crates/update-informer/cliff.toml new file mode 100644 index 0000000000000..11a38b8113404 --- /dev/null +++ b/crates/update-informer/cliff.toml @@ -0,0 +1,72 @@ +# configuration file for git-cliff (0.8.1) + +[changelog] +# changelog header +header = """ +# Changelog + +All notable changes to this project will be documented in this file.\n +""" +# template for the changelog body +# https://tera.netlify.app/docs/#introduction +body = """ +{% if version %}\ + ## [{{ version }}](https://github.com/mgrachev/update-informer/releases/tag/{{ version }}) - {{ timestamp | date(format="%Y-%m-%d") }} +{% else %}\ + ## [Unreleased] +{% endif %}\ +{% for group, commits in commits | group_by(attribute="group") %} + ### {{ group | replace(from="1", to="") | replace(from="2", to="") }} + {% for commit in commits %} + - {{ commit.message | upper_first }}\ + {% endfor %} +{% endfor %}\n +""" + +# remove the leading and trailing whitespace from the template +trim = true +# changelog footer +footer = "" + +[git] +# parse the commits based on https://www.conventionalcommits.org +conventional_commits = true +# filter out the commits that are not conventional +filter_unconventional = true +# process each line of a commit as an individual commit +split_commits = false +# regex for preprocessing the commit messages +commit_preprocessors = [ + { pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](https://github.com/mgrachev/update-informer/pull/${2}))" }, +] +# regex for parsing and grouping commits +commit_parsers = [ + { message = "^feat", group = "1Features" }, + { message = "^fix\\(ci\\):", group = "CI" }, + { message = "^fix", group = "2Fixes" }, + { message = "^doc", group = "Documentation" }, + { message = "^perf", group = "Performance" }, + { message = "^refactor", group = "Refactor" }, + { message = "^style", group = "Styling" }, + { message = "^test", group = "Testing" }, + { message = "^chore\\(release\\)", skip = true }, + { message = "^chore\\(deps\\):", group = "Update dependencies" }, + { message = "^chore\\(ci\\):", group = "CI" }, + { message = "^chore: bump", group = "Update dependencies" }, + { message = "^chore: update dependency", group = "Update dependencies" }, + { message = "^chore", group = "Miscellaneous Tasks" }, + { message = "^ci:", group = "CI" }, + { body = ".*security", group = "Security" }, +] +# filter out the commits that are not matched by commit parsers +filter_commits = true +# glob pattern for matching git tags +tag_pattern = "v[0-9]*" +# regex for skipping tags +skip_tags = "v0.1.0-beta.1" +# regex for ignoring tags +ignore_tags = "" +# sort the tags chronologically +date_order = true +# sort the commits inside sections by oldest/newest order +sort_commits = "newest" diff --git a/crates/update-informer/dprint.json b/crates/update-informer/dprint.json new file mode 100644 index 0000000000000..c07c34bd7467b --- /dev/null +++ b/crates/update-informer/dprint.json @@ -0,0 +1,16 @@ +{ + "incremental": true, + "json": { + }, + "markdown": { + }, + "toml": { + }, + "includes": ["**/*.{json,md,toml}"], + "excludes": ["target/"], + "plugins": [ + "https://plugins.dprint.dev/json-0.15.0.wasm", + "https://plugins.dprint.dev/markdown-0.13.0.wasm", + "https://plugins.dprint.dev/toml-0.5.4.wasm" + ] +} diff --git a/crates/update-informer/examples/colored.rs b/crates/update-informer/examples/colored.rs new file mode 100644 index 0000000000000..3cc63825581c2 --- /dev/null +++ b/crates/update-informer/examples/colored.rs @@ -0,0 +1,22 @@ +use colored::*; +use update_informer::{registry, Check}; + +fn main() { + let pkg_name = "update-informer"; + let current_version = "0.1.0"; + + let informer = update_informer::new(registry::Crates, pkg_name, current_version); + if let Some(version) = informer.check_version().ok().flatten() { + let msg = format!( + "A new release of {pkg_name} is available: v{current_version} -> {new_version}", + pkg_name = pkg_name.italic().cyan(), + current_version = current_version, + new_version = version.to_string().green() + ); + + let release_url = + format!("https://github.com/{pkg_name}/{pkg_name}/releases/tag/{version}").yellow(); + + println!("\n{msg}\n{url}", msg = msg, url = release_url); + } +} diff --git a/crates/update-informer/examples/crates.rs b/crates/update-informer/examples/crates.rs new file mode 100644 index 0000000000000..e487c62ce0544 --- /dev/null +++ b/crates/update-informer/examples/crates.rs @@ -0,0 +1,15 @@ +use std::time::Duration; + +use update_informer::{registry, Check}; + +fn main() { + let pkg_name = "update-informer"; + let current_version = "0.1.0"; + + let informer = + update_informer::new(registry::Crates, pkg_name, current_version).interval(Duration::ZERO); + + if let Ok(Some(new_version)) = informer.check_version() { + println!("A new release of {pkg_name} is available: v{current_version} -> {new_version}"); + } +} diff --git a/crates/update-informer/examples/fake.rs b/crates/update-informer/examples/fake.rs new file mode 100644 index 0000000000000..ab4baa0ff3cb9 --- /dev/null +++ b/crates/update-informer/examples/fake.rs @@ -0,0 +1,31 @@ +use std::time::Duration; + +use serde::de::DeserializeOwned; +use update_informer::{ + http_client::{HeaderMap, HttpClient}, + registry, Check, +}; + +struct YourOwnHttpClient; + +impl HttpClient for YourOwnHttpClient { + fn get( + _url: &str, + _timeout: Duration, + _headers: HeaderMap, + ) -> update_informer::Result { + todo!() + } +} + +fn main() { + let pkg_name = "update-informer"; + let current_version = "0.1.0"; + + let informer = update_informer::fake(registry::Crates, pkg_name, current_version, "0.2.0") + .http_client(YourOwnHttpClient); + + if let Ok(Some(new_version)) = informer.check_version() { + println!("A new release of {pkg_name} is available: v{current_version} -> {new_version}"); + } +} diff --git a/crates/update-informer/examples/github.rs b/crates/update-informer/examples/github.rs new file mode 100644 index 0000000000000..f821df2d43dcf --- /dev/null +++ b/crates/update-informer/examples/github.rs @@ -0,0 +1,15 @@ +use std::time::Duration; + +use update_informer::{registry, Check}; + +fn main() { + let pkg_name = "dotenv-linter/dotenv-linter"; + let current_version = "3.1.0"; + + let informer = + update_informer::new(registry::GitHub, pkg_name, current_version).interval(Duration::ZERO); + + if let Ok(Some(new_version)) = informer.check_version() { + println!("A new release of {pkg_name} is available: v{current_version} -> {new_version}"); + } +} diff --git a/crates/update-informer/examples/http_client.rs b/crates/update-informer/examples/http_client.rs new file mode 100644 index 0000000000000..daead83a0d633 --- /dev/null +++ b/crates/update-informer/examples/http_client.rs @@ -0,0 +1,34 @@ +use std::time::Duration; + +use isahc::ReadResponseExt; +use serde::de::DeserializeOwned; +use update_informer::{ + http_client::{HeaderMap, HttpClient}, + registry, Check, +}; + +struct YourOwnHttpClient; + +impl HttpClient for YourOwnHttpClient { + fn get( + url: &str, + _timeout: Duration, + _headers: HeaderMap, + ) -> update_informer::Result { + let json = isahc::get(url)?.json()?; + Ok(json) + } +} + +fn main() { + let pkg_name = "update-informer"; + let current_version = "0.1.0"; + + let informer = update_informer::new(registry::Crates, pkg_name, current_version) + .interval(Duration::ZERO) + .http_client(YourOwnHttpClient); + + if let Ok(Some(new_version)) = informer.check_version() { + println!("A new release of {pkg_name} is available: v{current_version} -> {new_version}"); + } +} diff --git a/crates/update-informer/examples/npm.rs b/crates/update-informer/examples/npm.rs new file mode 100644 index 0000000000000..006c214928ce2 --- /dev/null +++ b/crates/update-informer/examples/npm.rs @@ -0,0 +1,15 @@ +use std::time::Duration; + +use update_informer::{registry, Check}; + +fn main() { + let pkg_name = "turbo"; + let current_version = "1.6.2"; + + let informer = + update_informer::new(registry::Npm, pkg_name, current_version).interval(Duration::ZERO); + + if let Ok(Some(new_version)) = informer.check_version() { + println!("A new release of {pkg_name} is available: v{current_version} -> {new_version}"); + } +} diff --git a/crates/update-informer/examples/pypi.rs b/crates/update-informer/examples/pypi.rs new file mode 100644 index 0000000000000..31d3ca0e48762 --- /dev/null +++ b/crates/update-informer/examples/pypi.rs @@ -0,0 +1,15 @@ +use std::time::Duration; + +use update_informer::{registry, Check}; + +fn main() { + let pkg_name = "filprofiler"; + let current_version = "2022.1.0"; + + let informer = + update_informer::new(registry::PyPI, pkg_name, current_version).interval(Duration::ZERO); + + if let Ok(Some(new_version)) = informer.check_version() { + println!("A new release of {pkg_name} is available: v{current_version} -> {new_version}"); + } +} diff --git a/crates/update-informer/examples/registry.rs b/crates/update-informer/examples/registry.rs new file mode 100644 index 0000000000000..fc4d8e2afc0aa --- /dev/null +++ b/crates/update-informer/examples/registry.rs @@ -0,0 +1,38 @@ +use std::time::Duration; + +use update_informer::{ + http_client::{GenericHttpClient, HttpClient}, + Check, Package, Registry, Result, +}; + +#[derive(serde::Deserialize)] +struct Response { + version: String, +} + +struct YourOwnRegistry; +impl Registry for YourOwnRegistry { + const NAME: &'static str = "your_own_registry"; + + fn get_latest_version( + http_client: GenericHttpClient, + _pkg: &Package, + ) -> Result> { + let url = "https://turbo.build/api/binaries/version"; + let resp = http_client.get::(&url)?; + + Ok(Some(resp.version)) + } +} + +fn main() { + let pkg_name = "turbo"; + let current_version = "1.6.2"; + + let informer = + update_informer::new(YourOwnRegistry, pkg_name, current_version).interval(Duration::ZERO); + + if let Ok(Some(new_version)) = informer.check_version() { + println!("A new release of {pkg_name} is available: v{current_version} -> {new_version}"); + } +} diff --git a/crates/update-informer/logo.svg b/crates/update-informer/logo.svg new file mode 100644 index 0000000000000..6c3793b939302 --- /dev/null +++ b/crates/update-informer/logo.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/crates/update-informer/release.sh b/crates/update-informer/release.sh new file mode 100755 index 0000000000000..547092594ea50 --- /dev/null +++ b/crates/update-informer/release.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +if [ -z "$1" ]; then + echo "Please provide a tag..." + echo "Usage: ./release.sh v0.1.0" + exit +fi + +branch_name=$(echo "${1}" | sed 's/\.//g') +git checkout -b "release_${branch_name}" + +# Update the version +msg="# managed by release.sh" +sed -i '' "s/^version = .* $msg$/version = \"${1#v}\" $msg/" Cargo.toml + +# Update the changelog +git-cliff --tag "$1" --unreleased --prepend CHANGELOG.md + +# Commit changes +git add CHANGELOG.md Cargo.toml +git commit -m "chore(release): $1" + +echo "Done." +echo "Now push the commit to GitHub." +echo "And after review, create a tag and push it to GitHub." diff --git a/crates/update-informer/rust-toolchain.toml b/crates/update-informer/rust-toolchain.toml new file mode 100644 index 0000000000000..73cb934de4706 --- /dev/null +++ b/crates/update-informer/rust-toolchain.toml @@ -0,0 +1,3 @@ +[toolchain] +channel = "stable" +components = ["rustfmt", "clippy"] diff --git a/crates/update-informer/src/http_client/headers.rs b/crates/update-informer/src/http_client/headers.rs new file mode 100644 index 0000000000000..9ca70f532bf75 --- /dev/null +++ b/crates/update-informer/src/http_client/headers.rs @@ -0,0 +1,26 @@ +use std::collections::{hash_map::IntoIter, HashMap}; + +#[derive(Default)] +/// A set of HTTP headers +pub struct HeaderMap<'a> { + inner: HashMap<&'a str, &'a str>, +} + +impl<'a> HeaderMap<'a> { + pub(crate) fn new() -> Self { + Default::default() + } + + pub(crate) fn add(&mut self, key: &'a str, value: &'a str) { + self.inner.insert(key, value); + } +} + +impl<'a> IntoIterator for HeaderMap<'a> { + type Item = (&'a str, &'a str); + type IntoIter = IntoIter<&'a str, &'a str>; + + fn into_iter(self) -> Self::IntoIter { + self.inner.into_iter() + } +} diff --git a/crates/update-informer/src/http_client/mod.rs b/crates/update-informer/src/http_client/mod.rs new file mode 100644 index 0000000000000..82a251138239a --- /dev/null +++ b/crates/update-informer/src/http_client/mod.rs @@ -0,0 +1,59 @@ +use std::time::Duration; + +use serde::de::DeserializeOwned; + +use crate::Result; + +#[cfg(feature = "ureq")] +mod ureq; +#[cfg(all(feature = "ureq", not(feature = "reqwest")))] +pub use crate::http_client::ureq::UreqHttpClient; +#[cfg(all(feature = "ureq", not(feature = "reqwest")))] +pub type DefaultHttpClient = UreqHttpClient; + +#[cfg(feature = "reqwest")] +mod reqwest; +#[cfg(all(feature = "reqwest", not(feature = "ureq")))] +pub use crate::http_client::reqwest::ReqwestHttpClient; +#[cfg(all(feature = "reqwest", not(feature = "ureq")))] +pub type DefaultHttpClient = ReqwestHttpClient; + +#[cfg(all(not(feature = "ureq"), not(feature = "reqwest")))] +mod undefined; +#[cfg(all(not(feature = "ureq"), not(feature = "reqwest")))] +pub use crate::http_client::undefined::UndefinedHttpClient; +#[cfg(all(not(feature = "ureq"), not(feature = "reqwest")))] +pub type DefaultHttpClient = UndefinedHttpClient; + +mod headers; +pub use headers::HeaderMap; + +/// An HTTP client to send requests to the registry. +pub struct GenericHttpClient<'a, T: HttpClient> { + _inner: T, + timeout: Duration, + headers: HeaderMap<'a>, +} + +pub(crate) fn new<'a, T: HttpClient>(client: T, timeout: Duration) -> GenericHttpClient<'a, T> { + GenericHttpClient { + _inner: client, + timeout, + headers: HeaderMap::new(), + } +} + +impl<'a, T: HttpClient> GenericHttpClient<'a, T> { + pub fn add_header(mut self, key: &'a str, value: &'a str) -> Self { + self.headers.add(key, value); + self + } + + pub fn get(self, url: &str) -> Result { + T::get(url, self.timeout, self.headers) + } +} + +pub trait HttpClient { + fn get(url: &str, timeout: Duration, headers: HeaderMap) -> Result; +} diff --git a/crates/update-informer/src/http_client/reqwest.rs b/crates/update-informer/src/http_client/reqwest.rs new file mode 100644 index 0000000000000..2c6c0086fab5f --- /dev/null +++ b/crates/update-informer/src/http_client/reqwest.rs @@ -0,0 +1,27 @@ +use std::time::Duration; + +use serde::de::DeserializeOwned; + +use crate::{ + http_client::{HeaderMap, HttpClient}, + Result, +}; + +pub struct ReqwestHttpClient; + +impl HttpClient for ReqwestHttpClient { + fn get(url: &str, timeout: Duration, headers: HeaderMap) -> Result { + let mut req = reqwest::blocking::Client::builder() + .timeout(timeout) + .build()? + .get(url); + + for (key, value) in headers { + req = req.header(key, value); + } + + let json = req.send()?.json()?; + + Ok(json) + } +} diff --git a/crates/update-informer/src/http_client/undefined.rs b/crates/update-informer/src/http_client/undefined.rs new file mode 100644 index 0000000000000..5a3501c8a3b3f --- /dev/null +++ b/crates/update-informer/src/http_client/undefined.rs @@ -0,0 +1,16 @@ +use std::time::Duration; + +use serde::de::DeserializeOwned; + +use crate::{ + http_client::{HeaderMap, HttpClient}, + Result, +}; + +pub struct UndefinedHttpClient; + +impl HttpClient for UndefinedHttpClient { + fn get(_url: &str, _timeout: Duration, _headers: HeaderMap) -> Result { + panic!("choose HTTP client (ureq or reqwest) or implement your own"); + } +} diff --git a/crates/update-informer/src/http_client/ureq.rs b/crates/update-informer/src/http_client/ureq.rs new file mode 100644 index 0000000000000..c4ca7957d46eb --- /dev/null +++ b/crates/update-informer/src/http_client/ureq.rs @@ -0,0 +1,24 @@ +use std::time::Duration; + +use serde::de::DeserializeOwned; + +use crate::{ + http_client::{HeaderMap, HttpClient}, + Result, +}; + +pub struct UreqHttpClient; + +impl HttpClient for UreqHttpClient { + fn get(url: &str, timeout: Duration, headers: HeaderMap) -> Result { + let mut req = ureq::agent().get(url).timeout(timeout); + + for (header, value) in headers { + req = req.set(header, value); + } + + let json = req.call()?.into_json()?; + + Ok(json) + } +} diff --git a/crates/update-informer/src/lib.rs b/crates/update-informer/src/lib.rs new file mode 100644 index 0000000000000..5c91678eb36e6 --- /dev/null +++ b/crates/update-informer/src/lib.rs @@ -0,0 +1,456 @@ +#![doc = include_str!("../README.md")] + +use std::time::Duration; + +pub use package::Package; +pub use registry::Registry; +pub use version::Version; + +use crate::{ + http_client::{DefaultHttpClient, HttpClient}, + version_file::VersionFile, +}; + +mod package; +mod version; +mod version_file; + +#[cfg(test)] +mod test_helper; + +/// A registry service that stores information about releases. +pub mod registry; + +/// An HTTP client to send requests to the registry. +pub mod http_client; + +type Error = Box; +pub type Result = std::result::Result; + +pub trait Check { + /// Checks for a new version in the registry. + fn check_version(self) -> Result> + where + Self: Sized, + { + Ok(None) + } +} + +/// Checks for a new version on Crates.io, GitHub, Npm and PyPi. +pub struct UpdateInformer< + R: Registry, + N: AsRef, + V: AsRef, + H: HttpClient = DefaultHttpClient, +> { + _registry: R, + name: N, + version: V, + http_client: H, + interval: Duration, + timeout: Duration, +} + +/// Constructs a new `UpdateInformer`. +/// +/// # Arguments +/// +/// * `registry` - A registry service such as Crates.io or GitHub. +/// * `name` - A project name. +/// * `version` - Current version of the project. +/// +/// # Examples +/// +/// ```rust +/// use update_informer::{registry, Check}; +/// +/// let name = env!("CARGO_PKG_NAME"); +/// let version = env!("CARGO_PKG_VERSION"); +/// let informer = update_informer::new(registry::Crates, name, version); +/// ``` +pub fn new(registry: R, name: N, version: V) -> UpdateInformer +where + R: Registry, + N: AsRef, + V: AsRef, +{ + UpdateInformer { + _registry: registry, + name, + version, + http_client: DefaultHttpClient {}, + interval: Duration::from_secs(60 * 60 * 24), // Once a day + timeout: Duration::from_secs(5), + } +} + +impl UpdateInformer +where + R: Registry, + N: AsRef, + V: AsRef, + H: HttpClient, +{ + /// Sets an interval how often to check for a new version. + /// + /// # Arguments + /// + /// * `interval` - An interval in seconds. By default, it is 24 hours. + /// + /// # Examples + /// + /// ```rust + /// use std::time::Duration; + /// use update_informer::{registry, Check}; + /// + /// const EVERY_HOUR: Duration = Duration::from_secs(60 * 60); + /// + /// let informer = update_informer::new(registry::Crates, "crate_name", "0.1.0").interval(EVERY_HOUR); + /// let _ = informer.check_version(); // The check will start only after an hour + /// ``` + pub fn interval(self, interval: Duration) -> Self { + Self { interval, ..self } + } + + /// Sets a request timeout. + /// + /// # Arguments + /// + /// * `timeout` - A request timeout. By default, it is 5 seconds. + /// + /// # Examples + /// + /// ```rust + /// use std::time::Duration; + /// use update_informer::{registry, Check}; + /// + /// const THIRTY_SECONDS: Duration = Duration::from_secs(30); + /// + /// let informer = update_informer::new(registry::Crates, "crate_name", "0.1.0").timeout(THIRTY_SECONDS); + /// let _ = informer.check_version(); + /// ``` + pub fn timeout(self, timeout: Duration) -> Self { + Self { timeout, ..self } + } + + /// Sets an HTTP client to send request to the registry. + /// + /// # Arguments + /// + /// * `http_client` - A type that implements the `HttpClient` trait. + /// + /// # Examples + /// + /// ```rust + /// use isahc::ReadResponseExt; + /// use std::time::Duration; + /// use serde::de::DeserializeOwned; + /// use update_informer::{http_client::{HeaderMap, HttpClient}, registry, Check}; + /// + /// struct YourOwnHttpClient; + /// + /// impl HttpClient for YourOwnHttpClient { + /// fn get( + /// url: &str, + /// _timeout: Duration, + /// _headers: HeaderMap, + /// ) -> update_informer::Result { + /// let json = isahc::get(url)?.json()?; + /// Ok(json) + /// } + /// } + /// + /// let informer = update_informer::new(registry::Crates, "crate_name", "0.1.0").http_client(YourOwnHttpClient); + /// let _ = informer.check_version(); + /// ``` + pub fn http_client(self, http_client: C) -> UpdateInformer { + UpdateInformer { + _registry: self._registry, + name: self.name, + version: self.version, + interval: self.interval, + timeout: self.timeout, + http_client, + } + } +} + +impl Check for UpdateInformer +where + R: Registry, + N: AsRef, + V: AsRef, + H: HttpClient, +{ + /// Checks for a new version in the registry. + /// + /// # Examples + /// + /// To check for a new version on Crates.io: + /// + /// ```rust + /// use update_informer::{registry, Check}; + /// + /// let informer = update_informer::new(registry::Crates, "crate_name", "0.1.0"); + /// let _ = informer.check_version(); + /// ``` + fn check_version(self) -> Result> { + let pkg = Package::new(self.name.as_ref(), self.version.as_ref())?; + let client = http_client::new(self.http_client, self.timeout); + + // If the interval is zero, don't use the cache file + let latest_version = if self.interval.is_zero() { + match R::get_latest_version(client, &pkg)? { + Some(v) => v, + None => return Ok(None), + } + } else { + let latest_version_file = VersionFile::new(R::NAME, &pkg, self.version.as_ref())?; + let last_modified = latest_version_file.last_modified()?; + + if last_modified >= self.interval { + // This is needed to update mtime of the file + latest_version_file.recreate_file()?; + + match R::get_latest_version(client, &pkg)? { + Some(v) => { + latest_version_file.write_version(&v)?; + v + } + None => return Ok(None), + } + } else { + latest_version_file.get_version()? + } + }; + + let latest_version = Version::parse(latest_version)?; + if &latest_version > pkg.version() { + return Ok(Some(latest_version)); + } + + Ok(None) + } +} + +/// Fake `UpdateInformer`. Used only for tests. +pub struct FakeUpdateInformer> { + version: V, +} + +/// Constructs a new `FakeUpdateInformer`. +/// +/// # Arguments +/// +/// * `registry` - A registry service such as Crates.io or GitHub (not used). +/// * `name` - A project name (not used). +/// * `version` - Current version of the project (not used). +/// * `interval` - An interval how often to check for a new version (not used). +/// * `new_version` - The desired version. +/// +/// # Examples +/// +/// ```rust +/// use update_informer::{registry, Check}; +/// +/// let informer = update_informer::fake(registry::Crates, "repo", "0.1.0", "1.0.0"); +/// ``` +pub fn fake(_registry: R, _name: N, _version: V, new_version: V) -> FakeUpdateInformer +where + R: Registry, + N: AsRef, + V: AsRef, +{ + FakeUpdateInformer { + version: new_version, + } +} + +impl> FakeUpdateInformer { + pub fn interval(self, _interval: Duration) -> Self { + self + } + + pub fn timeout(self, _timeout: Duration) -> Self { + self + } + + pub fn http_client(self, _http_client: C) -> Self { + self + } +} + +impl> Check for FakeUpdateInformer { + /// Returns the desired version as a new version. + /// + /// # Examples + /// + /// ```rust + /// use update_informer::{registry, Check}; + /// + /// let informer = update_informer::fake(registry::Crates, "crate_name", "0.1.0", "1.0.0"); + /// let result = informer.check_version(); + /// assert!(result.is_ok()); + /// + /// let version = result.unwrap(); + /// assert!(version.is_some()); + /// assert_eq!(version.unwrap().to_string(), "v1.0.0"); + /// ``` + fn check_version(self) -> Result> { + let version = Version::parse(self.version.as_ref())?; + + Ok(Some(version)) + } +} + +#[cfg(test)] +mod tests { + use std::fs; + + use mockito::Mock; + + use super::*; + use crate::{registry::Crates, test_helper::within_test_dir}; + + const PKG_NAME: &str = "repo"; + const CURRENT_VERSION: &str = "3.1.0"; + const LATEST_VERSION: &str = "3.1.1"; + + fn mock_crates(pkg: &str) -> Mock { + let pkg = Package::new(pkg, CURRENT_VERSION).unwrap(); + let (mock, _) = crate::test_helper::mock_crates( + &pkg, + 200, + "tests/fixtures/registry/crates/versions.json", + ); + + mock + } + + #[test] + fn no_new_version_with_interval_test() { + within_test_dir(|_| { + let informer = new(Crates, PKG_NAME, CURRENT_VERSION); + let result = informer.check_version(); + + assert!(result.is_ok()); + assert_eq!(result.unwrap(), None); + }); + } + + #[test] + fn no_new_version_on_registry_test() { + within_test_dir(|_| { + let _mock = mock_crates(PKG_NAME); + let informer = new(Crates, PKG_NAME, LATEST_VERSION).interval(Duration::ZERO); + let result = informer.check_version(); + + assert!(result.is_ok()); + assert_eq!(result.unwrap(), None); + }); + } + + #[test] + fn check_version_on_crates_test() { + within_test_dir(|_| { + let _mock = mock_crates(PKG_NAME); + let informer = new(Crates, PKG_NAME, CURRENT_VERSION).interval(Duration::ZERO); + let result = informer.check_version(); + let version = Version::parse(LATEST_VERSION).expect("parse version"); + + assert!(result.is_ok()); + assert_eq!(result.unwrap(), Some(version)); + }); + } + + #[test] + fn return_version_from_file_test() { + within_test_dir(|version_file| { + fs::write(version_file, "4.0.0").expect("create file"); + + let informer = new(Crates, PKG_NAME, CURRENT_VERSION); + let result = informer.check_version(); + let version = Version::parse("4.0.0").expect("parse version"); + + assert!(result.is_ok()); + assert_eq!(result.unwrap(), Some(version)); + }); + } + + #[test] + fn create_version_file_test() { + within_test_dir(|version_file| { + assert!(!version_file.exists()); + + let informer = new(Crates, PKG_NAME, CURRENT_VERSION); + let result = informer.check_version(); + assert!(result.is_ok()); + assert!(version_file.exists()); + + let version = fs::read_to_string(version_file).expect("read file"); + assert_eq!(version, CURRENT_VERSION); + }); + } + + #[test] + fn do_not_create_version_file_test() { + within_test_dir(|version_file| { + assert!(!version_file.exists()); + + let _mock = mock_crates(PKG_NAME); + let informer = new(Crates, PKG_NAME, CURRENT_VERSION).interval(Duration::ZERO); + let result = informer.check_version(); + + assert!(result.is_ok()); + assert!(!version_file.exists()); + }); + } + + #[test] + fn check_version_with_string_name_test() { + within_test_dir(|_| { + let pkg_name = format!("{}/{}", "owner", PKG_NAME); + let informer = new(Crates, pkg_name, CURRENT_VERSION); + let result = informer.check_version(); + + assert!(result.is_ok()); + }); + } + + #[test] + fn check_version_with_string_version_test() { + within_test_dir(|_| { + let version = String::from(CURRENT_VERSION); + let informer = new(Crates, PKG_NAME, version); + let result = informer.check_version(); + + assert!(result.is_ok()); + }); + } + + #[test] + fn check_version_with_amp_string_test() { + within_test_dir(|_| { + let pkg_name = format!("{}/{}", "owner", PKG_NAME); + let version = String::from(CURRENT_VERSION); + let informer = new(Crates, &pkg_name, &version); + let result = informer.check_version(); + + assert!(result.is_ok()); + }); + } + + #[test] + fn fake_check_version_test() { + let version = "1.0.0"; + let informer = fake(Crates, PKG_NAME, CURRENT_VERSION, version) + .interval(Duration::ZERO) + .timeout(Duration::ZERO); + let result = informer.check_version(); + let version = Version::parse(version).expect("parse version"); + + assert!(result.is_ok()); + assert_eq!(result.unwrap(), Some(version)); + } +} diff --git a/crates/update-informer/src/package.rs b/crates/update-informer/src/package.rs new file mode 100644 index 0000000000000..e0230f6a0833c --- /dev/null +++ b/crates/update-informer/src/package.rs @@ -0,0 +1,105 @@ +use std::fmt::{Display, Formatter}; + +use crate::{Result, Version}; + +/// A package representation. +#[derive(Debug, PartialEq, Eq)] +pub struct Package<'a> { + owner: Option<&'a str>, + name: &'a str, + version: Version, +} + +impl<'a> Package<'a> { + pub(crate) fn new(name: &'a str, version: &'a str) -> Result { + let version = Version::parse(version)?; + + let pkg = if !name.contains('/') { + Self { + owner: None, + name, + version, + } + } else { + let parts = name.split('/').collect::>(); + + Self { + owner: Some(parts[0]), + name: parts[1], + version, + } + }; + + Ok(pkg) + } + + /// Returns a name suitable for storing on filesystem, that will include + /// owner if it is set. + pub(crate) fn name(&self) -> String { + let owner = self.owner.map(|s| format!("{s}-")).unwrap_or_default(); + format!("{}{}", owner, self.name) + } + + /// Returns the parsed version of the package + pub fn version(&self) -> &Version { + &self.version + } +} + +impl Display for Package<'_> { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + if self.owner.is_none() { + return write!(f, "{}", self.name); + } + + write!(f, "{}/{}", self.owner.as_ref().unwrap(), self.name) + } +} + +#[cfg(test)] +mod tests { + use crate::{Package, Version}; + + const RAW_VERSION: &str = "1.0.0"; + + #[test] + fn new_with_name_test() { + let version = Version::parse(RAW_VERSION).expect("parse version"); + let pkg1 = Package::new("repo", RAW_VERSION).unwrap(); + let pkg2 = Package { + owner: None, + name: "repo", + version: version.clone(), + }; + + assert_eq!(pkg1, pkg2); + assert_eq!(pkg1.name(), "repo".to_string()); + assert_eq!(pkg1.version(), &version); + } + + #[test] + fn new_with_owner_and_name_test() { + let version = Version::parse(RAW_VERSION).expect("parse version"); + let pkg1 = Package::new("owner/repo", RAW_VERSION).unwrap(); + let pkg2 = Package { + owner: Some("owner"), + name: "repo", + version, + }; + + assert_eq!(pkg1, pkg2); + assert_eq!(pkg1.name(), "owner-repo".to_string()); + } + + #[test] + fn name_fmt_test() { + let pkg = Package::new("repo", RAW_VERSION).unwrap(); + assert_eq!(String::from("repo"), format!("{}", pkg)) + } + + #[test] + fn name_with_owner_fmt_test() { + let pkg = Package::new("owner/repo", RAW_VERSION).unwrap(); + assert_eq!(String::from("owner/repo"), format!("{}", pkg)) + } +} diff --git a/crates/update-informer/src/registry/crates.rs b/crates/update-informer/src/registry/crates.rs new file mode 100644 index 0000000000000..60fff133c27e8 --- /dev/null +++ b/crates/update-informer/src/registry/crates.rs @@ -0,0 +1,96 @@ +#[cfg(test)] +use mockito; +use serde::Deserialize; + +use crate::{ + http_client::{GenericHttpClient, HttpClient}, + Package, Registry, Result, +}; + +#[cfg(not(test))] +const REGISTRY_URL: &str = "https://crates.io"; + +#[derive(Deserialize)] +struct Response { + versions: Vec, +} + +#[derive(Deserialize)] +struct VersionResponse { + num: String, +} + +/// The Rust community’s crate registry. +pub struct Crates; + +#[cfg(not(test))] +fn get_base_url() -> String { + format!("{REGISTRY_URL}/api/v1/crates") +} + +#[cfg(test)] +fn get_base_url() -> String { + format!("{}/api/v1/crates", &mockito::server_url()) +} + +impl Registry for Crates { + const NAME: &'static str = "crates"; + + fn get_latest_version( + http_client: GenericHttpClient, + pkg: &Package, + ) -> Result> { + let url = format!("{}/{}/versions", get_base_url(), pkg); + let resp = http_client.get::(&url)?; + + if let Some(v) = resp.versions.first() { + return Ok(Some(v.num.clone())); + } + + Ok(None) + } +} + +#[cfg(test)] +mod tests { + use std::time::Duration; + + use super::*; + use crate::{http_client, test_helper::mock_crates}; + + const PKG_NAME: &str = "repo"; + const RAW_VERSION: &str = "0.1.0"; + const FIXTURES_PATH: &str = "tests/fixtures/registry/crates"; + const TIMEOUT: Duration = Duration::from_secs(5); + + #[test] + fn failure_test() { + let pkg = Package::new(PKG_NAME, RAW_VERSION).unwrap(); + let client = http_client::new(http_client::DefaultHttpClient {}, TIMEOUT); + let data_path = format!("{}/not_found.json", FIXTURES_PATH); + let _mock = mock_crates(&pkg, 404, &data_path); + let result = Crates::get_latest_version(client, &pkg); + assert!(result.is_err()); + } + + #[test] + fn success_test() { + let pkg = Package::new(PKG_NAME, RAW_VERSION).unwrap(); + let client = http_client::new(http_client::DefaultHttpClient {}, TIMEOUT); + let data_path = format!("{}/versions.json", FIXTURES_PATH); + let (_mock, data) = mock_crates(&pkg, 200, &data_path); + + let json: Response = serde_json::from_str(&data).expect("deserialize json"); + let latest_version = json + .versions + .first() + .expect("get latest version") + .num + .clone(); + + let result = Crates::get_latest_version(client, &pkg); + + assert!(result.is_ok()); + assert_eq!(result.expect("get result"), Some(latest_version)); + } +} diff --git a/crates/update-informer/src/registry/github.rs b/crates/update-informer/src/registry/github.rs new file mode 100644 index 0000000000000..31f955902b457 --- /dev/null +++ b/crates/update-informer/src/registry/github.rs @@ -0,0 +1,91 @@ +#[cfg(test)] +use mockito; +use serde::Deserialize; + +use crate::{ + http_client::{GenericHttpClient, HttpClient}, + Package, Registry, Result, +}; + +#[cfg(not(test))] +const REGISTRY_URL: &str = "https://api.github.com"; + +#[derive(Deserialize)] +struct Response { + tag_name: String, +} + +/// The most popular and largest project hosting. +pub struct GitHub; + +#[cfg(not(test))] +fn get_base_url() -> String { + format!("{REGISTRY_URL}/repos") +} + +#[cfg(test)] +fn get_base_url() -> String { + format!("{}/repos", &mockito::server_url()) +} + +impl Registry for GitHub { + const NAME: &'static str = "github"; + + fn get_latest_version( + http_client: GenericHttpClient, + pkg: &Package, + ) -> Result> { + let url = format!("{}/{}/releases/latest", get_base_url(), pkg); + let resp = http_client + .add_header("Accept", "application/vnd.github.v3+json") + .add_header("User-Agent", "update-informer") + .get::(&url)?; + + if resp.tag_name.starts_with('v') { + return Ok(Some(resp.tag_name[1..].to_string())); + } + + Ok(Some(resp.tag_name)) + } +} + +#[cfg(test)] +mod tests { + use std::time::Duration; + + use super::*; + use crate::{http_client, test_helper::mock_github}; + + const PKG_NAME: &str = "owner/repo"; + const FIXTURES_PATH: &str = "tests/fixtures/registry/github"; + const TIMEOUT: Duration = Duration::from_secs(5); + + #[test] + fn failure_test() { + let raw_version = "0.1.0"; + let pkg = Package::new(PKG_NAME, raw_version).unwrap(); + let client = http_client::new(http_client::DefaultHttpClient {}, TIMEOUT); + let data_path = format!("{}/not_found.json", FIXTURES_PATH); + let _mock = mock_github(&pkg, 404, &data_path); + + let result = GitHub::get_latest_version(client, &pkg); + assert!(result.is_err()); + } + + #[test] + fn success_test() { + let raw_version = "1.6.3-canary.0"; + let pkg = Package::new(PKG_NAME, raw_version).unwrap(); + let client = http_client::new(http_client::DefaultHttpClient {}, TIMEOUT); + let data_path = format!("{}/release.json", FIXTURES_PATH); + let (_mock, data) = mock_github(&pkg, 200, &data_path); + + let json: Response = serde_json::from_str(&data).expect("deserialize json"); + let latest_version = json.tag_name[1..].to_string(); + + let result = GitHub::get_latest_version(client, &pkg); + + assert!(result.is_ok()); + assert_eq!(result.expect("get result"), Some(latest_version)); + } +} diff --git a/crates/update-informer/src/registry/mod.rs b/crates/update-informer/src/registry/mod.rs new file mode 100644 index 0000000000000..509bfcaf0e4bf --- /dev/null +++ b/crates/update-informer/src/registry/mod.rs @@ -0,0 +1,42 @@ +use crate::{ + http_client::{GenericHttpClient, HttpClient}, + Package, Result, +}; + +#[cfg(feature = "crates")] +mod crates; +#[cfg(feature = "crates")] +pub use crates::Crates; + +#[cfg(feature = "github")] +mod github; +#[cfg(feature = "github")] +pub use github::GitHub; + +#[cfg(feature = "npm")] +mod npm; +#[cfg(feature = "npm")] +pub use npm::Npm; + +#[cfg(feature = "pypi")] +mod pypi; + +#[cfg(feature = "pypi")] +pub use pypi::PyPI; + +pub trait Registry { + /// The name of the registry. + const NAME: &'static str; + + /// Gets the latest version of a package from the registry. + /// + /// # Arguments + /// + /// * `http_client` - An HTTP client to send requests to the registry. + /// * `pkg` - A `Package` struct. + /// * `current_version` - The current version of the package. + fn get_latest_version( + http_client: GenericHttpClient, + pkg: &Package, + ) -> Result>; +} diff --git a/crates/update-informer/src/registry/npm.rs b/crates/update-informer/src/registry/npm.rs new file mode 100644 index 0000000000000..2acbf08d0868a --- /dev/null +++ b/crates/update-informer/src/registry/npm.rs @@ -0,0 +1,80 @@ +use serde::Deserialize; + +use crate::{ + http_client::{GenericHttpClient, HttpClient}, + Package, Registry, Result, +}; + +#[cfg(not(test))] +const REGISTRY_URL: &str = "https://registry.npmjs.org"; + +#[derive(Deserialize)] +struct Response { + version: String, +} + +/// The NPM package registry. +pub struct Npm; + +#[cfg(not(test))] +fn get_base_url() -> String { + REGISTRY_URL.to_string() +} + +#[cfg(test)] +fn get_base_url() -> String { + mockito::server_url() +} + +impl Registry for Npm { + const NAME: &'static str = "npm"; + + fn get_latest_version( + http_client: GenericHttpClient, + pkg: &Package, + ) -> Result> { + let url = format!("{}/{}/latest", get_base_url(), pkg); + let resp = http_client.get::(&url)?; + + Ok(Some(resp.version)) + } +} + +#[cfg(test)] +mod tests { + use std::time::Duration; + + use super::*; + use crate::{http_client, test_helper::mock_npm}; + + const PKG_NAME: &str = "turbo"; + const FIXTURES_PATH: &str = "tests/fixtures/registry/npm"; + const TIMEOUT: Duration = Duration::from_secs(5); + + #[test] + fn failure_test() { + let raw_version = "0.1.0"; + let pkg = Package::new(PKG_NAME, raw_version).unwrap(); + let client = http_client::new(http_client::DefaultHttpClient {}, TIMEOUT); + let data_path = format!("{}/not_found.html", FIXTURES_PATH); + let _mock = mock_npm(&pkg, 404, &data_path); + + let result = Npm::get_latest_version(client, &pkg); + assert!(result.is_err()); + } + + #[test] + fn success_test() { + let raw_version = "1.6.2"; + let pkg = Package::new(PKG_NAME, raw_version).unwrap(); + let client = http_client::new(http_client::DefaultHttpClient {}, TIMEOUT); + let data_path = format!("{}/latest.json", FIXTURES_PATH); + let (_mock, _data) = mock_npm(&pkg, 200, &data_path); + + let latest_version = "1.6.3".to_string(); + let result = Npm::get_latest_version(client, &pkg); + + assert!(result.is_ok()); + assert_eq!(result.expect("get result"), Some(latest_version)); + } +} diff --git a/crates/update-informer/src/registry/pypi.rs b/crates/update-informer/src/registry/pypi.rs new file mode 100644 index 0000000000000..dfca6f77d2a4d --- /dev/null +++ b/crates/update-informer/src/registry/pypi.rs @@ -0,0 +1,91 @@ +#[cfg(test)] +use mockito; +use serde::Deserialize; + +use crate::{ + http_client::{GenericHttpClient, HttpClient}, + Package, Registry, Result, +}; + +#[cfg(not(test))] +const REGISTRY_URL: &str = "https://pypi.org"; + +#[derive(Deserialize, Debug)] +struct Response { + info: Info, +} + +#[derive(Deserialize, Debug)] +struct Info { + version: String, + yanked: bool, +} + +/// The Python community’s package registry. +pub struct PyPI; + +#[cfg(not(test))] +fn get_base_url() -> String { + format!("{REGISTRY_URL}/pypi") +} + +#[cfg(test)] +fn get_base_url() -> String { + format!("{}/pypi", &mockito::server_url()) +} + +impl Registry for PyPI { + const NAME: &'static str = "pypi"; + + fn get_latest_version( + http_client: GenericHttpClient, + pkg: &Package, + ) -> Result> { + let url = format!("{}/{}/json", get_base_url(), pkg); + let resp = http_client.get::(&url)?; + + if !resp.info.yanked { + return Ok(Some(resp.info.version)); + } + + Ok(None) + } +} + +#[cfg(test)] +mod tests { + use std::time::Duration; + + use super::*; + use crate::{http_client, test_helper::mock_pypi}; + + const PKG_NAME: &str = "filprofiler"; + const RAW_VERSION: &str = "0.1.0"; + const FIXTURES_PATH: &str = "tests/fixtures/registry/pypi"; + const TIMEOUT: Duration = Duration::from_secs(5); + + #[test] + fn failure_test() { + let pkg = Package::new(PKG_NAME, RAW_VERSION).unwrap(); + let client = http_client::new(http_client::DefaultHttpClient {}, TIMEOUT); + let data_path = format!("{}/not_found.html", FIXTURES_PATH); + let _mock = mock_pypi(&pkg, 404, &data_path); + + let result = PyPI::get_latest_version(client, &pkg); + assert!(result.is_err()); + } + + #[test] + fn success_test() { + let pkg = Package::new(PKG_NAME, RAW_VERSION).unwrap(); + let client = http_client::new(http_client::DefaultHttpClient {}, TIMEOUT); + let data_path = format!("{}/release.json", FIXTURES_PATH); + let (_mock, _data) = mock_pypi(&pkg, 200, &data_path); + + let latest_version = "2022.1.1".to_string(); + let result = PyPI::get_latest_version(client, &pkg); + + assert!(result.is_ok()); + assert_eq!(result.expect("get result"), Some(latest_version)); + } +} diff --git a/crates/update-informer/src/test_helper.rs b/crates/update-informer/src/test_helper.rs new file mode 100644 index 0000000000000..cdde2c7b4dcd4 --- /dev/null +++ b/crates/update-informer/src/test_helper.rs @@ -0,0 +1,71 @@ +use std::{fs, panic, path::PathBuf, sync::Mutex}; + +use mockito::{mock, Mock}; +use once_cell::sync::Lazy; + +use crate::Package; + +static LOCK: Lazy> = Lazy::new(|| Mutex::default()); + +pub(crate) fn within_test_dir(f: fn(path: PathBuf)) { + // To avoid problems when working in parallel with the file system + let mutex = LOCK.lock().expect("unlock mutex"); + + let test_dir: PathBuf = std::env::temp_dir().join("update-informer-test"); + fs::create_dir_all(&test_dir).expect("create test dir"); + + let result = panic::catch_unwind(|| { + let path: PathBuf = test_dir.join("crates-repo"); + + f(path); + }); + + fs::remove_dir_all(test_dir).expect("remove test dir"); + + if let Err(e) = result { + // If we panic while holding the mutex, it becomes poisoned, and future + // tests fail in a unexpected way. So release lock before the panic. + drop(mutex); + panic::resume_unwind(e); + } +} + +#[cfg(feature = "crates")] +pub(crate) fn mock_crates(pkg: &Package, status: usize, data_path: &str) -> (Mock, String) { + let mock_path = format!("/api/v1/crates/{}/versions", pkg); + let data = fs::read_to_string(data_path).expect("read file to string"); + + (mock_http(&mock_path, status, &data), data) +} + +#[cfg(feature = "github")] +pub(crate) fn mock_github(pkg: &Package, status: usize, data_path: &str) -> (Mock, String) { + let mock_path = format!("/repos/{}/releases/latest", pkg); + let data = fs::read_to_string(data_path).expect("read file to string"); + + (mock_http(&mock_path, status, &data), data) +} + +#[cfg(feature = "npm")] +pub(crate) fn mock_npm(pkg: &Package, status: usize, data_path: &str) -> (Mock, String) { + let mock_path = format!("/{}/latest", pkg); + let data = fs::read_to_string(data_path).expect("read file to string"); + + (mock_http(&mock_path, status, &data), data) +} + +#[cfg(feature = "pypi")] +pub(crate) fn mock_pypi(pkg: &Package, status: usize, data_path: &str) -> (Mock, String) { + let mock_path = format!("/pypi/{}/json", pkg); + let data = fs::read_to_string(data_path).expect("read file to string"); + + (mock_http(&mock_path, status, &data), data) +} + +pub(crate) fn mock_http(path: &str, status: usize, body: &str) -> Mock { + mock("GET", path) + .with_status(status) + .with_header("Content-Type", "application/json; charset=utf-8") + .with_body(body) + .create() +} diff --git a/crates/update-informer/src/version.rs b/crates/update-informer/src/version.rs new file mode 100644 index 0000000000000..5f70bb616377a --- /dev/null +++ b/crates/update-informer/src/version.rs @@ -0,0 +1,117 @@ +use std::fmt::{Display, Formatter}; + +use crate::Result; + +/// A version representation. +#[derive(Debug, Clone, PartialEq, PartialOrd, Eq)] +pub struct Version(semver::Version); + +impl Version { + pub(crate) fn parse>(value: V) -> Result { + let value = value.as_ref(); + let v = value.strip_prefix('v').unwrap_or(value); + let version = semver::Version::parse(v)?; + + Ok(Self(version)) + } + + /// Returns `semver::Version`. + pub fn semver(&self) -> &semver::Version { + &self.0 + } +} + +impl Display for Version { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + write!(f, "v{}", self.0) + } +} + +#[cfg(test)] +mod tests { + use crate::Version; + + #[test] + fn parse_str_version_test() { + let version1 = Version::parse("0.1.0"); + let version2 = Version { + 0: semver::Version { + major: 0, + minor: 1, + patch: 0, + pre: Default::default(), + build: Default::default(), + }, + }; + + assert!(version1.is_ok()); + assert_eq!(version1.unwrap(), version2); + } + + #[test] + fn parse_string_version_test() { + let version1 = Version::parse(String::from("0.1.0")); + let version2 = Version { + 0: semver::Version { + major: 0, + minor: 1, + patch: 0, + pre: Default::default(), + build: Default::default(), + }, + }; + + assert!(version1.is_ok()); + assert_eq!(version1.unwrap(), version2); + } + + #[test] + fn parse_amp_string_version_test() { + let version1 = Version::parse(&String::from("0.1.0")); + let version2 = Version { + 0: semver::Version { + major: 0, + minor: 1, + patch: 0, + pre: Default::default(), + build: Default::default(), + }, + }; + + assert!(version1.is_ok()); + assert_eq!(version1.unwrap(), version2); + } + + #[test] + fn parse_version_with_prefix_test() { + let version1 = Version::parse("v0.1.0"); + let version2 = Version { + 0: semver::Version { + major: 0, + minor: 1, + patch: 0, + pre: Default::default(), + build: Default::default(), + }, + }; + + assert!(version1.is_ok()); + assert_eq!(version1.unwrap(), version2); + } + + #[test] + fn fmt_test() { + let version = Version::parse("0.1.0"); + assert!(version.is_ok()); + assert_eq!(String::from("v0.1.0"), format!("{}", version.unwrap())) + } + + #[test] + fn semver_test() { + let version = Version::parse("0.1.0-canary"); + assert!(version.is_ok()); + + let version = version.unwrap(); + assert_eq!(version.semver().pre.to_string(), "canary"); + } +} diff --git a/crates/update-informer/src/version_file.rs b/crates/update-informer/src/version_file.rs new file mode 100644 index 0000000000000..7ccb800c0f3c6 --- /dev/null +++ b/crates/update-informer/src/version_file.rs @@ -0,0 +1,192 @@ +use std::{ + fs, + io::{self, ErrorKind}, + path::PathBuf, + time::Duration, +}; + +use crate::{Package, Result}; + +#[derive(Debug, PartialEq)] +pub(crate) struct VersionFile<'a> { + path: PathBuf, + version: &'a str, +} + +impl<'a> VersionFile<'a> { + pub(crate) fn new(registry: &str, pkg: &Package, version: &'a str) -> Result { + let file_name = format!("{}-{}", registry, pkg.name()); + let path = cache_path()?.join(file_name); + + Ok(Self { path, version }) + } + + pub(crate) fn last_modified(&self) -> Result { + let metadata = match fs::metadata(&self.path) { + Ok(meta) => meta, + Err(e) if e.kind() == ErrorKind::NotFound => { + self.write_version(self.version)?; + return Ok(Duration::ZERO); + } + Err(e) => return Err(e.into()), + }; + + let last_modified = metadata.modified()?.elapsed(); + Ok(last_modified.unwrap_or_default()) + } + + pub(crate) fn recreate_file(&self) -> io::Result<()> { + fs::remove_file(&self.path)?; + self.write_version(self.version) + } + + pub(crate) fn write_version>(&self, version: V) -> io::Result<()> { + fs::write(&self.path, version.as_ref()) + } + + pub(crate) fn get_version(&self) -> io::Result { + fs::read_to_string(&self.path) + } +} + +#[cfg(not(test))] +fn cache_path() -> Result { + let project_dir = directories::ProjectDirs::from("", "", "update-informer-rs") + .ok_or("Unable to find cache directory")?; + let directory = project_dir.cache_dir().to_path_buf(); + fs::create_dir_all(&directory)?; + Ok(directory) +} + +#[cfg(test)] +fn cache_path() -> Result { + Ok(std::env::temp_dir().join("update-informer-test")) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::test_helper::within_test_dir; + + #[test] + fn new_test() { + let version = "0.1.0"; + let pkg = Package::new("repo", version).unwrap(); + let version_file1 = VersionFile::new("myreg", &pkg, version).unwrap(); + let version_file2 = VersionFile { + path: cache_path().unwrap().join("myreg-repo"), + version: "0.1.0", + }; + + assert_eq!(version_file1, version_file2); + } + + #[test] + fn create_version_file_twice_test() { + let version = "0.1.0"; + let pkg = Package::new("repo", version).unwrap(); + let version_file1 = VersionFile::new("reg", &pkg, version).expect("create version file"); + let version_file2 = VersionFile::new("reg", &pkg, version).expect("create version file"); + assert_eq!(version_file1, version_file2); + } + + #[test] + fn last_modified_file_exists_test() { + within_test_dir(|path| { + fs::write(&path, "0.1.0").expect("creates test file"); + + let version_file = VersionFile { + path, + version: "0.1.0", + }; + + let last_modified = version_file.last_modified(); + assert!(last_modified.is_ok()); + assert!(!last_modified.unwrap().is_zero()); + }); + } + + #[test] + fn last_modified_file_not_exists_test() { + within_test_dir(|path| { + let version_file = VersionFile { + path: path.clone(), + version: "0.1.0", + }; + + let last_modified = version_file.last_modified(); + assert!(last_modified.is_ok()); + assert!(last_modified.unwrap().is_zero()); + + let version = fs::read_to_string(&path).expect("read test file"); + assert_eq!(version, "0.1.0"); + }); + } + + #[test] + fn recreate_file_test() { + within_test_dir(|path| { + fs::write(&path, "0.1.0").expect("creates test file"); + + let version_file = VersionFile { + path: path.clone(), + version: "1.0.0", + }; + + let result = version_file.recreate_file(); + assert!(result.is_ok()); + + let version = fs::read_to_string(&path).expect("read test file"); + assert_eq!(version, "1.0.0"); + }); + } + + #[test] + fn write_version_test() { + within_test_dir(|path| { + fs::write(&path, "1.0.0").expect("creates test file"); + + let version_file = VersionFile { + path: path.clone(), + version: "1.0.0", + }; + + let result = version_file.write_version("2.0.0"); + assert!(result.is_ok()); + + let version = fs::read_to_string(&path).expect("read test file"); + assert_eq!(version, "2.0.0"); + }); + } + + #[test] + fn get_version_file_exists_test() { + within_test_dir(|path| { + fs::write(&path, "1.0.0").expect("creates test file"); + + let version_file = VersionFile { + path: path.clone(), + version: "1.0.0", + }; + + let result = version_file.get_version(); + assert!(result.is_ok()); + + let version = fs::read_to_string(&path).expect("read test file"); + assert_eq!(version, "1.0.0"); + }); + } + + #[test] + fn get_version_file_not_exists_test() { + within_test_dir(|path| { + let version_file = VersionFile { + path: path.clone(), + version: "1.0.0", + }; + + let result = version_file.get_version(); + assert!(result.is_err()); + }); + } +} diff --git a/crates/update-informer/tests/fixtures/registry/crates/not_found.json b/crates/update-informer/tests/fixtures/registry/crates/not_found.json new file mode 100644 index 0000000000000..5cb3d34e07ad9 --- /dev/null +++ b/crates/update-informer/tests/fixtures/registry/crates/not_found.json @@ -0,0 +1,7 @@ +{ + "errors": [ + { + "detail": "Not Found" + } + ] +} diff --git a/crates/update-informer/tests/fixtures/registry/crates/versions.json b/crates/update-informer/tests/fixtures/registry/crates/versions.json new file mode 100644 index 0000000000000..de21d19e391c7 --- /dev/null +++ b/crates/update-informer/tests/fixtures/registry/crates/versions.json @@ -0,0 +1,433 @@ +{ + "versions": [ + { + "audit_actions": [ + { + "action": "publish", + "time": "2021-08-24T16:31:28.699799+00:00", + "user": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + } + } + ], + "crate": "dotenv-linter", + "crate_size": 62773, + "created_at": "2021-08-24T16:31:28.699799+00:00", + "dl_path": "/api/v1/crates/dotenv-linter/3.1.1/download", + "downloads": 500, + "features": {}, + "id": 417026, + "license": "MIT", + "links": { + "authors": "/api/v1/crates/dotenv-linter/3.1.1/authors", + "dependencies": "/api/v1/crates/dotenv-linter/3.1.1/dependencies", + "version_downloads": "/api/v1/crates/dotenv-linter/3.1.1/downloads" + }, + "num": "3.1.1", + "published_by": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + }, + "readme_path": "/api/v1/crates/dotenv-linter/3.1.1/readme", + "updated_at": "2021-08-24T16:31:28.699799+00:00", + "yanked": false + }, + { + "audit_actions": [ + { + "action": "publish", + "time": "2021-06-09T12:11:12.215760+00:00", + "user": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + } + } + ], + "crate": "dotenv-linter", + "crate_size": 61917, + "created_at": "2021-06-09T12:11:12.215760+00:00", + "dl_path": "/api/v1/crates/dotenv-linter/3.1.0/download", + "downloads": 583, + "features": {}, + "id": 387880, + "license": "MIT", + "links": { + "authors": "/api/v1/crates/dotenv-linter/3.1.0/authors", + "dependencies": "/api/v1/crates/dotenv-linter/3.1.0/dependencies", + "version_downloads": "/api/v1/crates/dotenv-linter/3.1.0/downloads" + }, + "num": "3.1.0", + "published_by": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + }, + "readme_path": "/api/v1/crates/dotenv-linter/3.1.0/readme", + "updated_at": "2021-06-09T12:11:12.215760+00:00", + "yanked": false + }, + { + "audit_actions": [ + { + "action": "publish", + "time": "2021-01-11T10:35:57.998432+00:00", + "user": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + } + } + ], + "crate": "dotenv-linter", + "crate_size": 50300, + "created_at": "2021-01-11T10:35:57.998432+00:00", + "dl_path": "/api/v1/crates/dotenv-linter/3.0.0/download", + "downloads": 571, + "features": {}, + "id": 325947, + "license": "MIT", + "links": { + "authors": "/api/v1/crates/dotenv-linter/3.0.0/authors", + "dependencies": "/api/v1/crates/dotenv-linter/3.0.0/dependencies", + "version_downloads": "/api/v1/crates/dotenv-linter/3.0.0/downloads" + }, + "num": "3.0.0", + "published_by": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + }, + "readme_path": "/api/v1/crates/dotenv-linter/3.0.0/readme", + "updated_at": "2021-01-11T10:35:57.998432+00:00", + "yanked": false + }, + { + "audit_actions": [ + { + "action": "publish", + "time": "2020-10-24T12:28:15.234276+00:00", + "user": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + } + } + ], + "crate": "dotenv-linter", + "crate_size": 44616, + "created_at": "2020-10-24T12:28:15.234276+00:00", + "dl_path": "/api/v1/crates/dotenv-linter/2.2.1/download", + "downloads": 387, + "features": {}, + "id": 298567, + "license": "MIT", + "links": { + "authors": "/api/v1/crates/dotenv-linter/2.2.1/authors", + "dependencies": "/api/v1/crates/dotenv-linter/2.2.1/dependencies", + "version_downloads": "/api/v1/crates/dotenv-linter/2.2.1/downloads" + }, + "num": "2.2.1", + "published_by": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + }, + "readme_path": "/api/v1/crates/dotenv-linter/2.2.1/readme", + "updated_at": "2020-10-24T12:28:15.234276+00:00", + "yanked": false + }, + { + "audit_actions": [ + { + "action": "publish", + "time": "2020-10-12T07:30:02.025520+00:00", + "user": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + } + } + ], + "crate": "dotenv-linter", + "crate_size": 43832, + "created_at": "2020-10-12T07:30:02.025520+00:00", + "dl_path": "/api/v1/crates/dotenv-linter/2.2.0/download", + "downloads": 215, + "features": {}, + "id": 292568, + "license": "MIT", + "links": { + "authors": "/api/v1/crates/dotenv-linter/2.2.0/authors", + "dependencies": "/api/v1/crates/dotenv-linter/2.2.0/dependencies", + "version_downloads": "/api/v1/crates/dotenv-linter/2.2.0/downloads" + }, + "num": "2.2.0", + "published_by": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + }, + "readme_path": "/api/v1/crates/dotenv-linter/2.2.0/readme", + "updated_at": "2020-10-12T07:30:02.025520+00:00", + "yanked": false + }, + { + "audit_actions": [ + { + "action": "publish", + "time": "2020-07-13T09:28:57.323954+00:00", + "user": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + } + } + ], + "crate": "dotenv-linter", + "crate_size": 34378, + "created_at": "2020-07-13T09:28:57.323954+00:00", + "dl_path": "/api/v1/crates/dotenv-linter/2.1.0/download", + "downloads": 730, + "features": {}, + "id": 261948, + "license": "MIT", + "links": { + "authors": "/api/v1/crates/dotenv-linter/2.1.0/authors", + "dependencies": "/api/v1/crates/dotenv-linter/2.1.0/dependencies", + "version_downloads": "/api/v1/crates/dotenv-linter/2.1.0/downloads" + }, + "num": "2.1.0", + "published_by": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + }, + "readme_path": "/api/v1/crates/dotenv-linter/2.1.0/readme", + "updated_at": "2020-07-13T09:28:57.323954+00:00", + "yanked": false + }, + { + "audit_actions": [ + { + "action": "publish", + "time": "2020-06-15T07:14:25.142999+00:00", + "user": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + } + } + ], + "crate": "dotenv-linter", + "crate_size": 27668, + "created_at": "2020-06-15T07:14:25.142999+00:00", + "dl_path": "/api/v1/crates/dotenv-linter/2.0.0/download", + "downloads": 75, + "features": {}, + "id": 252503, + "license": "MIT", + "links": { + "authors": "/api/v1/crates/dotenv-linter/2.0.0/authors", + "dependencies": "/api/v1/crates/dotenv-linter/2.0.0/dependencies", + "version_downloads": "/api/v1/crates/dotenv-linter/2.0.0/downloads" + }, + "num": "2.0.0", + "published_by": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + }, + "readme_path": "/api/v1/crates/dotenv-linter/2.0.0/readme", + "updated_at": "2020-06-15T07:14:25.142999+00:00", + "yanked": false + }, + { + "audit_actions": [ + { + "action": "publish", + "time": "2020-04-20T09:14:40.363297+00:00", + "user": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + } + } + ], + "crate": "dotenv-linter", + "crate_size": 122400, + "created_at": "2020-04-20T09:14:40.363297+00:00", + "dl_path": "/api/v1/crates/dotenv-linter/1.2.0/download", + "downloads": 104, + "features": {}, + "id": 233055, + "license": "MIT", + "links": { + "authors": "/api/v1/crates/dotenv-linter/1.2.0/authors", + "dependencies": "/api/v1/crates/dotenv-linter/1.2.0/dependencies", + "version_downloads": "/api/v1/crates/dotenv-linter/1.2.0/downloads" + }, + "num": "1.2.0", + "published_by": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + }, + "readme_path": "/api/v1/crates/dotenv-linter/1.2.0/readme", + "updated_at": "2020-04-20T09:14:40.363297+00:00", + "yanked": false + }, + { + "audit_actions": [ + { + "action": "publish", + "time": "2020-03-13T09:03:27.008378+00:00", + "user": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + } + } + ], + "crate": "dotenv-linter", + "crate_size": 114246, + "created_at": "2020-03-13T09:03:27.008378+00:00", + "dl_path": "/api/v1/crates/dotenv-linter/1.1.2/download", + "downloads": 103, + "features": {}, + "id": 220521, + "license": "MIT", + "links": { + "authors": "/api/v1/crates/dotenv-linter/1.1.2/authors", + "dependencies": "/api/v1/crates/dotenv-linter/1.1.2/dependencies", + "version_downloads": "/api/v1/crates/dotenv-linter/1.1.2/downloads" + }, + "num": "1.1.2", + "published_by": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + }, + "readme_path": "/api/v1/crates/dotenv-linter/1.1.2/readme", + "updated_at": "2020-03-13T09:03:27.008378+00:00", + "yanked": false + }, + { + "audit_actions": [ + { + "action": "publish", + "time": "2020-02-18T17:07:48.671836+00:00", + "user": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + } + } + ], + "crate": "dotenv-linter", + "crate_size": 113318, + "created_at": "2020-02-18T17:07:48.671836+00:00", + "dl_path": "/api/v1/crates/dotenv-linter/1.1.1/download", + "downloads": 105, + "features": {}, + "id": 213649, + "license": "MIT", + "links": { + "authors": "/api/v1/crates/dotenv-linter/1.1.1/authors", + "dependencies": "/api/v1/crates/dotenv-linter/1.1.1/dependencies", + "version_downloads": "/api/v1/crates/dotenv-linter/1.1.1/downloads" + }, + "num": "1.1.1", + "published_by": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + }, + "readme_path": "/api/v1/crates/dotenv-linter/1.1.1/readme", + "updated_at": "2020-02-18T17:07:48.671836+00:00", + "yanked": false + }, + { + "audit_actions": [ + { + "action": "publish", + "time": "2020-02-05T12:53:36.690147+00:00", + "user": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + } + } + ], + "crate": "dotenv-linter", + "crate_size": 13276, + "created_at": "2020-02-05T12:53:36.690147+00:00", + "dl_path": "/api/v1/crates/dotenv-linter/1.1.0/download", + "downloads": 108, + "features": {}, + "id": 209628, + "license": "MIT", + "links": { + "authors": "/api/v1/crates/dotenv-linter/1.1.0/authors", + "dependencies": "/api/v1/crates/dotenv-linter/1.1.0/dependencies", + "version_downloads": "/api/v1/crates/dotenv-linter/1.1.0/downloads" + }, + "num": "1.1.0", + "published_by": { + "avatar": "https://avatars0.githubusercontent.com/u/700998?v=4", + "id": 58624, + "login": "mgrachev", + "name": "Grachev Mikhail", + "url": "https://github.com/mgrachev" + }, + "readme_path": "/api/v1/crates/dotenv-linter/1.1.0/readme", + "updated_at": "2020-02-05T12:53:36.690147+00:00", + "yanked": false + } + ] +} diff --git a/crates/update-informer/tests/fixtures/registry/github/not_found.json b/crates/update-informer/tests/fixtures/registry/github/not_found.json new file mode 100644 index 0000000000000..c03777b28516f --- /dev/null +++ b/crates/update-informer/tests/fixtures/registry/github/not_found.json @@ -0,0 +1,4 @@ +{ + "message": "Not Found", + "documentation_url": "https://docs.github.com/rest/reference/repos#get-the-latest-release" +} diff --git a/crates/update-informer/tests/fixtures/registry/github/release.json b/crates/update-informer/tests/fixtures/registry/github/release.json new file mode 100644 index 0000000000000..957651ede466b --- /dev/null +++ b/crates/update-informer/tests/fixtures/registry/github/release.json @@ -0,0 +1,313 @@ +{ + "url": "https://api.github.com/repos/dotenv-linter/dotenv-linter/releases/48416485", + "assets_url": "https://api.github.com/repos/dotenv-linter/dotenv-linter/releases/48416485/assets", + "upload_url": "https://uploads.github.com/repos/dotenv-linter/dotenv-linter/releases/48416485/assets{?name,label}", + "html_url": "https://github.com/dotenv-linter/dotenv-linter/releases/tag/v3.1.1", + "id": 48416485, + "author": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "node_id": "MDc6UmVsZWFzZTQ4NDE2NDg1", + "tag_name": "v3.1.1", + "target_commitish": "master", + "name": "v3.1.1", + "draft": false, + "prerelease": false, + "created_at": "2021-08-25T10:01:45Z", + "published_at": "2021-08-25T10:16:49Z", + "assets": [ + { + "url": "https://api.github.com/repos/dotenv-linter/dotenv-linter/releases/assets/43247873", + "id": 43247873, + "node_id": "MDEyOlJlbGVhc2VBc3NldDQzMjQ3ODcz", + "name": "dotenv-linter-alpine-aarch64.tar.gz", + "label": "", + "uploader": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "content_type": "application/gzip", + "state": "uploaded", + "size": 780227, + "download_count": 6, + "created_at": "2021-08-25T10:06:26Z", + "updated_at": "2021-08-25T10:06:27Z", + "browser_download_url": "https://github.com/dotenv-linter/dotenv-linter/releases/download/v3.1.1/dotenv-linter-alpine-aarch64.tar.gz" + }, + { + "url": "https://api.github.com/repos/dotenv-linter/dotenv-linter/releases/assets/43247871", + "id": 43247871, + "node_id": "MDEyOlJlbGVhc2VBc3NldDQzMjQ3ODcx", + "name": "dotenv-linter-alpine-x86_64.tar.gz", + "label": "", + "uploader": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "content_type": "application/gzip", + "state": "uploaded", + "size": 785318, + "download_count": 4334, + "created_at": "2021-08-25T10:06:26Z", + "updated_at": "2021-08-25T10:06:27Z", + "browser_download_url": "https://github.com/dotenv-linter/dotenv-linter/releases/download/v3.1.1/dotenv-linter-alpine-x86_64.tar.gz" + }, + { + "url": "https://api.github.com/repos/dotenv-linter/dotenv-linter/releases/assets/43247831", + "id": 43247831, + "node_id": "MDEyOlJlbGVhc2VBc3NldDQzMjQ3ODMx", + "name": "dotenv-linter-darwin-arm64.tar.gz", + "label": "", + "uploader": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "content_type": "application/gzip", + "state": "uploaded", + "size": 352685, + "download_count": 127, + "created_at": "2021-08-25T10:05:42Z", + "updated_at": "2021-08-25T10:05:42Z", + "browser_download_url": "https://github.com/dotenv-linter/dotenv-linter/releases/download/v3.1.1/dotenv-linter-darwin-arm64.tar.gz" + }, + { + "url": "https://api.github.com/repos/dotenv-linter/dotenv-linter/releases/assets/43247830", + "id": 43247830, + "node_id": "MDEyOlJlbGVhc2VBc3NldDQzMjQ3ODMw", + "name": "dotenv-linter-darwin-x86_64.tar.gz", + "label": "", + "uploader": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "content_type": "application/gzip", + "state": "uploaded", + "size": 365260, + "download_count": 446, + "created_at": "2021-08-25T10:05:42Z", + "updated_at": "2021-08-25T10:05:42Z", + "browser_download_url": "https://github.com/dotenv-linter/dotenv-linter/releases/download/v3.1.1/dotenv-linter-darwin-x86_64.tar.gz" + }, + { + "url": "https://api.github.com/repos/dotenv-linter/dotenv-linter/releases/assets/43247872", + "id": 43247872, + "node_id": "MDEyOlJlbGVhc2VBc3NldDQzMjQ3ODcy", + "name": "dotenv-linter-linux-aarch64.tar.gz", + "label": "", + "uploader": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "content_type": "application/gzip", + "state": "uploaded", + "size": 620865, + "download_count": 10, + "created_at": "2021-08-25T10:06:26Z", + "updated_at": "2021-08-25T10:06:27Z", + "browser_download_url": "https://github.com/dotenv-linter/dotenv-linter/releases/download/v3.1.1/dotenv-linter-linux-aarch64.tar.gz" + }, + { + "url": "https://api.github.com/repos/dotenv-linter/dotenv-linter/releases/assets/43247870", + "id": 43247870, + "node_id": "MDEyOlJlbGVhc2VBc3NldDQzMjQ3ODcw", + "name": "dotenv-linter-linux-x86_64.tar.gz", + "label": "", + "uploader": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "content_type": "application/gzip", + "state": "uploaded", + "size": 634555, + "download_count": 17685, + "created_at": "2021-08-25T10:06:26Z", + "updated_at": "2021-08-25T10:06:27Z", + "browser_download_url": "https://github.com/dotenv-linter/dotenv-linter/releases/download/v3.1.1/dotenv-linter-linux-x86_64.tar.gz" + }, + { + "url": "https://api.github.com/repos/dotenv-linter/dotenv-linter/releases/assets/43247865", + "id": 43247865, + "node_id": "MDEyOlJlbGVhc2VBc3NldDQzMjQ3ODY1", + "name": "dotenv-linter-win-aarch64.zip", + "label": "", + "uploader": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "content_type": "application/zip", + "state": "uploaded", + "size": 216557, + "download_count": 1, + "created_at": "2021-08-25T10:06:22Z", + "updated_at": "2021-08-25T10:06:22Z", + "browser_download_url": "https://github.com/dotenv-linter/dotenv-linter/releases/download/v3.1.1/dotenv-linter-win-aarch64.zip" + }, + { + "url": "https://api.github.com/repos/dotenv-linter/dotenv-linter/releases/assets/43247866", + "id": 43247866, + "node_id": "MDEyOlJlbGVhc2VBc3NldDQzMjQ3ODY2", + "name": "dotenv-linter-win-x64.zip", + "label": "", + "uploader": { + "login": "github-actions[bot]", + "id": 41898282, + "node_id": "MDM6Qm90NDE4OTgyODI=", + "avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/github-actions%5Bbot%5D", + "html_url": "https://github.com/apps/github-actions", + "followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "content_type": "application/zip", + "state": "uploaded", + "size": 227835, + "download_count": 64, + "created_at": "2021-08-25T10:06:22Z", + "updated_at": "2021-08-25T10:06:22Z", + "browser_download_url": "https://github.com/dotenv-linter/dotenv-linter/releases/download/v3.1.1/dotenv-linter-win-x64.zip" + } + ], + "tarball_url": "https://api.github.com/repos/dotenv-linter/dotenv-linter/tarball/v3.1.1", + "zipball_url": "https://api.github.com/repos/dotenv-linter/dotenv-linter/zipball/v3.1.1", + "body": "### 🚀 Added\r\n- `aarch64` support (mac, linux, win) [#436](https://github.com/dotenv-linter/dotenv-linter/pull/436) (@DDtKey)\r\n\r\n### 🔧 Changed\r\n- Fix clippy warnings [#437](https://github.com/dotenv-linter/dotenv-linter/pull/437) (@mgrachev)\r\n- Use enum instead of string for lint's identity [#427](https://github.com/dotenv-linter/dotenv-linter/pull/427) (@fabricio7p)\r\n- Get rid of the name field in checks and fixes structs [#432](https://github.com/dotenv-linter/dotenv-linter/pull/432) (@mgrachev)\r\n- Replace filter with unwrap on flatten [#434](https://github.com/dotenv-linter/dotenv-linter/pull/434) (@Fcukit)", + "mentions_count": 4 +} diff --git a/crates/update-informer/tests/fixtures/registry/npm/latest.json b/crates/update-informer/tests/fixtures/registry/npm/latest.json new file mode 100644 index 0000000000000..d8ef419075320 --- /dev/null +++ b/crates/update-informer/tests/fixtures/registry/npm/latest.json @@ -0,0 +1,77 @@ +{ + "name": "turbo", + "version": "1.6.3", + "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", + "repository": { + "type": "git", + "url": "git+https://github.com/vercel/turbo.git" + }, + "bugs": { + "url": "https://github.com/vercel/turbo/issues" + }, + "homepage": "https://turbo.build/repo", + "license": "MPL-2.0", + "scripts": { + "postversion": "node bump-version.js", + "postinstall": "node install.js" + }, + "bin": { + "turbo": "bin/turbo" + }, + "optionalDependencies": { + "turbo-darwin-64": "1.6.3", + "turbo-darwin-arm64": "1.6.3", + "turbo-linux-64": "1.6.3", + "turbo-linux-arm64": "1.6.3", + "turbo-windows-64": "1.6.3", + "turbo-windows-arm64": "1.6.3" + }, + "dependencies": { + "turbo-darwin-64": "1.6.3", + "turbo-darwin-arm64": "1.6.3", + "turbo-linux-64": "1.6.3", + "turbo-linux-arm64": "1.6.3", + "turbo-windows-64": "1.6.3", + "turbo-windows-arm64": "1.6.3" + }, + "_id": "turbo@1.6.3", + "_integrity": "sha512-FtfhJLmEEtHveGxW4Ye/QuY85AnZ2ZNVgkTBswoap7UMHB1+oI4diHPNyqrQLG4K1UFtCkjOlVoLsllUh/9QRw==", + "_resolved": "/home/runner/work/turbo/turbo/turbo-1.6.3.tgz", + "_from": "file:/home/runner/work/turbo/turbo/turbo-1.6.3.tgz", + "_nodeVersion": "16.17.1", + "_npmVersion": "8.15.0", + "dist": { + "integrity": "sha512-FtfhJLmEEtHveGxW4Ye/QuY85AnZ2ZNVgkTBswoap7UMHB1+oI4diHPNyqrQLG4K1UFtCkjOlVoLsllUh/9QRw==", + "shasum": "ec26cc8907c38a9fd6eb072fb10dad254733543e", + "tarball": "https://registry.npmjs.org/turbo/-/turbo-1.6.3.tgz", + "fileCount": 5, + "unpackedSize": 19730, + "signatures": [ + { + "keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA", + "sig": "MEYCIQCPRGQwidzm013fbz1sUljF10IzlFuSVX6XXEoe0UPiowIhAODFXJ9yvXudr38H7YaDJNAoevlukqMHNyGeniehmPmU" + } + ], + "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjYNM7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpj0Q//YzxUq1uIjN2103LtecBs6Z+zl8e42TdbaVEmsjQQk5YeNveU\r\neryBxsAc1LwtU2vyam5g+7QuqPClxNqpj7H7OZbAyAR5ksdlz+ifJdUPZHJR\r\nyQYMCcv5FX0uhsv/25JlIfqSmz0K+XKT/Sw0Mz6AtoInBA1XLS14RWi5E+wk\r\n0/qPKbLN+dw/WCD5iaWGrRvRsLQtF/Q3s/J2ACLTP23DaL+WNYu1V3tS9oO0\r\nPLb2LiRDyN9jHpakYyml9xGBFgFbNt5SkusB7ne3DevXmcNyp3muEwx0eQaM\r\n288T7BzJDNV4bsyu5fikH5jn/4ekyw3qB/HGDJLoJqokL1nSDdTqSsTZQG/c\r\n5UoH8er4XLZTtbxca+ClakVCYb/sGiAaAu7VHBmz8sLMweHyIRhkUgs0l0Uw\r\nDUsvoBVsGMRlDYhhiKif7z5+7j0r2tprhmscNZAmpIJY0imzMuaXHmpDb8ab\r\ncSWJffpHFMlbBieq486cwjLaRPvZuyNYEMVfAnGt6HQkDAXl65tfXPGbLHM9\r\n2Tpa6g2/XfQEQaEIiJmxU7hOJWGTr1w4sUA+ZCjk/+bMWlvJZiUaMfFGkw+H\r\nwqUqH8z0YQ7y2Ml6pLKV3kf2z466ZNHuJXGmqeTgSG8qVzaPTy+16zHuanx+\r\n8h/U2AUi/20Fpea0j5jCz7ofSME8FSbpYHA=\r\n=TIPF\r\n-----END PGP SIGNATURE-----\r\n" + }, + "_npmUser": { + "name": "turbobot", + "email": "turbobot@vercel.com" + }, + "directories": {}, + "maintainers": [ + { + "name": "jaredpalmer", + "email": "jared@palmer.net" + }, + { + "name": "turbobot", + "email": "turbobot@vercel.com" + } + ], + "_npmOperationalInternal": { + "host": "s3://npm-registry-packages", + "tmp": "tmp/turbo_1.6.3_1667289915007_0.16694084827348732" + }, + "_hasShrinkwrap": false +} diff --git a/crates/update-informer/tests/fixtures/registry/npm/not_found.html b/crates/update-informer/tests/fixtures/registry/npm/not_found.html new file mode 100644 index 0000000000000..ca1891c857ec1 --- /dev/null +++ b/crates/update-informer/tests/fixtures/registry/npm/not_found.html @@ -0,0 +1 @@ +not found diff --git a/crates/update-informer/tests/fixtures/registry/pypi/not_found.html b/crates/update-informer/tests/fixtures/registry/pypi/not_found.html new file mode 100644 index 0000000000000..ca1891c857ec1 --- /dev/null +++ b/crates/update-informer/tests/fixtures/registry/pypi/not_found.html @@ -0,0 +1 @@ +not found diff --git a/crates/update-informer/tests/fixtures/registry/pypi/release.json b/crates/update-informer/tests/fixtures/registry/pypi/release.json new file mode 100644 index 0000000000000..ce140c7531e95 --- /dev/null +++ b/crates/update-informer/tests/fixtures/registry/pypi/release.json @@ -0,0 +1,6405 @@ +{ + "info": { + "author": "", + "author_email": "", + "bugtrack_url": null, + "classifiers": [ + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Operating System :: MacOS", + "Operating System :: POSIX :: Linux", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: Implementation :: CPython" + ], + "description": "# The Fil memory profiler for Python\n\nYour Python code reads some data, processes it, and uses too much memory; maybe it even dies due to an out-of-memory error.\nIn order to reduce memory usage, you first need to figure out:\n\n1. Where peak memory usage is, also known as the high-water mark.\n2. What code was responsible for allocating the memory that was present at that peak moment.\n\nThat's exactly what Fil will help you find.\nFil an open source memory profiler designed for data processing applications written in Python, and includes native support for Jupyter.\nFil runs on Linux and macOS, and supports Python 3.6 and later.\n\n## Getting help\n\n* For more information, you can **[read the documentation](https://pythonspeed.com/fil/docs/)**.\n* If you need help or have any questions, feel free to file an issue or [start a discussion](https://github.com/pythonspeed/filprofiler/discussions).\n**When in doubt, please ask\u2014I love questions.**\n\n## What users are saying\n\n> \"Within minutes of using your tool, I was able to identify a major memory bottleneck that I never would have thought existed. The ability to track memory allocated via the Python interface and also C allocation is awesome, especially for my NumPy / Pandas programs.\"\n> \n> \u2014Derrick Kondo\n\n> \"Fil has just pointed straight at the cause of a memory issue that's been costing my team tons of time and compute power. Thanks again for such an excellent tool!\"\n>\n> \u2014Peter Sobot\n\n## License\n\nCopyright 2021 Hyphenated Enterprises LLC\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n\n", + "description_content_type": "text/markdown", + "docs_url": null, + "download_url": "", + "downloads": { + "last_day": -1, + "last_month": -1, + "last_week": -1 + }, + "home_page": "https://pythonspeed.com/fil/", + "keywords": "", + "license": "Apache 2.0", + "maintainer": "Itamar Turner-Trauring", + "maintainer_email": "itamar@pythonspeed.com", + "name": "filprofiler", + "package_url": "https://pypi.org/project/filprofiler/", + "platform": "", + "project_url": "https://pypi.org/project/filprofiler/", + "project_urls": { + "Homepage": "https://pythonspeed.com/fil/" + }, + "release_url": "https://pypi.org/project/filprofiler/2022.1.1/", + "requires_dist": [ + "threadpoolctl", + "pytest ; extra == 'dev'", + "pampy ; extra == 'dev'", + "numpy ; extra == 'dev'", + "cython ; extra == 'dev'", + "black ; extra == 'dev'", + "towncrier (==19.9.0rc1) ; extra == 'dev'", + "wheel ; extra == 'dev'", + "auditwheel ; extra == 'dev'", + "twine ; extra == 'dev'", + "ipython ; extra == 'dev'", + "ipykernel ; extra == 'dev'", + "nbconvert ; extra == 'dev'", + "numexpr ; extra == 'dev'", + "blosc ; extra == 'dev'", + "psutil ; extra == 'dev'", + "flake8 ; extra == 'dev'" + ], + "requires_python": ">=3.6", + "summary": "A memory profiler for data batch processing applications.", + "version": "2022.1.1", + "yanked": false, + "yanked_reason": null + }, + "last_serial": 12737582, + "releases": { + "0.10.0": [ + { + "comment_text": "", + "digests": { + "md5": "5d075071305baab4752682ebb40cd2cb", + "sha256": "259572ce6181b8f4488160a540b982482145f26fd44224c4b2f2396622c4fda6" + }, + "downloads": -1, + "filename": "filprofiler-0.10.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "5d075071305baab4752682ebb40cd2cb", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 271727, + "upload_time": "2020-08-28T18:02:37", + "upload_time_iso_8601": "2020-08-28T18:02:37.302774Z", + "url": "https://files.pythonhosted.org/packages/3c/9a/4091ca013c23089a1c7b78491a5a2ba24631751cdc7072e6304821179de3/filprofiler-0.10.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "3cc675a893b0d62d03a55035aa5a9796", + "sha256": "08ab9e83515e2f1039c3f5b479e6cb359a9e894c6a01920c4f6f89d586b502a6" + }, + "downloads": -1, + "filename": "filprofiler-0.10.0-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "3cc675a893b0d62d03a55035aa5a9796", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 1764447, + "upload_time": "2020-08-28T17:57:36", + "upload_time_iso_8601": "2020-08-28T17:57:36.567595Z", + "url": "https://files.pythonhosted.org/packages/f7/9e/7fa3aa8fef5e965a5f7e3804b8c7786a022f4d0d1a6de6af8d0f4a49e94c/filprofiler-0.10.0-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "550934a8ed883396aab8b07ff9026832", + "sha256": "00639f4422cb361e08fccaadc147651b88a06cd98a5dbff0cb7525e9562e5d03" + }, + "downloads": -1, + "filename": "filprofiler-0.10.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "550934a8ed883396aab8b07ff9026832", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 271731, + "upload_time": "2020-08-28T18:04:00", + "upload_time_iso_8601": "2020-08-28T18:04:00.685962Z", + "url": "https://files.pythonhosted.org/packages/98/59/02fd377b69462c8cb94e63b3a35bfc9b97b43a24da3605aafb31fab141bc/filprofiler-0.10.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "fccca0883747680edf816eab12705001", + "sha256": "451501f1bf6757f731f4274cf189e6e0ed3594a17f90b6c0d0cc070ab5ab7a69" + }, + "downloads": -1, + "filename": "filprofiler-0.10.0-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "fccca0883747680edf816eab12705001", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 1765148, + "upload_time": "2020-08-28T17:57:38", + "upload_time_iso_8601": "2020-08-28T17:57:38.370799Z", + "url": "https://files.pythonhosted.org/packages/dc/1a/7d832ebe80e1cf316f36e70d596b5f8142c8ac1444acd10cac5fa9653963/filprofiler-0.10.0-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "9ebd5469de30544347844a63c7828093", + "sha256": "3171992dac1c04d8affc5960b5dfcd550722c4d2223cf8c6e8ea190c694c79e5" + }, + "downloads": -1, + "filename": "filprofiler-0.10.0-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "9ebd5469de30544347844a63c7828093", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 271722, + "upload_time": "2020-08-28T18:03:40", + "upload_time_iso_8601": "2020-08-28T18:03:40.215408Z", + "url": "https://files.pythonhosted.org/packages/50/05/9b6cb09c0ce4411e837cc5ac57fc66656b41614cf228d3dbcc289cd9cc25/filprofiler-0.10.0-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "d0d186103b5da89f064664e2e158e997", + "sha256": "5f4e81c4599885e80197ec62f6cdb214e15517b642b82a172d921725bc5ba6f1" + }, + "downloads": -1, + "filename": "filprofiler-0.10.0-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "d0d186103b5da89f064664e2e158e997", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 1764617, + "upload_time": "2020-08-28T17:57:39", + "upload_time_iso_8601": "2020-08-28T17:57:39.979288Z", + "url": "https://files.pythonhosted.org/packages/17/b0/8988c810bb1af164a79d8d15cb84f9f533b17f28b28d9b0baa7267a80422/filprofiler-0.10.0-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.11.0": [ + { + "comment_text": "", + "digests": { + "md5": "899902367ef6214591b626a8197cab6a", + "sha256": "13d02895f4185ecad082742ff5eb5be7db4de70cecba05670b37bf1ebb202141" + }, + "downloads": -1, + "filename": "filprofiler-0.11.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "899902367ef6214591b626a8197cab6a", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 309567, + "upload_time": "2020-11-19T14:59:59", + "upload_time_iso_8601": "2020-11-19T14:59:59.917579Z", + "url": "https://files.pythonhosted.org/packages/42/18/d9b88f60a9a5821e8d4d1a4f01151593daaac3dd1d153b5e26eafa61e852/filprofiler-0.11.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "9cbca4953be4e3c69c73abcf632af78c", + "sha256": "e8d12ea3b438db0c181717baafc8f4493017ef40570c75cd5504c79bc474032d" + }, + "downloads": -1, + "filename": "filprofiler-0.11.0-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "9cbca4953be4e3c69c73abcf632af78c", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 1824263, + "upload_time": "2020-11-19T14:55:20", + "upload_time_iso_8601": "2020-11-19T14:55:20.022916Z", + "url": "https://files.pythonhosted.org/packages/ca/3a/dd3f81a814c1dd5a7105390aec8e7c9814dba85d8be6b7878d8067bf181e/filprofiler-0.11.0-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "071a75c55ab6faadba53a11b0b1eec71", + "sha256": "fe9522978aca2a52997344e0ded8a64d1ec9cae908a5ecfd651b09da7eb00912" + }, + "downloads": -1, + "filename": "filprofiler-0.11.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "071a75c55ab6faadba53a11b0b1eec71", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 309566, + "upload_time": "2020-11-19T15:01:54", + "upload_time_iso_8601": "2020-11-19T15:01:54.233271Z", + "url": "https://files.pythonhosted.org/packages/73/a1/c39b5a55f58af8c69d54f309c42e8de6c353176418a5a66c3e383c9a75ba/filprofiler-0.11.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "d31b74f2caf982fe7c64a621a68c6f26", + "sha256": "bf2df444b5c01d54218711282054adadf36d7ce6c4a55a657917d2b32c306022" + }, + "downloads": -1, + "filename": "filprofiler-0.11.0-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "d31b74f2caf982fe7c64a621a68c6f26", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 1824949, + "upload_time": "2020-11-19T14:55:21", + "upload_time_iso_8601": "2020-11-19T14:55:21.659476Z", + "url": "https://files.pythonhosted.org/packages/e6/81/a5112efefb8edf334478680e7e4e33185b99d0fdbcbc70451e0ac516cf90/filprofiler-0.11.0-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "ddacd21592115318ee7db7c173d0ee17", + "sha256": "71acbca4bc04f462e944617652c4bb2f6429de01a17350e77a369f289abde9be" + }, + "downloads": -1, + "filename": "filprofiler-0.11.0-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "ddacd21592115318ee7db7c173d0ee17", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 309559, + "upload_time": "2020-11-19T15:00:14", + "upload_time_iso_8601": "2020-11-19T15:00:14.242964Z", + "url": "https://files.pythonhosted.org/packages/8c/91/2ab8a1c790d765e37dac3ce07ca56722586f2199d2d34fd6a1ad40e01e65/filprofiler-0.11.0-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "3fafff3e98293a131354c0fd899a26c3", + "sha256": "d12fda16e94977164933e312f5350cf1d031b930a21f1d58841f85d581c56b1d" + }, + "downloads": -1, + "filename": "filprofiler-0.11.0-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "3fafff3e98293a131354c0fd899a26c3", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 1824233, + "upload_time": "2020-11-19T14:55:23", + "upload_time_iso_8601": "2020-11-19T14:55:23.583724Z", + "url": "https://files.pythonhosted.org/packages/12/e5/2470d7fc23dfc5e37ebc1d2e84993ebefd9974d1ebdd7249a02b38aaee9c/filprofiler-0.11.0-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.12.0": [ + { + "comment_text": "", + "digests": { + "md5": "426c237e64c46f892a1cccfe09fe5232", + "sha256": "40305c76241c7046ebb92d710f052a2ab670a73ce35f2b4db08028555407748a" + }, + "downloads": -1, + "filename": "filprofiler-0.12.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "426c237e64c46f892a1cccfe09fe5232", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 309659, + "upload_time": "2020-11-21T15:10:15", + "upload_time_iso_8601": "2020-11-21T15:10:15.533143Z", + "url": "https://files.pythonhosted.org/packages/d6/6f/377f9bcb535f41b1ceb5cd18258e2b44fd814ad0099a70e7ad824410b1ef/filprofiler-0.12.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "c06bea3f51aad174e11982ca668a4228", + "sha256": "0e3fb415e2096ad7853149df1f55bf53c72cb90e22f9de9169e6e2820b155942" + }, + "downloads": -1, + "filename": "filprofiler-0.12.0-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "c06bea3f51aad174e11982ca668a4228", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 1824886, + "upload_time": "2020-11-21T15:04:47", + "upload_time_iso_8601": "2020-11-21T15:04:47.234194Z", + "url": "https://files.pythonhosted.org/packages/40/27/5a7b3d7b03fbd9a3b35afbda1f8af49bff5f223d75f9ec6b78e354cfa1c6/filprofiler-0.12.0-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "38e63f5d5ae31db7a966ae247c238322", + "sha256": "848cc8db9cd9b657d6b7dddb20e71c717173cc4646876cdad2f025978233dd86" + }, + "downloads": -1, + "filename": "filprofiler-0.12.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "38e63f5d5ae31db7a966ae247c238322", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 309658, + "upload_time": "2020-11-21T15:08:54", + "upload_time_iso_8601": "2020-11-21T15:08:54.507375Z", + "url": "https://files.pythonhosted.org/packages/11/eb/bd05a38f57b835ebf1322352999c20707b403b04c646b78f18714e8486c3/filprofiler-0.12.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "98eac1f67ee6d068a36b669d1fac0fe9", + "sha256": "17688bee1c1405d589b745dfffd1251195980c0b1f6699ad06a3946cc17e738f" + }, + "downloads": -1, + "filename": "filprofiler-0.12.0-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "98eac1f67ee6d068a36b669d1fac0fe9", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 1825667, + "upload_time": "2020-11-21T15:04:48", + "upload_time_iso_8601": "2020-11-21T15:04:48.569746Z", + "url": "https://files.pythonhosted.org/packages/f9/c5/d15d4fd37c8b2931894e2be5dcfc311d304937734a9454098c4f28770b7a/filprofiler-0.12.0-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "c0cad2d8489b08c6be3a77f42a03844d", + "sha256": "32aea069a9e0d6ae2ab1b5da955c7ab868492f858c7f436fef1c9b64e48bc303" + }, + "downloads": -1, + "filename": "filprofiler-0.12.0-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "c0cad2d8489b08c6be3a77f42a03844d", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 309649, + "upload_time": "2020-11-21T15:08:31", + "upload_time_iso_8601": "2020-11-21T15:08:31.178668Z", + "url": "https://files.pythonhosted.org/packages/3c/84/c48c14d5f345560b9d1dd5d268505c17518a3386a9af86beb583c4d04c22/filprofiler-0.12.0-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "1d5bcaea891df3e266862e247e624cf6", + "sha256": "6ee0de54bc648516e214209c4b1578009511335aa36ebfe9631b067d2ee7ec0d" + }, + "downloads": -1, + "filename": "filprofiler-0.12.0-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "1d5bcaea891df3e266862e247e624cf6", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 1825145, + "upload_time": "2020-11-21T15:04:49", + "upload_time_iso_8601": "2020-11-21T15:04:49.737994Z", + "url": "https://files.pythonhosted.org/packages/48/a0/ff15b5311f9cb2566bcbb0ef7d2c9dd545d82390e9fe884324eb7d2082e3/filprofiler-0.12.0-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.13.0": [ + { + "comment_text": "", + "digests": { + "md5": "af3a707007318de852caf50d6d353c7d", + "sha256": "20d366835fbdbfad030258d4f771e85a8a251532a0df699c3e4c5eec9bedeb07" + }, + "downloads": -1, + "filename": "filprofiler-0.13.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "af3a707007318de852caf50d6d353c7d", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 311534, + "upload_time": "2020-11-27T20:44:11", + "upload_time_iso_8601": "2020-11-27T20:44:11.570705Z", + "url": "https://files.pythonhosted.org/packages/66/25/6d25694a83ce86431390b1e2ada009dd4133758ef7375c7e22107fa0c8e3/filprofiler-0.13.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "58712ad212e36b09079cda6441acef6f", + "sha256": "e07066d0bac6694ce1059d6e7df725d388b67c1ede61dc2121d5f26f1f1ebf23" + }, + "downloads": -1, + "filename": "filprofiler-0.13.0-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "58712ad212e36b09079cda6441acef6f", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 1824869, + "upload_time": "2020-11-27T20:38:36", + "upload_time_iso_8601": "2020-11-27T20:38:36.321063Z", + "url": "https://files.pythonhosted.org/packages/e5/4f/e321a261427e025e0fb255e761c1853c66cbcb22f8eb4a5317493ae55577/filprofiler-0.13.0-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "2bea38bdbda9b443a2b34db395934e96", + "sha256": "eebf66ccefe643a84ac7176f5d666faf48fe2fe4887bb0a1bf22edcceb4d7045" + }, + "downloads": -1, + "filename": "filprofiler-0.13.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "2bea38bdbda9b443a2b34db395934e96", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 311533, + "upload_time": "2020-11-27T20:44:20", + "upload_time_iso_8601": "2020-11-27T20:44:20.720536Z", + "url": "https://files.pythonhosted.org/packages/68/a2/acf380c8cd7610e4e9251274f774d677bbd609f6d6aef8da4778593bd419/filprofiler-0.13.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "4c0361c73d9f8597ce96b18cf42be311", + "sha256": "dfaf584511b0561171f1ac029926168218ff64ede9c8ade9281a7131dd2eefad" + }, + "downloads": -1, + "filename": "filprofiler-0.13.0-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "4c0361c73d9f8597ce96b18cf42be311", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 1825460, + "upload_time": "2020-11-27T20:38:37", + "upload_time_iso_8601": "2020-11-27T20:38:37.864179Z", + "url": "https://files.pythonhosted.org/packages/4b/3c/a9f50049154ad3b9857690e7129243442628ab0b3eb149495fb69c6592b5/filprofiler-0.13.0-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "9e95acda0e8404cddfda85232dfbfb28", + "sha256": "95e29180bf81fa38ffcc7517d6cc4f64ae251b29bdb177d7a69447074b109a06" + }, + "downloads": -1, + "filename": "filprofiler-0.13.0-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "9e95acda0e8404cddfda85232dfbfb28", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 311527, + "upload_time": "2020-11-27T20:45:14", + "upload_time_iso_8601": "2020-11-27T20:45:14.285114Z", + "url": "https://files.pythonhosted.org/packages/1b/49/a96f114bd4602cc335e5ea85a1b79c2e81a73494cf153057dfa1271ed506/filprofiler-0.13.0-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "6a6b5bbe2ea07a1a918c677747baf74b", + "sha256": "f9fc190ba1df112fd60c69db705ac52e6ad82eee827fc2cfaa1bb0e1b2d29756" + }, + "downloads": -1, + "filename": "filprofiler-0.13.0-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "6a6b5bbe2ea07a1a918c677747baf74b", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 1825007, + "upload_time": "2020-11-27T20:38:39", + "upload_time_iso_8601": "2020-11-27T20:38:39.332167Z", + "url": "https://files.pythonhosted.org/packages/66/d3/4279a42314f457726b9820457135e8032e75f7758c42db759fac8ba4e3ae/filprofiler-0.13.0-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.13.1": [ + { + "comment_text": "", + "digests": { + "md5": "0e15758123fd44a1fd32ae9c3058c596", + "sha256": "a7f2ab82af1e4e62eb69bbcc60deadfaa31886538821a0dfa80dc6902642d74f" + }, + "downloads": -1, + "filename": "filprofiler-0.13.1-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "0e15758123fd44a1fd32ae9c3058c596", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 311523, + "upload_time": "2020-11-30T16:18:48", + "upload_time_iso_8601": "2020-11-30T16:18:48.095681Z", + "url": "https://files.pythonhosted.org/packages/64/db/c7297d7fbffda0719aa6487d05a5727b8deee627d9324a654aa9dfd539b8/filprofiler-0.13.1-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "25ac9c99e6c3de298a27226ac614e57a", + "sha256": "bee5e3c265a35acd7ffb1e4d871909d7188b33bcbe52d11caa5847ef812bcbc5" + }, + "downloads": -1, + "filename": "filprofiler-0.13.1-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "25ac9c99e6c3de298a27226ac614e57a", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 1824902, + "upload_time": "2020-11-30T16:10:09", + "upload_time_iso_8601": "2020-11-30T16:10:09.604881Z", + "url": "https://files.pythonhosted.org/packages/70/89/6e67b018b55891f11fa97faed96590e3ffc4eda8446f0d5db9cb87313603/filprofiler-0.13.1-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "d835436085782fdaf6d63aa7ac509bec", + "sha256": "409790018b4f32b6030c666c9b7225aacf122ce19dcf03e1b9764e30c0ce1031" + }, + "downloads": -1, + "filename": "filprofiler-0.13.1-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "d835436085782fdaf6d63aa7ac509bec", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 311522, + "upload_time": "2020-11-30T16:27:49", + "upload_time_iso_8601": "2020-11-30T16:27:49.601618Z", + "url": "https://files.pythonhosted.org/packages/32/3a/23a1d280f8b09d5592ad073989bfd921de2ac5a85fb7fdda479b68cdfb56/filprofiler-0.13.1-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "1a920c439148ba51b584b28b2623901f", + "sha256": "00a65a72cfdcb7feca101dab747857aef05881730b3349423d9d311ddc9cd172" + }, + "downloads": -1, + "filename": "filprofiler-0.13.1-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "1a920c439148ba51b584b28b2623901f", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 1825531, + "upload_time": "2020-11-30T16:10:10", + "upload_time_iso_8601": "2020-11-30T16:10:10.719889Z", + "url": "https://files.pythonhosted.org/packages/b1/98/6b7b121a3e53381423b957cbd1ec0e0081deef8a4f1245cbf4ee024e4da5/filprofiler-0.13.1-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "63e05ea3196ec3cb819ad7ee87a2f328", + "sha256": "f3a4662417829b4d259f68ecde8d308db71cbc0ccdf7653d7653563545b7133a" + }, + "downloads": -1, + "filename": "filprofiler-0.13.1-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "63e05ea3196ec3cb819ad7ee87a2f328", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 311517, + "upload_time": "2020-11-30T16:20:57", + "upload_time_iso_8601": "2020-11-30T16:20:57.960285Z", + "url": "https://files.pythonhosted.org/packages/09/a4/1c20ddd592e9df8a5541c5b5fbc2a174dff6f4831b26471d816e5c8d8044/filprofiler-0.13.1-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "3ceee983288331b68edca532c8219642", + "sha256": "619057f67d8dcb985a3fc89b8543a841ae0a52fec7311b46ea37de161b7bfb9e" + }, + "downloads": -1, + "filename": "filprofiler-0.13.1-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "3ceee983288331b68edca532c8219642", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 1825081, + "upload_time": "2020-11-30T16:10:11", + "upload_time_iso_8601": "2020-11-30T16:10:11.776435Z", + "url": "https://files.pythonhosted.org/packages/76/9b/1bfebe49a2087c7027204209456a5fe45e9bc01befdba8829a848aabbb0c/filprofiler-0.13.1-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "00d9b99d02fca53af86906578742492f", + "sha256": "21d96a8336f24055710e80f0a417f36e35933f13b4f22d6e8bea1bd75c7001a8" + }, + "downloads": -1, + "filename": "filprofiler-0.13.1-cp39-cp39-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "00d9b99d02fca53af86906578742492f", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 311515, + "upload_time": "2020-11-30T16:23:10", + "upload_time_iso_8601": "2020-11-30T16:23:10.717648Z", + "url": "https://files.pythonhosted.org/packages/aa/be/36dc4cb53d5bd90fca2f39572d241ae75c16efcaad8d3babf26cfee6e379/filprofiler-0.13.1-cp39-cp39-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "581590f1354053bf88b29996da5c0cc7", + "sha256": "d38bd8af8c0b79e872e4fa36efc29dbd15b3c2201e0980d65c9577c7faed218b" + }, + "downloads": -1, + "filename": "filprofiler-0.13.1-cp39-cp39-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "581590f1354053bf88b29996da5c0cc7", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 1824724, + "upload_time": "2020-11-30T16:10:12", + "upload_time_iso_8601": "2020-11-30T16:10:12.755584Z", + "url": "https://files.pythonhosted.org/packages/5a/99/2206eadb3b1f9f86ce9ddda2f0ffb5fe3728a59db06a95939713adb99cb7/filprofiler-0.13.1-cp39-cp39-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.14.0": [ + { + "comment_text": "", + "digests": { + "md5": "d7e4012365d724db494e91c15238c158", + "sha256": "75c68bcdbba2a15124f3571a4f8061e2cfc63505eb215ce130d39075c3dabf4b" + }, + "downloads": -1, + "filename": "filprofiler-0.14.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "d7e4012365d724db494e91c15238c158", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 326813, + "upload_time": "2021-01-13T21:16:17", + "upload_time_iso_8601": "2021-01-13T21:16:17.829414Z", + "url": "https://files.pythonhosted.org/packages/e6/0b/5ae0df5cd1cc44ec5033ecd0707811031978a4734e7d8984571a4f4adaeb/filprofiler-0.14.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "cbb94c136ffc063a4f8ab865da164e3d", + "sha256": "23b59452f772cbc41ef057fe372abca419c81d598da05481e6bfd7216ea0ce67" + }, + "downloads": -1, + "filename": "filprofiler-0.14.0-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "cbb94c136ffc063a4f8ab865da164e3d", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2648846, + "upload_time": "2021-01-13T21:10:30", + "upload_time_iso_8601": "2021-01-13T21:10:30.496557Z", + "url": "https://files.pythonhosted.org/packages/6e/57/4f9765bfa6a298fa7f60b97ba32396c4f34adef17327d8d832ce0874d0d7/filprofiler-0.14.0-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "a63efaa9ca74060e6e0df3d7cf29ad68", + "sha256": "2010a4ca947d929cf616b3e10df6bf0366a976cb520d95721cf815f1b0d8e5eb" + }, + "downloads": -1, + "filename": "filprofiler-0.14.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "a63efaa9ca74060e6e0df3d7cf29ad68", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 326813, + "upload_time": "2021-01-13T21:10:33", + "upload_time_iso_8601": "2021-01-13T21:10:33.795147Z", + "url": "https://files.pythonhosted.org/packages/59/f5/9cb8a61ead41dcd7aaba8e5f59687640f8994d2a22ccb2e8251080e4e92b/filprofiler-0.14.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "fa82738b87ae21d6679d4d3ba1f62406", + "sha256": "3d70a97925043a02698d86da42d61a1aded720e5604c37d1fc9f2a80236278cd" + }, + "downloads": -1, + "filename": "filprofiler-0.14.0-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "fa82738b87ae21d6679d4d3ba1f62406", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2650080, + "upload_time": "2021-01-13T21:10:32", + "upload_time_iso_8601": "2021-01-13T21:10:32.269674Z", + "url": "https://files.pythonhosted.org/packages/43/22/d8c3521dca16d0969e65bb78407a8ff5b090966b3653c32fa160be3c0ef1/filprofiler-0.14.0-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "ab45a97653f3c8c652f9145dbbf8bbc1", + "sha256": "804ba965b3e06807562af6304d9e0f16a5ca3891b954dbff90ad207416c0bb34" + }, + "downloads": -1, + "filename": "filprofiler-0.14.0-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "ab45a97653f3c8c652f9145dbbf8bbc1", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 326806, + "upload_time": "2021-01-13T21:13:07", + "upload_time_iso_8601": "2021-01-13T21:13:07.411566Z", + "url": "https://files.pythonhosted.org/packages/6e/48/0b78f5039fd7435b1f57ac69dee0f44b8ad1d4dc1cbe19a14e0910c3ba2d/filprofiler-0.14.0-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "d9f7e8766d162af4b0d22e439587322b", + "sha256": "3d4f0d5e4bb4a7d7139004b4230eef19559405e7c0c21b829bb7ca79ef467ef1" + }, + "downloads": -1, + "filename": "filprofiler-0.14.0-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "d9f7e8766d162af4b0d22e439587322b", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2648929, + "upload_time": "2021-01-13T21:10:33", + "upload_time_iso_8601": "2021-01-13T21:10:33.946147Z", + "url": "https://files.pythonhosted.org/packages/55/49/bf2aed4d1026860dda6907a87469665d1d9a0e104914e41b3cd12ca86e0f/filprofiler-0.14.0-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "219fd0f3414e953d2aa986cb9d0bd517", + "sha256": "0dbd5b09791f1090b3fe0c4ff004faf32cb137018007743a18644b8e1b89dd93" + }, + "downloads": -1, + "filename": "filprofiler-0.14.0-cp39-cp39-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "219fd0f3414e953d2aa986cb9d0bd517", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 326805, + "upload_time": "2021-01-13T21:17:39", + "upload_time_iso_8601": "2021-01-13T21:17:39.497826Z", + "url": "https://files.pythonhosted.org/packages/17/01/22b634c1d1e5451a2cdf509be3e6d135fe66bd64905bd22352bcb2f4f559/filprofiler-0.14.0-cp39-cp39-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "b5219a0dc9edba85c30a7c283ad76f36", + "sha256": "d0327889f547beb7ac451a79c6e8dd5d15f8c09d63d86c140a5bb4bb64b9b47e" + }, + "downloads": -1, + "filename": "filprofiler-0.14.0-cp39-cp39-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "b5219a0dc9edba85c30a7c283ad76f36", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2648796, + "upload_time": "2021-01-13T21:10:36", + "upload_time_iso_8601": "2021-01-13T21:10:36.433005Z", + "url": "https://files.pythonhosted.org/packages/24/12/8ef1115297d59e4bc9d6e2c2c2564d02268bbca4fe25587f6e334535a2cb/filprofiler-0.14.0-cp39-cp39-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.14.1": [ + { + "comment_text": "", + "digests": { + "md5": "91113c0b6b369936fb6f7b71c2cb771d", + "sha256": "bda9036949775e934a646f9eeae615425eaf72164a36b25039cb00b926ed7231" + }, + "downloads": -1, + "filename": "filprofiler-0.14.1-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "91113c0b6b369936fb6f7b71c2cb771d", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 334465, + "upload_time": "2021-01-15T20:27:39", + "upload_time_iso_8601": "2021-01-15T20:27:39.138744Z", + "url": "https://files.pythonhosted.org/packages/f2/fb/1b1dfb5fb880c1544d770e5c41891867553c7f8566b8c292c9ca68efd900/filprofiler-0.14.1-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "c960c1b95ef91daee6545ed2d1264f49", + "sha256": "8ad561071d2cbfae3a299b47368c98766e31ae9fcf24bf240d1dc45ebb717528" + }, + "downloads": -1, + "filename": "filprofiler-0.14.1-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "c960c1b95ef91daee6545ed2d1264f49", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2661775, + "upload_time": "2021-01-15T20:28:12", + "upload_time_iso_8601": "2021-01-15T20:28:12.265433Z", + "url": "https://files.pythonhosted.org/packages/ed/ca/a57b532582eef8cf4a764fbf55cc14ae61a11ad3a5808f53b8822425f460/filprofiler-0.14.1-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "a952d873f7a04bf9af3919a360857fea", + "sha256": "44ab4104c850f73d32d1ae9b452e8e20c80ce7c190e4530f8177a12adb5b73f1" + }, + "downloads": -1, + "filename": "filprofiler-0.14.1-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "a952d873f7a04bf9af3919a360857fea", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 334467, + "upload_time": "2021-01-15T20:30:18", + "upload_time_iso_8601": "2021-01-15T20:30:18.066675Z", + "url": "https://files.pythonhosted.org/packages/fe/74/ce1a7e4f990ee93e7baf9426740a8cfbd57f276934b467ee0e8f4731c344/filprofiler-0.14.1-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "06a8170673adbfa76a78e6c592840da7", + "sha256": "c363e3da13a543f5ee957b2e4329001062e4596e92605c0a22ba1087b3ae9b84" + }, + "downloads": -1, + "filename": "filprofiler-0.14.1-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "06a8170673adbfa76a78e6c592840da7", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2662337, + "upload_time": "2021-01-15T20:28:13", + "upload_time_iso_8601": "2021-01-15T20:28:13.655782Z", + "url": "https://files.pythonhosted.org/packages/32/2c/ccdc5fe71c5b032d1db70c273836e7e3e04d63b10050813a8664ad0ab448/filprofiler-0.14.1-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "54aa638b356448be35216f9c1c3cdf07", + "sha256": "4900792e26ab9242343667c67bb7fa4aa45f6947c2e52355eada99831119becc" + }, + "downloads": -1, + "filename": "filprofiler-0.14.1-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "54aa638b356448be35216f9c1c3cdf07", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 334460, + "upload_time": "2021-01-15T20:32:15", + "upload_time_iso_8601": "2021-01-15T20:32:15.163924Z", + "url": "https://files.pythonhosted.org/packages/14/94/addeb5bf6200ba3097035b32926524afe34e8b112092b8a3280d6035a01f/filprofiler-0.14.1-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "f93488882cf069b0ce6fde4e5baae965", + "sha256": "347c99e658e1ea07965ea0120406ee0d579a34ab20373eab48bd6c5fea9740b7" + }, + "downloads": -1, + "filename": "filprofiler-0.14.1-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "f93488882cf069b0ce6fde4e5baae965", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2661731, + "upload_time": "2021-01-15T20:28:17", + "upload_time_iso_8601": "2021-01-15T20:28:17.543517Z", + "url": "https://files.pythonhosted.org/packages/45/3c/147dda469d4d35e3066d1f89f446a40cef6e1c230cca5f0d047d92b57168/filprofiler-0.14.1-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "13187bed28a11d9265353c15df622dca", + "sha256": "d64b130ab7885cc67344c07b002d463d4ece6b29d7848e46985670757a716841" + }, + "downloads": -1, + "filename": "filprofiler-0.14.1-cp39-cp39-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "13187bed28a11d9265353c15df622dca", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 334463, + "upload_time": "2021-01-15T20:26:52", + "upload_time_iso_8601": "2021-01-15T20:26:52.625846Z", + "url": "https://files.pythonhosted.org/packages/c0/3c/ffcf659e46cbdbabeb0b44079558df0c4cde10d0f892583503f1d2214a47/filprofiler-0.14.1-cp39-cp39-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "bf215a2b709b538ace669b237e3a47d2", + "sha256": "89bcd84190ae6431ea607f59003185a370c5f1b080f929453470116be1db61f9" + }, + "downloads": -1, + "filename": "filprofiler-0.14.1-cp39-cp39-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "bf215a2b709b538ace669b237e3a47d2", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2661584, + "upload_time": "2021-01-15T20:28:19", + "upload_time_iso_8601": "2021-01-15T20:28:19.194739Z", + "url": "https://files.pythonhosted.org/packages/e0/69/ce982750de0aec2a3f032bc395660238b4a87b7d53436925cd8f19d33d57/filprofiler-0.14.1-cp39-cp39-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.15.0": [ + { + "comment_text": "", + "digests": { + "md5": "3ed120460dbe447cfdb0f5084cd3c8fb", + "sha256": "b3823a0904519a67cb0bba7d35ac0908222c2d9accfe125348c298251ed257e3" + }, + "downloads": -1, + "filename": "filprofiler-0.15.0-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "3ed120460dbe447cfdb0f5084cd3c8fb", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2665604, + "upload_time": "2021-02-18T19:12:51", + "upload_time_iso_8601": "2021-02-18T19:12:51.507588Z", + "url": "https://files.pythonhosted.org/packages/2a/82/f5be62cb7e9efe1c676c09196057e7402beebded73d38c475a2b904b0021/filprofiler-0.15.0-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "53302597c9d82f08ef1246dcef15f423", + "sha256": "56e4959814b797ba926418d734c7616630a5657899a7607101b96e80715e56d4" + }, + "downloads": -1, + "filename": "filprofiler-0.15.0-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "53302597c9d82f08ef1246dcef15f423", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2665890, + "upload_time": "2021-02-18T19:12:53", + "upload_time_iso_8601": "2021-02-18T19:12:53.003484Z", + "url": "https://files.pythonhosted.org/packages/c2/18/9395855731915407406de4c12f55f69c449f16097bfb7349bfe1851b924b/filprofiler-0.15.0-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "da8af87ba9285ed32ea4e59d740282fd", + "sha256": "501551707a8e505088a8c6858a945665d2c187393a06cecadc98eb312a2b7acc" + }, + "downloads": -1, + "filename": "filprofiler-0.15.0-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "da8af87ba9285ed32ea4e59d740282fd", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2665584, + "upload_time": "2021-02-18T19:12:54", + "upload_time_iso_8601": "2021-02-18T19:12:54.098619Z", + "url": "https://files.pythonhosted.org/packages/61/bf/4fd94a5b32c5255dbe7edbcd01e26de03e7b173434833a111830cc0e353c/filprofiler-0.15.0-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "21f93e71895b302066708d59947e1153", + "sha256": "cf15fb951a812d0b8c91df645e4904424b307442e9238f04d87d5adb17757006" + }, + "downloads": -1, + "filename": "filprofiler-0.15.0-cp39-cp39-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "21f93e71895b302066708d59947e1153", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2665361, + "upload_time": "2021-02-18T19:12:55", + "upload_time_iso_8601": "2021-02-18T19:12:55.218298Z", + "url": "https://files.pythonhosted.org/packages/4c/1c/01f448f48f50d5c643f5ac69693868bd2ade0d58e47f9409ebf486532320/filprofiler-0.15.0-cp39-cp39-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.16.0": [ + { + "comment_text": "", + "digests": { + "md5": "b4003d21aa3336038ed2f259fc425ba3", + "sha256": "b1d4ab26d04f7c2b0bb7a9f569ad8358e447f918ad691726eb393103c1ef321e" + }, + "downloads": -1, + "filename": "filprofiler-0.16.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "b4003d21aa3336038ed2f259fc425ba3", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 356397, + "upload_time": "2021-02-25T02:48:57", + "upload_time_iso_8601": "2021-02-25T02:48:57.284215Z", + "url": "https://files.pythonhosted.org/packages/11/62/d1b9fcbd39ff43324c77542093e72f92637169dfb601c1662249d04a8c93/filprofiler-0.16.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "ea344096a0fdce230f525d98cbb7d801", + "sha256": "a671e0bfaf32ba525f02889cb3d8720f1238a2b07e82be82b31b5cda54f198de" + }, + "downloads": -1, + "filename": "filprofiler-0.16.0-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "ea344096a0fdce230f525d98cbb7d801", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2668397, + "upload_time": "2021-02-25T02:41:39", + "upload_time_iso_8601": "2021-02-25T02:41:39.000313Z", + "url": "https://files.pythonhosted.org/packages/b4/d7/97ce0d0455cdd76202c9305f55de5fb5c6dbd4b6f86b1d48e6c55821f27d/filprofiler-0.16.0-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "67856d21d1a7dbdbfae8627a647d4651", + "sha256": "6889d27c6b3874021f9d33c0f612977cf5f247cd8781a60ba229366796309000" + }, + "downloads": -1, + "filename": "filprofiler-0.16.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "67856d21d1a7dbdbfae8627a647d4651", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 356398, + "upload_time": "2021-02-25T02:50:51", + "upload_time_iso_8601": "2021-02-25T02:50:51.861456Z", + "url": "https://files.pythonhosted.org/packages/d2/d9/cf8fc9d11850fd33e95702a6c7ac6ff94912d39f3ef2edecb2416cd0f4dd/filprofiler-0.16.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "c5aa9619c0a0c17d9bfc38233c8981d0", + "sha256": "53677351bac0a419f66e7bc8f33c41e7012026dbcc3b1287563ac138fb43e27e" + }, + "downloads": -1, + "filename": "filprofiler-0.16.0-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "c5aa9619c0a0c17d9bfc38233c8981d0", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2669268, + "upload_time": "2021-02-25T02:41:40", + "upload_time_iso_8601": "2021-02-25T02:41:40.505955Z", + "url": "https://files.pythonhosted.org/packages/8c/91/399bb2ed2f360afcc4c9ccf7c0dbbdaf8c6a00f5dbe63f94445bb8322e65/filprofiler-0.16.0-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "be8baa8c56183c2af08dbd8778ec9f70", + "sha256": "ef3759a2ca89eba1b7585119e61d9f358ef2494cb10d5287b06fc8626afd1b65" + }, + "downloads": -1, + "filename": "filprofiler-0.16.0-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "be8baa8c56183c2af08dbd8778ec9f70", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 356391, + "upload_time": "2021-02-25T02:56:24", + "upload_time_iso_8601": "2021-02-25T02:56:24.500858Z", + "url": "https://files.pythonhosted.org/packages/ea/40/eab498523ee3e88f3c7c65a645a4d7dcb5d571e0c9c82ce5dae2620d395f/filprofiler-0.16.0-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "8001710d328d0611489088383b386d1e", + "sha256": "bd5b96e649474bd052f510286e3f5435b6519f4992d7831c6d68f309c7ce72a2" + }, + "downloads": -1, + "filename": "filprofiler-0.16.0-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "8001710d328d0611489088383b386d1e", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2668351, + "upload_time": "2021-02-25T02:41:41", + "upload_time_iso_8601": "2021-02-25T02:41:41.614665Z", + "url": "https://files.pythonhosted.org/packages/d9/32/7b21fe73405881b31a09270daca77ab3a27530465b2e67edcef2a6ffdf21/filprofiler-0.16.0-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "62f5db5cfbaf9673b9ff07776f6765a3", + "sha256": "9bebea057cff68bde3d50d57c52172700660d35d9ee9c03af72fbc86cc0b8752" + }, + "downloads": -1, + "filename": "filprofiler-0.16.0-cp39-cp39-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "62f5db5cfbaf9673b9ff07776f6765a3", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 356391, + "upload_time": "2021-02-25T02:58:07", + "upload_time_iso_8601": "2021-02-25T02:58:07.712786Z", + "url": "https://files.pythonhosted.org/packages/27/f7/499f9645d36e26b3f241c6ad4978d225e18aee0a59fec85014e44e39ee47/filprofiler-0.16.0-cp39-cp39-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "9faf3bc2775ca22e72802c9841988be0", + "sha256": "839835c95b8b1e8558485942d2eab18a3247f8803bf1b49d594645b780cd7f37" + }, + "downloads": -1, + "filename": "filprofiler-0.16.0-cp39-cp39-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "9faf3bc2775ca22e72802c9841988be0", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2668187, + "upload_time": "2021-02-25T02:41:43", + "upload_time_iso_8601": "2021-02-25T02:41:43.029886Z", + "url": "https://files.pythonhosted.org/packages/dc/31/58ae44b8dfee3f07630b82209902d3ad0010251f820fa75e0d1b5cc4ddc2/filprofiler-0.16.0-cp39-cp39-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.17.0": [ + { + "comment_text": "", + "digests": { + "md5": "ae6f69cc15522b59b7db8694f1c1e5e3", + "sha256": "0e561faec981d28e6daaaec05e6b7fe8645dc2e9c04f3bdaa347231cffdf72b9" + }, + "downloads": -1, + "filename": "filprofiler-0.17.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "ae6f69cc15522b59b7db8694f1c1e5e3", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 357307, + "upload_time": "2021-03-02T12:01:14", + "upload_time_iso_8601": "2021-03-02T12:01:14.972742Z", + "url": "https://files.pythonhosted.org/packages/3c/23/e0dc5fabae0ae6a00119ad4a029db065c056e775aa2ceee76ffad2b78a63/filprofiler-0.17.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "cafcf42fb9dc9f0ecd2b601ba2fa9ed0", + "sha256": "6daa33db857a7c3c7935291e862aaf8e323187ac1bf0c0b0e9c731d1809ee281" + }, + "downloads": -1, + "filename": "filprofiler-0.17.0-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "cafcf42fb9dc9f0ecd2b601ba2fa9ed0", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2669088, + "upload_time": "2021-03-02T11:53:42", + "upload_time_iso_8601": "2021-03-02T11:53:42.823023Z", + "url": "https://files.pythonhosted.org/packages/1e/3d/57826769f86e54007ad20df724b4bc8d2bd3e22128a0b106a1bf034d353c/filprofiler-0.17.0-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "182b6a9fcbca635b2cc40e2ee7e99fb9", + "sha256": "be42397b9831382e44dc5ea492b208ab6dfbccfa95894330776883eb65d54431" + }, + "downloads": -1, + "filename": "filprofiler-0.17.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "182b6a9fcbca635b2cc40e2ee7e99fb9", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 357309, + "upload_time": "2021-03-02T12:06:51", + "upload_time_iso_8601": "2021-03-02T12:06:51.935195Z", + "url": "https://files.pythonhosted.org/packages/f8/60/3bd1d4d5ea88e7f7ba065cc30f3e867a8694f9366efc77d00c208fe22b86/filprofiler-0.17.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "e25604463dd691d80993e1634f975983", + "sha256": "d8c943e1391e854de61b916f96918ce6ff2f502465fab4b08019a838eff0be5e" + }, + "downloads": -1, + "filename": "filprofiler-0.17.0-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "e25604463dd691d80993e1634f975983", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2669826, + "upload_time": "2021-03-02T11:53:44", + "upload_time_iso_8601": "2021-03-02T11:53:44.363532Z", + "url": "https://files.pythonhosted.org/packages/39/fd/f9b07ea021ad0de8b1b460e16fdc6cef488e3d32ead0adac166fef0f0908/filprofiler-0.17.0-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "f55a23364e7e69dd8aebe35a645f0a5c", + "sha256": "03a4c04e534b06f20168c08eb8f08465e3194080654e47f03596b804a691a476" + }, + "downloads": -1, + "filename": "filprofiler-0.17.0-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "f55a23364e7e69dd8aebe35a645f0a5c", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 357302, + "upload_time": "2021-03-02T12:03:33", + "upload_time_iso_8601": "2021-03-02T12:03:33.920865Z", + "url": "https://files.pythonhosted.org/packages/2f/b5/0df04f6b5c0b9c45fe88587ed88b38e5d83111fec7ebcc59b8f353f6c58f/filprofiler-0.17.0-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "ebd5ecd97a3e634afbd685170048e0e8", + "sha256": "3ae9215bd803f426e03e8fd360d996c502cdf85db99ee0c7e5a1b103cb295584" + }, + "downloads": -1, + "filename": "filprofiler-0.17.0-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "ebd5ecd97a3e634afbd685170048e0e8", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2668968, + "upload_time": "2021-03-02T11:53:45", + "upload_time_iso_8601": "2021-03-02T11:53:45.448389Z", + "url": "https://files.pythonhosted.org/packages/6e/53/0201dfdc711d247338427c5455fd43b7d3ac376cecc22260e6617d30918f/filprofiler-0.17.0-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "41bfb12323a7d8a40dd54e8044eb9c9f", + "sha256": "dacfb40d467a44ace30c6d7ec14d33cbff736ac39211eaa18dd5b5f17594e415" + }, + "downloads": -1, + "filename": "filprofiler-0.17.0-cp39-cp39-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "41bfb12323a7d8a40dd54e8044eb9c9f", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 357303, + "upload_time": "2021-03-02T12:07:33", + "upload_time_iso_8601": "2021-03-02T12:07:33.590179Z", + "url": "https://files.pythonhosted.org/packages/26/42/aaf3ca2957e0881fbe4f1957546f1a158cb6fa586180ab9eb7353a1f39fb/filprofiler-0.17.0-cp39-cp39-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "2317a9546200972d6dcb079a19ef2094", + "sha256": "2333d710982edf7e07d90c6d044c24acc67dbc0b366451295580dd64d9ade27a" + }, + "downloads": -1, + "filename": "filprofiler-0.17.0-cp39-cp39-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "2317a9546200972d6dcb079a19ef2094", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2668770, + "upload_time": "2021-03-02T11:53:47", + "upload_time_iso_8601": "2021-03-02T11:53:47.032636Z", + "url": "https://files.pythonhosted.org/packages/2e/74/021ae26f75fef6386d7a460c6a3600a206439fd45c65bc2b1a07e434a765/filprofiler-0.17.0-cp39-cp39-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.2.0": [ + { + "comment_text": "", + "digests": { + "md5": "193fde3732010d6583303211259ef838", + "sha256": "94cacabeaf1b8e52e1985f795520bf197611a9ed782905e42ca592dbd946927d" + }, + "downloads": -1, + "filename": "filprofiler-0.2.0-cp36-cp36m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "193fde3732010d6583303211259ef838", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 503291, + "upload_time": "2020-05-15T18:30:00", + "upload_time_iso_8601": "2020-05-15T18:30:00.997048Z", + "url": "https://files.pythonhosted.org/packages/4c/05/4405eda01f7bde4b2f23b1f926544f408749b4405ca55192fd337dc0ffd4/filprofiler-0.2.0-cp36-cp36m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "afa58552ebeaf46d6965ff87288e3d30", + "sha256": "c80e2200b5aaa66ad28b35057257d400dda0e18af8054df778a76d1118fa2768" + }, + "downloads": -1, + "filename": "filprofiler-0.2.0-cp37-cp37m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "afa58552ebeaf46d6965ff87288e3d30", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 504011, + "upload_time": "2020-05-15T18:30:37", + "upload_time_iso_8601": "2020-05-15T18:30:37.249260Z", + "url": "https://files.pythonhosted.org/packages/fa/49/2f64acb096f58e0d1dd77f5ed05d0e3d559d25cc404a41c545cfcf3d244f/filprofiler-0.2.0-cp37-cp37m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "6c675f51addcf1fe458c920aa2612e39", + "sha256": "19ac6a589b161b52d7201940148c27726d75ef157ec3125c164e9959b2e19eb9" + }, + "downloads": -1, + "filename": "filprofiler-0.2.0-cp38-cp38-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "6c675f51addcf1fe458c920aa2612e39", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 503388, + "upload_time": "2020-05-15T18:30:39", + "upload_time_iso_8601": "2020-05-15T18:30:39.382845Z", + "url": "https://files.pythonhosted.org/packages/98/70/97c002f90a476d3d73b710fcc14f9c3ada24838076adb8cb962faaf1d8b9/filprofiler-0.2.0-cp38-cp38-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.2.1": [ + { + "comment_text": "", + "digests": { + "md5": "844dc6a4c0100fba630083e848c7ab67", + "sha256": "8937f12a0045c2bddb63c7a2c6cdf00cf9729fcb08e0c3836fdbd55a9abc3efd" + }, + "downloads": -1, + "filename": "filprofiler-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "844dc6a4c0100fba630083e848c7ab67", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 503866, + "upload_time": "2020-05-15T18:44:37", + "upload_time_iso_8601": "2020-05-15T18:44:37.426744Z", + "url": "https://files.pythonhosted.org/packages/24/f4/5ede0847b58c4a19a8dd2e1e26f77741668a50f47f9405e88d5f49c0c9d9/filprofiler-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "6a018fadcf46f6ce79d5a29f5a4c6521", + "sha256": "3de5d69ad381168b26143d6630b9ae3cd1f6cd772cbfb08678daa943941d40d6" + }, + "downloads": -1, + "filename": "filprofiler-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "6a018fadcf46f6ce79d5a29f5a4c6521", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 504585, + "upload_time": "2020-05-15T18:44:40", + "upload_time_iso_8601": "2020-05-15T18:44:40.056300Z", + "url": "https://files.pythonhosted.org/packages/17/c5/ea2f106eb47260aaa5fb2e72f477e1d8cc76fc3ddc226e00dcf1ff17420e/filprofiler-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "6819803d8230b207958c6f08be6c4dc6", + "sha256": "7430be563a9417560f8ea3de39bd6b196e7cbf19d3279b0551d49b69ef5cc5fe" + }, + "downloads": -1, + "filename": "filprofiler-0.2.1-cp38-cp38-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "6819803d8230b207958c6f08be6c4dc6", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 503961, + "upload_time": "2020-05-15T18:44:42", + "upload_time_iso_8601": "2020-05-15T18:44:42.346978Z", + "url": "https://files.pythonhosted.org/packages/4c/af/be2fb302805f512e2385012002907ccf9e1285eb508770517baa54dc5d2c/filprofiler-0.2.1-cp38-cp38-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.2.2": [ + { + "comment_text": "", + "digests": { + "md5": "d823d4d64350b573e12d709fae6ada01", + "sha256": "ba7ec9f9ed253befa0f5f8b76b1a94efdc0e4cb7e5bbd049e52d312532edb735" + }, + "downloads": -1, + "filename": "filprofiler-0.2.2-cp36-cp36m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "d823d4d64350b573e12d709fae6ada01", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 503892, + "upload_time": "2020-05-15T18:46:25", + "upload_time_iso_8601": "2020-05-15T18:46:25.455221Z", + "url": "https://files.pythonhosted.org/packages/d3/30/2304dee557c9fc09aebece27234f59e1c446922231456788d6659ab64ab6/filprofiler-0.2.2-cp36-cp36m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "8e693c3845b02b48316e8cc8d0539f63", + "sha256": "d954700ff9b42aa28523d022be4556dd4bc36362961291599ffbec5675f90d52" + }, + "downloads": -1, + "filename": "filprofiler-0.2.2-cp37-cp37m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "8e693c3845b02b48316e8cc8d0539f63", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 504614, + "upload_time": "2020-05-15T18:46:27", + "upload_time_iso_8601": "2020-05-15T18:46:27.504907Z", + "url": "https://files.pythonhosted.org/packages/95/02/64dc8b60e051ef3c411aecc1977e562706df1ced1075292d870680bb66fe/filprofiler-0.2.2-cp37-cp37m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "87c19c2a51422330ffa3f2c10969a9fd", + "sha256": "d06624fbf171e6a574877b730d6184d2ebcf97d19f6fdaab68afa2f31be26442" + }, + "downloads": -1, + "filename": "filprofiler-0.2.2-cp38-cp38-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "87c19c2a51422330ffa3f2c10969a9fd", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 503990, + "upload_time": "2020-05-15T18:46:29", + "upload_time_iso_8601": "2020-05-15T18:46:29.598178Z", + "url": "https://files.pythonhosted.org/packages/b6/46/f2067619e81f3885466c42ce7b852f6d3e0e9278f3815095b79b65d0180a/filprofiler-0.2.2-cp38-cp38-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.2.3": [ + { + "comment_text": "", + "digests": { + "md5": "324c46d4cbe634d02b6ad06482be1c20", + "sha256": "464930ef18b4bc61328145479fc0685101ed4b013e6914ac82ea5429a9b1ba32" + }, + "downloads": -1, + "filename": "filprofiler-0.2.3-cp36-cp36m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "324c46d4cbe634d02b6ad06482be1c20", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 503971, + "upload_time": "2020-05-18T14:48:43", + "upload_time_iso_8601": "2020-05-18T14:48:43.451328Z", + "url": "https://files.pythonhosted.org/packages/ed/d7/140da0075114de3b03d1200d732ba2de9b7ded09e903156715858c64f004/filprofiler-0.2.3-cp36-cp36m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "16314289c272807a6c3592e9a500a9eb", + "sha256": "c140dc4c12a9a23c08fd8bef15d2f3049f7581e1f98dc442591f14a7184afb3a" + }, + "downloads": -1, + "filename": "filprofiler-0.2.3-cp37-cp37m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "16314289c272807a6c3592e9a500a9eb", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 504694, + "upload_time": "2020-05-18T14:48:45", + "upload_time_iso_8601": "2020-05-18T14:48:45.818511Z", + "url": "https://files.pythonhosted.org/packages/75/7a/63e205b0d99f61f07264d6c5e91bbe940eb9cc4603eb859a2ed2ede39787/filprofiler-0.2.3-cp37-cp37m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "47c079cbcbd92162d95d9a3af70ee318", + "sha256": "eae2ff5e6426f9364b6ed4f0f6d0af321ac5ce9ff8739568b7baab4d8cd48940" + }, + "downloads": -1, + "filename": "filprofiler-0.2.3-cp38-cp38-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "47c079cbcbd92162d95d9a3af70ee318", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 504066, + "upload_time": "2020-05-18T14:48:47", + "upload_time_iso_8601": "2020-05-18T14:48:47.781172Z", + "url": "https://files.pythonhosted.org/packages/3c/1c/8198c331d43aabe05fc5ec235c12e7e935c66cd869867c647393f2b2df2a/filprofiler-0.2.3-cp38-cp38-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.3.0": [ + { + "comment_text": "", + "digests": { + "md5": "38bf47202932c0cbe4c603faae5d8982", + "sha256": "508d035aba5f968810ca192e92f768693941eae571dff2f4ec429fe778a42880" + }, + "downloads": -1, + "filename": "filprofiler-0.3.0-cp36-cp36m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "38bf47202932c0cbe4c603faae5d8982", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 504782, + "upload_time": "2020-05-21T15:48:15", + "upload_time_iso_8601": "2020-05-21T15:48:15.001668Z", + "url": "https://files.pythonhosted.org/packages/f3/45/7ef219f2af461bae4018bcbcac07b07a905ae7cf465dd3ef1af5ee046b88/filprofiler-0.3.0-cp36-cp36m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "1d742adc92e6e2b96d74579b9809a1f5", + "sha256": "533e1d1460a40529d1fbdb13e1486694cf9a83e09f2ba3512b06a60c55449be2" + }, + "downloads": -1, + "filename": "filprofiler-0.3.0-cp37-cp37m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "1d742adc92e6e2b96d74579b9809a1f5", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 505504, + "upload_time": "2020-05-21T15:48:17", + "upload_time_iso_8601": "2020-05-21T15:48:17.066783Z", + "url": "https://files.pythonhosted.org/packages/03/e7/68fb36314e94a9df6b58de3a024cd9678c88cd0fe04204c1e02a9cfec6bf/filprofiler-0.3.0-cp37-cp37m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "684ac2532ace1f2533b256249f9f9d2d", + "sha256": "2c9ecc244fecc83a119d32a17d41e323e3b95ff9e22615f365502c4d8bc7d187" + }, + "downloads": -1, + "filename": "filprofiler-0.3.0-cp38-cp38-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "684ac2532ace1f2533b256249f9f9d2d", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 504874, + "upload_time": "2020-05-21T15:48:19", + "upload_time_iso_8601": "2020-05-21T15:48:19.238094Z", + "url": "https://files.pythonhosted.org/packages/20/3e/09e7576d6661a6804d4d49edca34d7de8652b3f4544b6bf40172864d2ed5/filprofiler-0.3.0-cp38-cp38-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.3.1": [ + { + "comment_text": "", + "digests": { + "md5": "e562452f32c89ab15b9240acd1d0529b", + "sha256": "bc57fc472c3ae25f6eb7ac7a4332377238dd563edbfb8d769f044678016059ea" + }, + "downloads": -1, + "filename": "filprofiler-0.3.1-cp36-cp36m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "e562452f32c89ab15b9240acd1d0529b", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 504925, + "upload_time": "2020-05-25T21:05:15", + "upload_time_iso_8601": "2020-05-25T21:05:15.015942Z", + "url": "https://files.pythonhosted.org/packages/89/3d/b51744b4547cdd7325538a14702d5476e2c48474b0202dad025f1872b868/filprofiler-0.3.1-cp36-cp36m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "db7ff5088be516610ea72a92be2b970d", + "sha256": "46e0047f3064079b46ef31a9f12b4f91a9ed06bbdac82d2881874f835abd2e5c" + }, + "downloads": -1, + "filename": "filprofiler-0.3.1-cp37-cp37m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "db7ff5088be516610ea72a92be2b970d", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 505649, + "upload_time": "2020-05-25T21:05:17", + "upload_time_iso_8601": "2020-05-25T21:05:17.705557Z", + "url": "https://files.pythonhosted.org/packages/29/90/61603b813469f62fb66afb1dd482f9a354b3eea7ca3514b231a78bca09b7/filprofiler-0.3.1-cp37-cp37m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "b9813bff04e8b2e5723ee9de902644e7", + "sha256": "74aaef87d405b855ea2deff02da03d43a4eecb9f60b914d277c0f2a49d8aa8c2" + }, + "downloads": -1, + "filename": "filprofiler-0.3.1-cp38-cp38-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "b9813bff04e8b2e5723ee9de902644e7", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 505018, + "upload_time": "2020-05-25T21:05:20", + "upload_time_iso_8601": "2020-05-25T21:05:20.155573Z", + "url": "https://files.pythonhosted.org/packages/7c/ef/fd6c11a95448cf8cc7332d08ed488edea2ba35493d839278ccb900fe5bd0/filprofiler-0.3.1-cp38-cp38-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.3.2": [ + { + "comment_text": "", + "digests": { + "md5": "1ea2b54cabd01aee98261386f7d6a581", + "sha256": "22d8f5e8eb444f54d626eba1c1df4f50fe4c850dd74413bbfaed9854089015f3" + }, + "downloads": -1, + "filename": "filprofiler-0.3.2-cp36-cp36m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "1ea2b54cabd01aee98261386f7d6a581", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 504634, + "upload_time": "2020-06-04T15:34:57", + "upload_time_iso_8601": "2020-06-04T15:34:57.667394Z", + "url": "https://files.pythonhosted.org/packages/0a/54/ea35a9d6fbda451e8f5ba6bebc07e8b0f824b37d0900b40aa053376a8571/filprofiler-0.3.2-cp36-cp36m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "659afa4ae3318fb7a504c20b569c0e88", + "sha256": "436ceb1189a5c26f869a8e962703170f3c4c9ce623b62a67e148bd5f5d19e1ba" + }, + "downloads": -1, + "filename": "filprofiler-0.3.2-cp37-cp37m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "659afa4ae3318fb7a504c20b569c0e88", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 505349, + "upload_time": "2020-06-04T15:34:59", + "upload_time_iso_8601": "2020-06-04T15:34:59.566880Z", + "url": "https://files.pythonhosted.org/packages/be/37/f123ed876a42302fcd137e141e8684fdadf7b29d21ab473375e8f850a75c/filprofiler-0.3.2-cp37-cp37m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "60a5944200ae9659407e925d02182672", + "sha256": "0ba952587e31091f0f22d83b54233e3ee44000074059fa8a660818ed78d20486" + }, + "downloads": -1, + "filename": "filprofiler-0.3.2-cp38-cp38-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "60a5944200ae9659407e925d02182672", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 504776, + "upload_time": "2020-06-04T15:35:01", + "upload_time_iso_8601": "2020-06-04T15:35:01.881787Z", + "url": "https://files.pythonhosted.org/packages/02/5e/0830a3a07528e11d935d4a2fc9e445563969c109cbc5534e750519c3f9de/filprofiler-0.3.2-cp38-cp38-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.3.3": [ + { + "comment_text": "", + "digests": { + "md5": "d6ebbeeac1dc7833ceeafc9fe6f964aa", + "sha256": "610915e5230912b06346795730089fca3ea285bbd2eec7f88c7aec28bf83f659" + }, + "downloads": -1, + "filename": "filprofiler-0.3.3-cp36-cp36m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "d6ebbeeac1dc7833ceeafc9fe6f964aa", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 505249, + "upload_time": "2020-06-10T20:02:07", + "upload_time_iso_8601": "2020-06-10T20:02:07.763291Z", + "url": "https://files.pythonhosted.org/packages/8d/a7/66e8f4430f57dbec372743174fc1ab2e32ee4b5e54433bcd9eefdd2fc507/filprofiler-0.3.3-cp36-cp36m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "f199d5f664e238c9a5f6105a3e8d2e20", + "sha256": "cb1a92fb6e9deff34006a5478b0a8deffc1bbff989f44f9c0e1e839f78a28747" + }, + "downloads": -1, + "filename": "filprofiler-0.3.3-cp37-cp37m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "f199d5f664e238c9a5f6105a3e8d2e20", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 505913, + "upload_time": "2020-06-10T20:02:09", + "upload_time_iso_8601": "2020-06-10T20:02:09.790262Z", + "url": "https://files.pythonhosted.org/packages/bd/ad/3febb1050c261bac1c1512fbad495046ca653b91798aa405c4afe61d3cf2/filprofiler-0.3.3-cp37-cp37m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "d0f8b2471f1165be5bd5e5b0ce5574a6", + "sha256": "00c2765f503d669c0ef8b12695698d7999417488f34c74b1d1676cb94c8f46d8" + }, + "downloads": -1, + "filename": "filprofiler-0.3.3-cp38-cp38-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "d0f8b2471f1165be5bd5e5b0ce5574a6", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 505382, + "upload_time": "2020-06-10T20:02:11", + "upload_time_iso_8601": "2020-06-10T20:02:11.790805Z", + "url": "https://files.pythonhosted.org/packages/25/8a/caeeab2cd435930c6170e95ee362172f9545210310eeaaa5208a048f7827/filprofiler-0.3.3-cp38-cp38-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.4.0": [ + { + "comment_text": "", + "digests": { + "md5": "5776089d17db36f0a17b0e062c9f8d9f", + "sha256": "8a6e2564e161d232546d599992b2a55645dc9d5e083b7ccc8d89251f8a60bb16" + }, + "downloads": -1, + "filename": "filprofiler-0.4.0-cp36-cp36m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "5776089d17db36f0a17b0e062c9f8d9f", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 508848, + "upload_time": "2020-06-15T13:44:32", + "upload_time_iso_8601": "2020-06-15T13:44:32.003657Z", + "url": "https://files.pythonhosted.org/packages/d9/ae/a39fc6b1d658518f200c02d948dced23abb632f5b208f7eb5de18c6a343d/filprofiler-0.4.0-cp36-cp36m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "cf0c2fdfb1469ad7b2e3bb22171d9c95", + "sha256": "b2620302fccab2a33ef7c642538a8e625b15bd7aaefd5f16ec9890062ff3c79a" + }, + "downloads": -1, + "filename": "filprofiler-0.4.0-cp37-cp37m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "cf0c2fdfb1469ad7b2e3bb22171d9c95", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 509357, + "upload_time": "2020-06-15T13:44:34", + "upload_time_iso_8601": "2020-06-15T13:44:34.058785Z", + "url": "https://files.pythonhosted.org/packages/c1/5a/56ce7075931757c4b25da77eece082ca9f2ae1417a7e0a15d3d8a2263dba/filprofiler-0.4.0-cp37-cp37m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "18b461ba99f204b583baa55167d903d5", + "sha256": "b8dc420e34cf4c139df4163e4cded62c28925655867c6f918f54f0af9b0a02f1" + }, + "downloads": -1, + "filename": "filprofiler-0.4.0-cp38-cp38-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "18b461ba99f204b583baa55167d903d5", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 508933, + "upload_time": "2020-06-15T13:44:36", + "upload_time_iso_8601": "2020-06-15T13:44:36.143173Z", + "url": "https://files.pythonhosted.org/packages/f5/aa/5025a2c05307f40747b0800df0494f7abc7cef11bc41f9dbc9e4666376d8/filprofiler-0.4.0-cp38-cp38-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.5.3": [ + { + "comment_text": "", + "digests": { + "md5": "628c503deb1d5f8eff1565b0ed16c08b", + "sha256": "0e26f9f195cbba20a5e11b7723c4bf00c72603e3c94d5b163e9c316253e2c839" + }, + "downloads": -1, + "filename": "filprofiler-0.5.3-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "628c503deb1d5f8eff1565b0ed16c08b", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 263661, + "upload_time": "2020-06-22T19:18:31", + "upload_time_iso_8601": "2020-06-22T19:18:31.317598Z", + "url": "https://files.pythonhosted.org/packages/7c/74/4538545e2e64690fb58aba4ee6c8133d79aaefd99260af2a0e58127d2cb0/filprofiler-0.5.3-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "9520405c20d80216b3381c4621b306df", + "sha256": "88c491e32f2db715b2edeff38aada9074ba431e90cd749de0696abf45e55706c" + }, + "downloads": -1, + "filename": "filprofiler-0.5.3-cp36-cp36m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "9520405c20d80216b3381c4621b306df", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 551409, + "upload_time": "2020-06-22T19:18:12", + "upload_time_iso_8601": "2020-06-22T19:18:12.461006Z", + "url": "https://files.pythonhosted.org/packages/fa/42/333ea3ead74d3b9442fc26ae2d4ccdc4f1be19f7e9f70c8b7e5c3c5a447f/filprofiler-0.5.3-cp36-cp36m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "1c2d03eb52b7c45e96ce2e815c8e8e1e", + "sha256": "2ba80b2d06b83ec293c392212e7e4f384e3beb61acffdfe794e36fa8251f7623" + }, + "downloads": -1, + "filename": "filprofiler-0.5.3-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "1c2d03eb52b7c45e96ce2e815c8e8e1e", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 263661, + "upload_time": "2020-06-22T19:19:15", + "upload_time_iso_8601": "2020-06-22T19:19:15.289125Z", + "url": "https://files.pythonhosted.org/packages/d0/d1/7692fcc4d42f8dad585f03ee3ad1e8eff011c1780e8a413f89155ff28435/filprofiler-0.5.3-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "91d3a203ff92a0b9b1128aabe2ac8cf2", + "sha256": "bf9ca1b671135deb7fa847c137930ab9ff88bdee28b16798536e42f235b84a06" + }, + "downloads": -1, + "filename": "filprofiler-0.5.3-cp37-cp37m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "91d3a203ff92a0b9b1128aabe2ac8cf2", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 552171, + "upload_time": "2020-06-22T19:18:14", + "upload_time_iso_8601": "2020-06-22T19:18:14.108847Z", + "url": "https://files.pythonhosted.org/packages/b0/fc/1e41aa3ec610dd5a6a5119439014c554566ffa83ec11855481b434ea3a1d/filprofiler-0.5.3-cp37-cp37m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "bcff61c18200377c4d62f4f2327ac329", + "sha256": "d66bf93d0779ba2870b30de64057add827848620098dc41259cee26d3a130355" + }, + "downloads": -1, + "filename": "filprofiler-0.5.3-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "bcff61c18200377c4d62f4f2327ac329", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 263655, + "upload_time": "2020-06-22T19:22:20", + "upload_time_iso_8601": "2020-06-22T19:22:20.021468Z", + "url": "https://files.pythonhosted.org/packages/1d/da/993d978d3d148f71a2d69495db4a206b66dbe9622cf1b55899c3be2291fe/filprofiler-0.5.3-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "99bc20ab4bfb21826e93f276223e17ea", + "sha256": "7363b129f0c04ca38d8c816c3c03ed1133dd0c1da7a8ca192e97d5edc4281630" + }, + "downloads": -1, + "filename": "filprofiler-0.5.3-cp38-cp38-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "99bc20ab4bfb21826e93f276223e17ea", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 551611, + "upload_time": "2020-06-22T19:18:15", + "upload_time_iso_8601": "2020-06-22T19:18:15.712715Z", + "url": "https://files.pythonhosted.org/packages/1b/0e/8894275c75fe40816dcfa5342589d3ed8cac453fc409528838945e5ea7da/filprofiler-0.5.3-cp38-cp38-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.6.0": [ + { + "comment_text": "", + "digests": { + "md5": "7f1e11cc02b0959508ab6d48ea6543b6", + "sha256": "478d722aafee57515da69d109878377ea06329dad89e873e55de4fbde0ebcf4d" + }, + "downloads": -1, + "filename": "filprofiler-0.6.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "7f1e11cc02b0959508ab6d48ea6543b6", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 268587, + "upload_time": "2020-07-01T20:15:08", + "upload_time_iso_8601": "2020-07-01T20:15:08.130772Z", + "url": "https://files.pythonhosted.org/packages/b3/e0/7d25e118a695f94eae74ebeb0ac8f835f42f9e4fbc368151f284200602f2/filprofiler-0.6.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "732aa73250a20ef41acf9bbccbcd8d1e", + "sha256": "54a566f1238692890a7faa65b56ee4196b0f3f1121404b94fcbaef0309a2842b" + }, + "downloads": -1, + "filename": "filprofiler-0.6.0-cp36-cp36m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "732aa73250a20ef41acf9bbccbcd8d1e", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 557554, + "upload_time": "2020-07-01T20:14:28", + "upload_time_iso_8601": "2020-07-01T20:14:28.526496Z", + "url": "https://files.pythonhosted.org/packages/0c/61/6f3132d7f2885f524da91903dcfc93dfd2ea524ef6c78d44daf7e52f8921/filprofiler-0.6.0-cp36-cp36m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "8dc4eb95b1b8b1adfa89875b83d5e082", + "sha256": "67201a1c3fbf72ac914a15d3f96c4ab24678bd43d68d91adbbdd11ba47272fb1" + }, + "downloads": -1, + "filename": "filprofiler-0.6.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "8dc4eb95b1b8b1adfa89875b83d5e082", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 268590, + "upload_time": "2020-07-01T20:15:05", + "upload_time_iso_8601": "2020-07-01T20:15:05.015168Z", + "url": "https://files.pythonhosted.org/packages/df/57/4e04c68635b5a621a693d0208955a3e0ee042cdffc9014221f5a35e5934c/filprofiler-0.6.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "4285dd7e64b7cd5764b4df25f4ac69fb", + "sha256": "42f6a80dc62364a1bf239c1a830ad6f512e1308cb550eca56e4422818a488f70" + }, + "downloads": -1, + "filename": "filprofiler-0.6.0-cp37-cp37m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "4285dd7e64b7cd5764b4df25f4ac69fb", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 558643, + "upload_time": "2020-07-01T20:14:29", + "upload_time_iso_8601": "2020-07-01T20:14:29.976322Z", + "url": "https://files.pythonhosted.org/packages/10/e9/1c9e50dbdde93be83c491756d0b529671adb58c277e70a95060809b1eedc/filprofiler-0.6.0-cp37-cp37m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "6109fe7b4307fb12ede64b60de215b15", + "sha256": "1107fc9b586aaceb142f9b06e4664f191dff7ef853d9d06e59c071c86b3b9f3b" + }, + "downloads": -1, + "filename": "filprofiler-0.6.0-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "6109fe7b4307fb12ede64b60de215b15", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 268583, + "upload_time": "2020-07-01T20:18:53", + "upload_time_iso_8601": "2020-07-01T20:18:53.547084Z", + "url": "https://files.pythonhosted.org/packages/ee/18/f558ec2dc11bd4748dc6cb61adf9384729c6f7077c79ac9f53507090e020/filprofiler-0.6.0-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "fb63d676b1f8012b9029c4270c92630a", + "sha256": "b23496eec621a932d1f92ea0ea7297dd05817581b1a95d05d9a10d64f1294d85" + }, + "downloads": -1, + "filename": "filprofiler-0.6.0-cp38-cp38-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "fb63d676b1f8012b9029c4270c92630a", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 557630, + "upload_time": "2020-07-01T20:14:31", + "upload_time_iso_8601": "2020-07-01T20:14:31.208698Z", + "url": "https://files.pythonhosted.org/packages/a8/2c/ff82101c38378d5b2c3406e3e348772b3187fa9def320d1d27a693b23345/filprofiler-0.6.0-cp38-cp38-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.7.0": [ + { + "comment_text": "", + "digests": { + "md5": "ae9bff5d4786bcf7f2692a770e313eba", + "sha256": "02a108cea4b8cb1da35d3c5a41a82660f7cbad7b6f667a79485e0c33d73e87ba" + }, + "downloads": -1, + "filename": "filprofiler-0.7.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "ae9bff5d4786bcf7f2692a770e313eba", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 269428, + "upload_time": "2020-07-03T17:13:45", + "upload_time_iso_8601": "2020-07-03T17:13:45.633172Z", + "url": "https://files.pythonhosted.org/packages/d9/25/c04c46acb07a212e5b64cb89351df490887a2990ce8a48fa86d285129a97/filprofiler-0.7.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "5fe1007c4ca8f21c1a6b7fcb647468e2", + "sha256": "4d2fb4b7a92cbde6512785abf55c697891d73861d1c439057da40713e96bbf2f" + }, + "downloads": -1, + "filename": "filprofiler-0.7.0-cp36-cp36m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "5fe1007c4ca8f21c1a6b7fcb647468e2", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 558746, + "upload_time": "2020-07-03T17:10:42", + "upload_time_iso_8601": "2020-07-03T17:10:42.946527Z", + "url": "https://files.pythonhosted.org/packages/28/59/736355cbcfc78076769ef6bd3f55748ab0e71aa1a0f38ecb5b84a75b1f24/filprofiler-0.7.0-cp36-cp36m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "54f16155aaad6eaa39a02d48c6019007", + "sha256": "73f9a1651adf550717c4d35809b34533ea9d7b9e1c59c5e463f3d52900b8676d" + }, + "downloads": -1, + "filename": "filprofiler-0.7.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "54f16155aaad6eaa39a02d48c6019007", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 269429, + "upload_time": "2020-07-03T17:13:46", + "upload_time_iso_8601": "2020-07-03T17:13:46.203105Z", + "url": "https://files.pythonhosted.org/packages/52/bc/6063df03b92c556b10cd3d6950775a217402045e27aed05e400198b2dc2a/filprofiler-0.7.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "f6a34af7fa96e0d558c50d7d390ce648", + "sha256": "c5bbd21dd8a3ec4093d1e935057d143eb62faa134678bf8f48cd3fa4954268c7" + }, + "downloads": -1, + "filename": "filprofiler-0.7.0-cp37-cp37m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "f6a34af7fa96e0d558c50d7d390ce648", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 559875, + "upload_time": "2020-07-03T17:10:43", + "upload_time_iso_8601": "2020-07-03T17:10:43.984610Z", + "url": "https://files.pythonhosted.org/packages/38/d4/7611fc34f3bb01a8d4c3149d40bf1283b3af33dca01b5defabee45b8b6f9/filprofiler-0.7.0-cp37-cp37m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "526ab27921f7c849488bff6ef51b93d6", + "sha256": "227a318378b7cb8c85c65f5178bd7d9ee08247f020a16b944ba836363bcb5ecf" + }, + "downloads": -1, + "filename": "filprofiler-0.7.0-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "526ab27921f7c849488bff6ef51b93d6", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 269390, + "upload_time": "2020-07-03T17:12:32", + "upload_time_iso_8601": "2020-07-03T17:12:32.286788Z", + "url": "https://files.pythonhosted.org/packages/54/da/c95815f38eb9d55aa533d847a87795f3fe0d7080d5fd33da4ecb0a85b69b/filprofiler-0.7.0-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "0d894d763d8c2aafca5f694e9ef3bb20", + "sha256": "38b7a7b1a8d0bc74489084a379ef5f89ddc8b2e09620e76021fd80825f52d2a6" + }, + "downloads": -1, + "filename": "filprofiler-0.7.0-cp38-cp38-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "0d894d763d8c2aafca5f694e9ef3bb20", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 558860, + "upload_time": "2020-07-03T17:10:45", + "upload_time_iso_8601": "2020-07-03T17:10:45.145255Z", + "url": "https://files.pythonhosted.org/packages/b3/1c/2338199ec0030023c07484d3411882f4766e04fca0afee011677f3f91bb5/filprofiler-0.7.0-cp38-cp38-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.7.1": [ + { + "comment_text": "", + "digests": { + "md5": "a60fb37a3017b02be28448ef25537863", + "sha256": "7088ccd5a040c44ff80ed8630265316cbc1760e3ffd7a8a6a8c4029636ed9cc4" + }, + "downloads": -1, + "filename": "filprofiler-0.7.1-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "a60fb37a3017b02be28448ef25537863", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 269306, + "upload_time": "2020-07-07T18:58:55", + "upload_time_iso_8601": "2020-07-07T18:58:55.625617Z", + "url": "https://files.pythonhosted.org/packages/13/0b/a1d7cbb86fafec3bbe45f3056735f46b075a6b14b0a3084b380c5b72a52d/filprofiler-0.7.1-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "ce7b6c5c40158c8586f91558e9ddd42a", + "sha256": "dc3b8d70ae173cf1837c9391bd7267bffd62ea4d4c40fa5d7b87cf5e53695a29" + }, + "downloads": -1, + "filename": "filprofiler-0.7.1-cp36-cp36m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "ce7b6c5c40158c8586f91558e9ddd42a", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 558762, + "upload_time": "2020-07-07T18:51:18", + "upload_time_iso_8601": "2020-07-07T18:51:18.092861Z", + "url": "https://files.pythonhosted.org/packages/69/40/b4073833f4f0bdfb7cbb10b813a241db71403bd3e52f0963805e9366e56c/filprofiler-0.7.1-cp36-cp36m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "c242617c3ecd69b5cd3eecb4a8ea1e4e", + "sha256": "8e9e532975fdca74bed4f66828cfabcb04cb32bda5610c723b56cc36f2a7e517" + }, + "downloads": -1, + "filename": "filprofiler-0.7.1-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "c242617c3ecd69b5cd3eecb4a8ea1e4e", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 269307, + "upload_time": "2020-07-07T18:58:54", + "upload_time_iso_8601": "2020-07-07T18:58:54.435845Z", + "url": "https://files.pythonhosted.org/packages/7f/84/50391b4616e72a54cb333907977960c5add7ae3ed33a59dddaf44c36d552/filprofiler-0.7.1-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "e92c4ccdd160bf4e71b374ca07b2b367", + "sha256": "256fcc578d188711c670e0d6450ecfff77db457ed6e13847a6bb7c6fb87b5afc" + }, + "downloads": -1, + "filename": "filprofiler-0.7.1-cp37-cp37m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "e92c4ccdd160bf4e71b374ca07b2b367", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 559883, + "upload_time": "2020-07-07T18:51:19", + "upload_time_iso_8601": "2020-07-07T18:51:19.382096Z", + "url": "https://files.pythonhosted.org/packages/83/0b/875f428db5942704bcd23bee89b269b7469ca5a774814a10a800089bfee7/filprofiler-0.7.1-cp37-cp37m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "8db8dffc12c05a287cf07143117aba55", + "sha256": "55f2fb4c2db44c0d129a1bbe337d7ec16b7ca6f53cd70f4e1d8d39ea136143ef" + }, + "downloads": -1, + "filename": "filprofiler-0.7.1-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "8db8dffc12c05a287cf07143117aba55", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 269299, + "upload_time": "2020-07-07T18:59:07", + "upload_time_iso_8601": "2020-07-07T18:59:07.409221Z", + "url": "https://files.pythonhosted.org/packages/c4/d7/98eeb9eecfa92270b23d038be2f35790e22b47d251cd8b4c8d533f1cd049/filprofiler-0.7.1-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "7c25e773f6a653a5cfe31ca5e66a05c3", + "sha256": "36fd5ab695550f59ca89b8a624c7f0a77ba959a29ec9355267edebf6b5c615b5" + }, + "downloads": -1, + "filename": "filprofiler-0.7.1-cp38-cp38-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "7c25e773f6a653a5cfe31ca5e66a05c3", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 558862, + "upload_time": "2020-07-07T18:51:20", + "upload_time_iso_8601": "2020-07-07T18:51:20.572494Z", + "url": "https://files.pythonhosted.org/packages/c2/fc/532098659a06dbcdc167a103ccfd821e456bdb922c1b7f4aa69fa4c95b22/filprofiler-0.7.1-cp38-cp38-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.7.2": [ + { + "comment_text": "", + "digests": { + "md5": "316a28df9c84741bebdabe35e41d1964", + "sha256": "8b2e3146f9c484d347c7a292a4283474bcd2502443149783e3c6caed54ecb837" + }, + "downloads": -1, + "filename": "filprofiler-0.7.2-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "316a28df9c84741bebdabe35e41d1964", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 272272, + "upload_time": "2020-07-12T19:03:01", + "upload_time_iso_8601": "2020-07-12T19:03:01.984998Z", + "url": "https://files.pythonhosted.org/packages/f4/7c/7264e41277c1110fa8ca4b3ccc1af809d504ab6e0e0f49098276587adb21/filprofiler-0.7.2-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "bc08d8bc7820c5f09dcddec14f2a6b0b", + "sha256": "bc2c357a04f11732db01fe0235c95b4af9cc0827ca22ba6b0ad538123bb9d3ea" + }, + "downloads": -1, + "filename": "filprofiler-0.7.2-cp36-cp36m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "bc08d8bc7820c5f09dcddec14f2a6b0b", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 565058, + "upload_time": "2020-07-12T18:55:14", + "upload_time_iso_8601": "2020-07-12T18:55:14.562503Z", + "url": "https://files.pythonhosted.org/packages/e3/a2/843e7b5f1aba27effb0146c7e564e2592bfc9344a8c8ef0d55245bd47508/filprofiler-0.7.2-cp36-cp36m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "2044393469649e91a4027c45c6557471", + "sha256": "26ffce207cb0171ab148e50eb15192d509739bce5528db1cb3586196f557e4a9" + }, + "downloads": -1, + "filename": "filprofiler-0.7.2-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "2044393469649e91a4027c45c6557471", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 272268, + "upload_time": "2020-07-12T19:02:41", + "upload_time_iso_8601": "2020-07-12T19:02:41.352651Z", + "url": "https://files.pythonhosted.org/packages/56/ce/1554851e4dbc03e9d3760141f7bee863b1b9e6ae73b3ee9295697d764dda/filprofiler-0.7.2-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "4b48e068a380f29d6be24943076bfef5", + "sha256": "d789d6b8092a9e11c93248ab9ab03fcd24b7d06742a45dab112ae08ceedb3cdb" + }, + "downloads": -1, + "filename": "filprofiler-0.7.2-cp37-cp37m-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "4b48e068a380f29d6be24943076bfef5", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 565897, + "upload_time": "2020-07-12T18:55:15", + "upload_time_iso_8601": "2020-07-12T18:55:15.854446Z", + "url": "https://files.pythonhosted.org/packages/40/fc/ca3f02c765aa91ce9afc1837df06802868f6bced005513bdd66886e6c09a/filprofiler-0.7.2-cp37-cp37m-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "c0c7250c727ae6b7e0f7c26f6b9f73d0", + "sha256": "17da30e1072a01a7587fa15ab12299c873aa93e261c8a7f8f3499d84803b982d" + }, + "downloads": -1, + "filename": "filprofiler-0.7.2-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "c0c7250c727ae6b7e0f7c26f6b9f73d0", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 272265, + "upload_time": "2020-07-12T19:03:49", + "upload_time_iso_8601": "2020-07-12T19:03:49.164465Z", + "url": "https://files.pythonhosted.org/packages/74/9f/d40fad8be9e302db90c91349165f47702a5b359be1993d28839ea2f27f7e/filprofiler-0.7.2-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "3ffdbf6366230f669bd7a1e5571e83f3", + "sha256": "3a340096193892ca4906249d6c52eeeee62732b37953e7dadaa54fd2dd0313d8" + }, + "downloads": -1, + "filename": "filprofiler-0.7.2-cp38-cp38-manylinux1_x86_64.whl", + "has_sig": false, + "md5_digest": "3ffdbf6366230f669bd7a1e5571e83f3", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 565184, + "upload_time": "2020-07-12T18:55:17", + "upload_time_iso_8601": "2020-07-12T18:55:17.087469Z", + "url": "https://files.pythonhosted.org/packages/5b/0f/cfdb86614ddd026f9d0dc75965372c70f58b98c95ca19f2b54a14ddc4cc6/filprofiler-0.7.2-cp38-cp38-manylinux1_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.8.0": [ + { + "comment_text": "", + "digests": { + "md5": "a4aebe4021d97a0609e9e44d0dc9c77d", + "sha256": "aae9eca15eb19a41b1cd3e8cca1b3dd18a1ebeec98d72e3207aa6beebe7a7477" + }, + "downloads": -1, + "filename": "filprofiler-0.8.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "a4aebe4021d97a0609e9e44d0dc9c77d", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 257486, + "upload_time": "2020-07-24T20:14:41", + "upload_time_iso_8601": "2020-07-24T20:14:41.110800Z", + "url": "https://files.pythonhosted.org/packages/ac/db/b970f82ae61ccfcb00f25de3ec6e06fb86ac24d1c2013dbad8d2e8514a62/filprofiler-0.8.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "539331edea8784560419ae8c714af3ee", + "sha256": "c1831c62737c9455e1fba57e4619c56e66e4d5876a63ee520df3947879d33bb1" + }, + "downloads": -1, + "filename": "filprofiler-0.8.0-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "539331edea8784560419ae8c714af3ee", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 1746495, + "upload_time": "2020-07-24T20:14:50", + "upload_time_iso_8601": "2020-07-24T20:14:50.313798Z", + "url": "https://files.pythonhosted.org/packages/f5/7b/a84ca5d5c82fced56e9120915109322f83a993d03bf4441c35cda21b576f/filprofiler-0.8.0-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "7086ff42dd7b8871411920554e1bc0c4", + "sha256": "c4faa26fe9d09c6c949777d80e313408cd2d56b87d32945383faf677eea7b6dc" + }, + "downloads": -1, + "filename": "filprofiler-0.8.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "7086ff42dd7b8871411920554e1bc0c4", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 257487, + "upload_time": "2020-07-24T20:14:08", + "upload_time_iso_8601": "2020-07-24T20:14:08.489253Z", + "url": "https://files.pythonhosted.org/packages/25/ea/dbf1eb4e540f398569190c8b3159e474e6c2c61ea96471ca841d51a2807c/filprofiler-0.8.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "a394809dcae2ec1f3dc219f90c983ead", + "sha256": "16b868af1391950537176956007bb974d663de7785cad2f153bcd505dc8e8ecc" + }, + "downloads": -1, + "filename": "filprofiler-0.8.0-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "a394809dcae2ec1f3dc219f90c983ead", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 1747483, + "upload_time": "2020-07-24T20:14:51", + "upload_time_iso_8601": "2020-07-24T20:14:51.498272Z", + "url": "https://files.pythonhosted.org/packages/41/f3/9db509c81cb75ed8fe0b197e27ff6c9f991bd77268402f724524a79a26a2/filprofiler-0.8.0-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "5a7324f49a5d798193affd7005ef7694", + "sha256": "da1e51f5cf6345b207da59fafaaf14128055abf4ddf418a9b5dee0a4c674d461" + }, + "downloads": -1, + "filename": "filprofiler-0.8.0-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "5a7324f49a5d798193affd7005ef7694", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 257480, + "upload_time": "2020-07-24T20:18:16", + "upload_time_iso_8601": "2020-07-24T20:18:16.615945Z", + "url": "https://files.pythonhosted.org/packages/2a/0a/13eee0dd204fde625be92e8a77f7fc16f9e1307e0ff8e8b39d89a0fd71b2/filprofiler-0.8.0-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "98ad2b006db29fbc922329d7d4689355", + "sha256": "dea5cdf1100014447d824bd469f8cf199fa9482606e26cc1d91c1bb015dde42f" + }, + "downloads": -1, + "filename": "filprofiler-0.8.0-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "98ad2b006db29fbc922329d7d4689355", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 1746643, + "upload_time": "2020-07-24T20:14:52", + "upload_time_iso_8601": "2020-07-24T20:14:52.617459Z", + "url": "https://files.pythonhosted.org/packages/1b/8b/93cf518d198df4d6863a2e604ac86605d0fb495664d3ba7ff263f3c4ef8b/filprofiler-0.8.0-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "0.9.0": [ + { + "comment_text": "", + "digests": { + "md5": "433e9b934f00fec0c5ba244e66786114", + "sha256": "a4b1f53adf2556a98d14d605d54880fddd961e2738ad178c27e9aad31c61615d" + }, + "downloads": -1, + "filename": "filprofiler-0.9.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "433e9b934f00fec0c5ba244e66786114", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 263885, + "upload_time": "2020-08-13T19:03:42", + "upload_time_iso_8601": "2020-08-13T19:03:42.710991Z", + "url": "https://files.pythonhosted.org/packages/c8/c8/24bc49069e4953ecf52e12c2b724f8b90bd0f67b768bfd76c9259b29d538/filprofiler-0.9.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "6b246d473c963c5a5eac71cb35bfff4c", + "sha256": "e56745bb921a7f00f791213c9cbce239de4f73b177234bc08b02589bf1fdd826" + }, + "downloads": -1, + "filename": "filprofiler-0.9.0-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "6b246d473c963c5a5eac71cb35bfff4c", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 1755393, + "upload_time": "2020-08-13T18:27:55", + "upload_time_iso_8601": "2020-08-13T18:27:55.883104Z", + "url": "https://files.pythonhosted.org/packages/9d/9e/b03cc67f4b6e7ec7272a2172e9b003e387a799851085670cc247dc585e6d/filprofiler-0.9.0-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "661b3a872f677999e6a05238ce37541e", + "sha256": "5f31f9f658380a28e01df0e8e6746a6fa877e52ba35c66ad9b2513cec142a9a3" + }, + "downloads": -1, + "filename": "filprofiler-0.9.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "661b3a872f677999e6a05238ce37541e", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 263886, + "upload_time": "2020-08-13T18:33:03", + "upload_time_iso_8601": "2020-08-13T18:33:03.368667Z", + "url": "https://files.pythonhosted.org/packages/9a/ca/4fa1d1bdca8a2765560076716d3f38d6a3a49edc226a7d92b6a6f5740c1a/filprofiler-0.9.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "6b5b2a53adfcf25d7fa0814ffa1c08dc", + "sha256": "06bea75042c8a9342c14a437dee57e59dc06c53fdc9a52ea461a5451ee968a14" + }, + "downloads": -1, + "filename": "filprofiler-0.9.0-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "6b5b2a53adfcf25d7fa0814ffa1c08dc", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 1756284, + "upload_time": "2020-08-13T18:27:57", + "upload_time_iso_8601": "2020-08-13T18:27:57.502785Z", + "url": "https://files.pythonhosted.org/packages/61/56/58b21b09ec4d8354d38fa2f12981d29e26922d93928a1501541b33f1cc70/filprofiler-0.9.0-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "a820744d6a019c5a0775df5f218b5441", + "sha256": "fe8f009e820016501bcc87e354a4c0ee8955febfa693583554458fcb86c7c7f8" + }, + "downloads": -1, + "filename": "filprofiler-0.9.0-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "a820744d6a019c5a0775df5f218b5441", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 263881, + "upload_time": "2020-08-13T18:34:21", + "upload_time_iso_8601": "2020-08-13T18:34:21.106814Z", + "url": "https://files.pythonhosted.org/packages/08/18/c192c608d18eaf2b5e88c7841f91bdd15d98e4631c2fa560d51a1272d53e/filprofiler-0.9.0-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "fa522ad062949dec4fc0c65554aca962", + "sha256": "4166db4be46294b6d0ab7a1e685b28cb27a195e78c6ee290fb993f94a60b66bb" + }, + "downloads": -1, + "filename": "filprofiler-0.9.0-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "fa522ad062949dec4fc0c65554aca962", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 1755491, + "upload_time": "2020-08-13T18:27:58", + "upload_time_iso_8601": "2020-08-13T18:27:58.928754Z", + "url": "https://files.pythonhosted.org/packages/9f/05/950c64cf20e717787a05d823229ca6be6327cc39d966d8f6e53a329246d2/filprofiler-0.9.0-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2021.11.0": [ + { + "comment_text": "", + "digests": { + "md5": "817ae5564fbcacc981294b930ff24eda", + "sha256": "fa4a17b81d9c7d59c3f82fdb0db22aa54f97dbb998b70b44379449f299e7722c" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.0-cp36-cp36m-macosx_11_0_x86_64.whl", + "has_sig": false, + "md5_digest": "817ae5564fbcacc981294b930ff24eda", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 490340, + "upload_time": "2021-11-08T16:10:06", + "upload_time_iso_8601": "2021-11-08T16:10:06.457874Z", + "url": "https://files.pythonhosted.org/packages/56/d0/2a0ca6ca5debd2e0288c060e02cb750d0523161a8729b94094794801d38d/filprofiler-2021.11.0-cp36-cp36m-macosx_11_0_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "adb3c29c489fa6d765a9ce2c690040e1", + "sha256": "74218f460da01f6774eb5cdfcc7f72b041bbd192bc9a1386d8cd76fb9d7711e5" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "adb3c29c489fa6d765a9ce2c690040e1", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2721652, + "upload_time": "2021-11-08T16:00:41", + "upload_time_iso_8601": "2021-11-08T16:00:41.097785Z", + "url": "https://files.pythonhosted.org/packages/e7/19/7c56c6ec76519cb58807c59cd6c106a09f84d0dbff1065d3dc4f2cd49e72/filprofiler-2021.11.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "1b8a3571b387915509fad6ed05fa9ef7", + "sha256": "4eba7a6de6fc2030de8b9f0948333185c77cdd5325fa0cd8a6aaf69ee5abc5fa" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.0-cp37-cp37m-macosx_11_0_x86_64.whl", + "has_sig": false, + "md5_digest": "1b8a3571b387915509fad6ed05fa9ef7", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 490615, + "upload_time": "2021-11-08T16:08:49", + "upload_time_iso_8601": "2021-11-08T16:08:49.910140Z", + "url": "https://files.pythonhosted.org/packages/80/27/de2ad8cc526bd6597523d8d3eff8fd08c13e72bbe3abe6678acdd52c00b3/filprofiler-2021.11.0-cp37-cp37m-macosx_11_0_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "7f178b1babc269518b1382a67865a39a", + "sha256": "f29bed33509d9d7f841b92c41ca32daa09554026c4e06881c0d975ac5b38b733" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "7f178b1babc269518b1382a67865a39a", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 5380806, + "upload_time": "2021-11-08T16:00:42", + "upload_time_iso_8601": "2021-11-08T16:00:42.601765Z", + "url": "https://files.pythonhosted.org/packages/dd/f5/aed95c4ec40b518493e171a8ac8488eb2f20b3e9b953b5d6b3462aa4b0f5/filprofiler-2021.11.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "104a13385d3bfa0d5250fa872ce806d7", + "sha256": "cc62d508afdb458925fd4828a6ab6c47b2bbdc39db7eaaaf48e6b578fa6a2f56" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.0-cp38-cp38-macosx_11_0_x86_64.whl", + "has_sig": false, + "md5_digest": "104a13385d3bfa0d5250fa872ce806d7", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 490621, + "upload_time": "2021-11-08T16:18:05", + "upload_time_iso_8601": "2021-11-08T16:18:05.485819Z", + "url": "https://files.pythonhosted.org/packages/3f/6a/bb68cd1e0220b6d62c8ba91e25799233542fc5fec42bde2c1c3379f5714a/filprofiler-2021.11.0-cp38-cp38-macosx_11_0_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "1d1a87b968893519fae7cfdaa489803f", + "sha256": "bec33121e12135afbe3b9fba4c0c68c9ae1f90f83e828ebe4deba4b4f829b67b" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "1d1a87b968893519fae7cfdaa489803f", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 8039989, + "upload_time": "2021-11-08T16:00:43", + "upload_time_iso_8601": "2021-11-08T16:00:43.960692Z", + "url": "https://files.pythonhosted.org/packages/ff/2d/f49c8d5943e230c22281f24f3157029020ea8ffe834a0830430b63e1fcbe/filprofiler-2021.11.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "b057cd932646e87ee8243ff5cb3c4e49", + "sha256": "a077eef309acb4adfdca12affb5669a87db5957381bac113d4faf50eb456eb99" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.0-cp39-cp39-macosx_11_0_x86_64.whl", + "has_sig": false, + "md5_digest": "b057cd932646e87ee8243ff5cb3c4e49", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 490720, + "upload_time": "2021-11-08T16:18:48", + "upload_time_iso_8601": "2021-11-08T16:18:48.988705Z", + "url": "https://files.pythonhosted.org/packages/05/c3/3be8f3efa9a1be73338a9290283c40375b0826f5639b1555f1f87b0f79cb/filprofiler-2021.11.0-cp39-cp39-macosx_11_0_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "5b0dd81bfd18ba01e0be272a245b5dd9", + "sha256": "871feb4f916e606b91eace0b49adae1e54cc139959eddd1e8347c9164ab5c408" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "5b0dd81bfd18ba01e0be272a245b5dd9", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 10699833, + "upload_time": "2021-11-08T16:00:45", + "upload_time_iso_8601": "2021-11-08T16:00:45.527836Z", + "url": "https://files.pythonhosted.org/packages/ab/6e/14db087903a2a2bc1f4395e72eeac0c345f9d816bc6ee1915b5def42a751/filprofiler-2021.11.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2021.11.1": [ + { + "comment_text": "", + "digests": { + "md5": "d18ba1c3b55f1f7ed13989c73c5302d8", + "sha256": "3d25fff609f65c497bd221c072907ed59869228e9e03126c81fedda92d5dbc78" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "d18ba1c3b55f1f7ed13989c73c5302d8", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2711217, + "upload_time": "2021-11-19T15:45:01", + "upload_time_iso_8601": "2021-11-19T15:45:01.150075Z", + "url": "https://files.pythonhosted.org/packages/a9/49/3903bbab1ad0058c749d723434af4eaf395c6454bcee6a2154f52e7181ae/filprofiler-2021.11.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "dd644d3ce849043303b9900685710afe", + "sha256": "a0a2ff41c652a78883c84385678d75c7d91e13011e7b3ffd2bd216ffc2dbcc22" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "dd644d3ce849043303b9900685710afe", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 5359640, + "upload_time": "2021-11-19T15:45:03", + "upload_time_iso_8601": "2021-11-19T15:45:03.441232Z", + "url": "https://files.pythonhosted.org/packages/9a/ab/27014e7aa27d98782f2af8be4412a0760eff2205fb20815b0e47d66e5efc/filprofiler-2021.11.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "0803c9c58113562d1a356641762fcc41", + "sha256": "b4668bef12b111863a1c82742033ba23cfdd45112a57b9454dbe53e5998146f6" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "0803c9c58113562d1a356641762fcc41", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 8008188, + "upload_time": "2021-11-19T15:45:05", + "upload_time_iso_8601": "2021-11-19T15:45:05.498407Z", + "url": "https://files.pythonhosted.org/packages/ae/75/3441350eef027c6b27d3da83742fa4088661fe7d53edb43a4b4e703ca6d0/filprofiler-2021.11.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "c7e62f53d068ba9c5d4dbd0f2a39ba11", + "sha256": "d4625eaa8b45afc933f845a913aa010914d53a1e1d4665890b558e444f23865c" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "c7e62f53d068ba9c5d4dbd0f2a39ba11", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 10656877, + "upload_time": "2021-11-19T15:45:07", + "upload_time_iso_8601": "2021-11-19T15:45:07.305346Z", + "url": "https://files.pythonhosted.org/packages/ca/16/4200110baed084f88973e77cc145a2497ea5d78f16b89c23b3e4a40b3ece/filprofiler-2021.11.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2021.11.2": [ + { + "comment_text": "", + "digests": { + "md5": "0a813df55117335fd60a0aecdd4888f6", + "sha256": "8ed4ce7a6bcaefd0295b45fca115c7db6ca7e3f98b4261654361e7c79f595985" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.2-cp36-cp36m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "0a813df55117335fd60a0aecdd4888f6", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 488677, + "upload_time": "2021-11-19T17:33:27", + "upload_time_iso_8601": "2021-11-19T17:33:27.405546Z", + "url": "https://files.pythonhosted.org/packages/9a/b7/cbe10ad7cd8efb9b7dd8b4e636bb497b341c24e400932a328ab338f9b48f/filprofiler-2021.11.2-cp36-cp36m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "3fe2cd76a79c95620fa9a98762c93594", + "sha256": "85872394004d3eb9fd73bc7dfe946a5c08225385bb69f954fa625700e4f53bb8" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.2-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "3fe2cd76a79c95620fa9a98762c93594", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2711261, + "upload_time": "2021-11-19T17:30:24", + "upload_time_iso_8601": "2021-11-19T17:30:24.540688Z", + "url": "https://files.pythonhosted.org/packages/e4/1e/af661e32c535f908fd423b0c6a577ca16c802f0b40f2d5efdde94133db3f/filprofiler-2021.11.2-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "3bd775a67a3237ad525e3c39f3ef010e", + "sha256": "d2346be63590ccd134c9f44553d3908e143916bb8c20a1b9222efa8d609d436d" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.2-cp37-cp37m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "3bd775a67a3237ad525e3c39f3ef010e", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 488732, + "upload_time": "2021-11-19T17:33:28", + "upload_time_iso_8601": "2021-11-19T17:33:28.323693Z", + "url": "https://files.pythonhosted.org/packages/88/7a/244ef143f1ae153faba2740a7187ba5006d05d06a934fa19d02295a6cb73/filprofiler-2021.11.2-cp37-cp37m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "c8ce87e64b9abbdba1e1f05179fde2bd", + "sha256": "d4450e0ff75621f2c471121dcbc23cbc4324f6aa6c0e311f3254ccac989c3ba8" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.2-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "c8ce87e64b9abbdba1e1f05179fde2bd", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 5359650, + "upload_time": "2021-11-19T17:30:26", + "upload_time_iso_8601": "2021-11-19T17:30:26.752556Z", + "url": "https://files.pythonhosted.org/packages/d1/33/aa966d62de77e404c1978e171e4f3a54aa38d1aef456b66ea6930711df7e/filprofiler-2021.11.2-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "50d847e8f3ba6b4445e0951e57478e62", + "sha256": "a6482fc2436e167c167b59fb68428c5dae0914c46e77f1a85403e05dd535aefd" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.2-cp38-cp38-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "50d847e8f3ba6b4445e0951e57478e62", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 488653, + "upload_time": "2021-11-19T17:33:29", + "upload_time_iso_8601": "2021-11-19T17:33:29.498584Z", + "url": "https://files.pythonhosted.org/packages/76/11/96f1cb2bd53afd1798181a5e252e308195608b70e8c96f996f256bbad270/filprofiler-2021.11.2-cp38-cp38-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "8c01bc779cbf578034d75b505261c6c8", + "sha256": "e0d843e461966e3cacd60144a7cb4ecf97b156f80ca8110c59c97dbcc7f962de" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "8c01bc779cbf578034d75b505261c6c8", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 8008190, + "upload_time": "2021-11-19T17:30:28", + "upload_time_iso_8601": "2021-11-19T17:30:28.957969Z", + "url": "https://files.pythonhosted.org/packages/da/dd/22d55c89c767d8ca96379b406754fae5f865d956d4917f63799d96b38e88/filprofiler-2021.11.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "1871f4bcad2ec9ccd184cbf7bfec49b1", + "sha256": "3aeff2d3842a4aff73f754dcc18dbcf219fb9653634232997be32ff32dc8215a" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.2-cp39-cp39-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "1871f4bcad2ec9ccd184cbf7bfec49b1", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 488904, + "upload_time": "2021-11-19T17:33:30", + "upload_time_iso_8601": "2021-11-19T17:33:30.345236Z", + "url": "https://files.pythonhosted.org/packages/cb/01/b7b40307ff49e36863791ffd400b8363a2fca2a5d7d5595bd1ba53c17869/filprofiler-2021.11.2-cp39-cp39-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "ebbcd23a4d64b22dded3dac064ad56ed", + "sha256": "569173764877cd44d31c1755a33875a94ae9f908c800def295918fbac0644906" + }, + "downloads": -1, + "filename": "filprofiler-2021.11.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "ebbcd23a4d64b22dded3dac064ad56ed", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 10656883, + "upload_time": "2021-11-19T17:30:30", + "upload_time_iso_8601": "2021-11-19T17:30:30.841367Z", + "url": "https://files.pythonhosted.org/packages/a6/57/58169ce4fcbe80d886d4dce6bb2d21011c9991c41f6d4b070bb30a1d9fce/filprofiler-2021.11.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2021.12.0": [ + { + "comment_text": "", + "digests": { + "md5": "b502f062926a548987b59f838f98ab9c", + "sha256": "56f12f89abe9b84c65744c148bb0a45b8b4ae1c03457f0b8ea8e0fc73a50a599" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "b502f062926a548987b59f838f98ab9c", + "packagetype": "bdist_wheel", + "python_version": "cp310", + "requires_python": ">=3.6", + "size": 2722501, + "upload_time": "2021-12-03T22:33:07", + "upload_time_iso_8601": "2021-12-03T22:33:07.121754Z", + "url": "https://files.pythonhosted.org/packages/04/7a/a6d0ef7c4235a64ee238d5919b3160113f0fbc9bee8c258b4a05566baaf9/filprofiler-2021.12.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "de6712aeaf8b1a9be418de9b2793b9da", + "sha256": "e0dea4617fe92db8a0c684e7b2c2847c068a0e74961e863e832aca0f1953c6f0" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.0-cp36-cp36m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "de6712aeaf8b1a9be418de9b2793b9da", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 503441, + "upload_time": "2021-12-03T22:56:39", + "upload_time_iso_8601": "2021-12-03T22:56:39.219733Z", + "url": "https://files.pythonhosted.org/packages/de/ea/4839b68ac81b69fafb844e226eed426479c8324f33624cf95292051612eb/filprofiler-2021.12.0-cp36-cp36m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "52b8e204fb129f1a8db4f25f5b7bb9a7", + "sha256": "fcbb0eff3fee9ece15374f3da59422a9f473bd0a8c9b9842f8b7f6bdfe2dc7ed" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "52b8e204fb129f1a8db4f25f5b7bb9a7", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2721147, + "upload_time": "2021-12-03T22:33:08", + "upload_time_iso_8601": "2021-12-03T22:33:08.838581Z", + "url": "https://files.pythonhosted.org/packages/3a/cc/51e25328bd1dee57e812fd46eb4e4047a53c9de8fb6961cad1c1b8998688/filprofiler-2021.12.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "0a94ea19e47abf9ae2be9568af048e6c", + "sha256": "ecf59b59deef265540167b9058d74616ba2dc0db826adb92e338a966f1e7cb81" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.0-cp37-cp37m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "0a94ea19e47abf9ae2be9568af048e6c", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 503690, + "upload_time": "2021-12-03T22:56:40", + "upload_time_iso_8601": "2021-12-03T22:56:40.272887Z", + "url": "https://files.pythonhosted.org/packages/71/e6/53f66f638b70f7849a21d477f510a700a249ddb6e8b6eec25b285546c3b8/filprofiler-2021.12.0-cp37-cp37m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "3d4423098403ed155957de1bcb69302f", + "sha256": "f381d592f4390283feb1dc0725701c7f834e407c1b27fe37aa028bc1fbeedb2b" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "3d4423098403ed155957de1bcb69302f", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2721564, + "upload_time": "2021-12-03T22:33:10", + "upload_time_iso_8601": "2021-12-03T22:33:10.160643Z", + "url": "https://files.pythonhosted.org/packages/b0/95/e690731d22a3a6d4213a45ac100fdecf8fd7b5333d42e0ba12e92f52d3fb/filprofiler-2021.12.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "b4fc6413c510b70145b6179abedc4d68", + "sha256": "0fe27a0e0cc335187ebd3d71fe4f605becf231fd122e2a0d841215588a686f58" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.0-cp38-cp38-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "b4fc6413c510b70145b6179abedc4d68", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 504088, + "upload_time": "2021-12-03T22:56:41", + "upload_time_iso_8601": "2021-12-03T22:56:41.536177Z", + "url": "https://files.pythonhosted.org/packages/4e/ae/48d2b633629ec8c32288b8722e40de8e76bddbefa5e36c51ef798f11a7e5/filprofiler-2021.12.0-cp38-cp38-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "c5d626a77af68e8c0e83f315addf9c38", + "sha256": "b5001a83e982e2a02e90ab74a3d307b9683fb1cdf1c1c1748e6d4305ab067925" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "c5d626a77af68e8c0e83f315addf9c38", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2721440, + "upload_time": "2021-12-03T22:33:11", + "upload_time_iso_8601": "2021-12-03T22:33:11.372692Z", + "url": "https://files.pythonhosted.org/packages/b1/70/00133a558b5b88600cd007d5172c773a9495c495fe36396e7d4e4b22d3b7/filprofiler-2021.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "30b4c658b9728ab17939be49079bbf6f", + "sha256": "949149468192e3959c6703749a1f3932390e8f26b84781a132c379d681f377e1" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.0-cp39-cp39-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "30b4c658b9728ab17939be49079bbf6f", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 504613, + "upload_time": "2021-12-03T22:56:42", + "upload_time_iso_8601": "2021-12-03T22:56:42.408676Z", + "url": "https://files.pythonhosted.org/packages/d6/56/5b6dda3d7e5a82be58a77725d926a0faf3f1f098f6f092d5461069297c8d/filprofiler-2021.12.0-cp39-cp39-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "f4aba2de589e9a8c312912961d051424", + "sha256": "1467a959a5c8418dd19f6fc71254c0bfed7e6340eb0149427a75b26307475475" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "f4aba2de589e9a8c312912961d051424", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2722502, + "upload_time": "2021-12-03T22:33:12", + "upload_time_iso_8601": "2021-12-03T22:33:12.738157Z", + "url": "https://files.pythonhosted.org/packages/b2/af/6e835be079a73807da9c86777a6dc46fb0fcb299f92505ac111e1dd1fa2f/filprofiler-2021.12.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2021.12.1": [ + { + "comment_text": "", + "digests": { + "md5": "ba6da7befbd384c3ce522337217c69e5", + "sha256": "4d80f0993e716d37611675fde7cf79711fde72ff3a8c7ee88b98518fa12e53d6" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.1-cp310-cp310-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "ba6da7befbd384c3ce522337217c69e5", + "packagetype": "bdist_wheel", + "python_version": "cp310", + "requires_python": ">=3.6", + "size": 504610, + "upload_time": "2021-12-04T01:36:28", + "upload_time_iso_8601": "2021-12-04T01:36:28.420585Z", + "url": "https://files.pythonhosted.org/packages/3c/2f/df2b91427e0acb5f89b4325dcbf7b4f18cfafdc40d56383aebc0af9c6aab/filprofiler-2021.12.1-cp310-cp310-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "a9c731a27baa24f13f628cae54c9f726", + "sha256": "61598d94adcd994a18977f8e928197deb811766456d4bca6804a38fe2d7c1df3" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "a9c731a27baa24f13f628cae54c9f726", + "packagetype": "bdist_wheel", + "python_version": "cp310", + "requires_python": ">=3.6", + "size": 2722464, + "upload_time": "2021-12-04T01:11:22", + "upload_time_iso_8601": "2021-12-04T01:11:22.883708Z", + "url": "https://files.pythonhosted.org/packages/5d/6a/684bff021e109dd71fa9e2ebd83bca2e042d278f782951e1053331c96593/filprofiler-2021.12.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "8925bd5be593ef9cdaed626b7b8b9385", + "sha256": "22e00d4f4050dc2deb0fb80d08cf49dc995ba79b15717c9fc2650582ccfafdbf" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.1-cp36-cp36m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "8925bd5be593ef9cdaed626b7b8b9385", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 503437, + "upload_time": "2021-12-04T01:36:29", + "upload_time_iso_8601": "2021-12-04T01:36:29.508410Z", + "url": "https://files.pythonhosted.org/packages/2a/09/c404e94fa3178366e1dac39a3ecc55472cbdd1e3ed5510591148ff0d2e1b/filprofiler-2021.12.1-cp36-cp36m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "4bbe0aaf5b8c2379636c2c477945873c", + "sha256": "43eb4da73461d320ef835b53395e712770526101ee2bb2341f4e91a8cb6ea5b4" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "4bbe0aaf5b8c2379636c2c477945873c", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2721132, + "upload_time": "2021-12-04T01:11:24", + "upload_time_iso_8601": "2021-12-04T01:11:24.677840Z", + "url": "https://files.pythonhosted.org/packages/b6/2f/f93ac654f457cb986c1814a5dda1ef847066a36b51e59d0a2cab89f358aa/filprofiler-2021.12.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "efc79d6451e6e10fce4188eb92f3e382", + "sha256": "41558088da25542d624dc4f5dcc0e54b7dca70d297dce1d9597972fbd8bbeed2" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.1-cp37-cp37m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "efc79d6451e6e10fce4188eb92f3e382", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 503690, + "upload_time": "2021-12-04T01:36:30", + "upload_time_iso_8601": "2021-12-04T01:36:30.902374Z", + "url": "https://files.pythonhosted.org/packages/48/37/06950f8f715d9e0d5c5b0a3a3712c15bbfddbb0424f1fa715412f9ebccbc/filprofiler-2021.12.1-cp37-cp37m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "5793f7fe2ee4fc71fd23f393380bdc97", + "sha256": "61ed6b3e39b0feead7ec967edda03b456c7ea3d0fbd24073a2f3665e43524105" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "5793f7fe2ee4fc71fd23f393380bdc97", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2721554, + "upload_time": "2021-12-04T01:11:26", + "upload_time_iso_8601": "2021-12-04T01:11:26.444505Z", + "url": "https://files.pythonhosted.org/packages/d5/6c/89a6e33f8908b63d8a20bf724d8126e8ace6209fe7428ca821d7f4f84cb7/filprofiler-2021.12.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "77e503e59f48bb7b589cbe22712618fa", + "sha256": "69c2fdcc13ea4558fd085547f3a80528a67ac7d3f0ff39b19b28df94a30def98" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.1-cp38-cp38-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "77e503e59f48bb7b589cbe22712618fa", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 504086, + "upload_time": "2021-12-04T01:36:32", + "upload_time_iso_8601": "2021-12-04T01:36:32.168592Z", + "url": "https://files.pythonhosted.org/packages/62/cc/4914c85f8c9304e2493ab42c55cc02f8eef3275b36be3b84c4a7e268a6bf/filprofiler-2021.12.1-cp38-cp38-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "e85b5d312cbcc82a3a61b575596f7ebf", + "sha256": "cc03d87a7d481e855c165a5da26530a1aab9990c92ea82166d6de153de821092" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "e85b5d312cbcc82a3a61b575596f7ebf", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2721407, + "upload_time": "2021-12-04T01:11:27", + "upload_time_iso_8601": "2021-12-04T01:11:27.893439Z", + "url": "https://files.pythonhosted.org/packages/9c/04/673808330da93adfcd03ed6ea679ee184ee1689681d16ecf40267d4f537d/filprofiler-2021.12.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "4d9910f3f7783df6a8a27665175bc4b0", + "sha256": "23601f9120972d3a652438bed3a4991ab753a67268f334e3b7def4d24b4a355f" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.1-cp39-cp39-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "4d9910f3f7783df6a8a27665175bc4b0", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 504610, + "upload_time": "2021-12-04T01:36:33", + "upload_time_iso_8601": "2021-12-04T01:36:33.491827Z", + "url": "https://files.pythonhosted.org/packages/ca/ab/dfd4646f118f50635c2fc6bc496cb90fb87889639eeafcc5b78276199629/filprofiler-2021.12.1-cp39-cp39-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "d8356f0f643c01657a7987b301d33423", + "sha256": "cfd8520697ea0ad46dc4b184667b93d4692233f23b30f7171fabd08fa76cbb2c" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "d8356f0f643c01657a7987b301d33423", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2722457, + "upload_time": "2021-12-04T01:11:29", + "upload_time_iso_8601": "2021-12-04T01:11:29.435882Z", + "url": "https://files.pythonhosted.org/packages/c7/ac/c32cfca14e412faebe897adcb6ea82486e5d7f3906d6b1dc731f1c94fd7c/filprofiler-2021.12.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2021.12.2": [ + { + "comment_text": "", + "digests": { + "md5": "e88f9d89e4b570da991b1c3de0fbc232", + "sha256": "43a0a9a7187ade3b1c71925461fd07c8fe04bad0c372c33e5a2639f47f4cf42c" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.2-cp310-cp310-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "e88f9d89e4b570da991b1c3de0fbc232", + "packagetype": "bdist_wheel", + "python_version": "cp310", + "requires_python": ">=3.6", + "size": 503865, + "upload_time": "2021-12-15T14:06:16", + "upload_time_iso_8601": "2021-12-15T14:06:16.662981Z", + "url": "https://files.pythonhosted.org/packages/ec/6d/1d42c044a11493ba0283da2ef67a76c2fe8c41b3fdf3bf7eaaf955fa4b24/filprofiler-2021.12.2-cp310-cp310-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "fbbaccd92d1fe30c5d442d51cd875330", + "sha256": "3e3edb4ed8705af5af773dd37338e4bf8cb8552f38675c02461fd273f6ee9e8e" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.2-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "fbbaccd92d1fe30c5d442d51cd875330", + "packagetype": "bdist_wheel", + "python_version": "cp310", + "requires_python": ">=3.6", + "size": 2714776, + "upload_time": "2021-12-15T13:47:56", + "upload_time_iso_8601": "2021-12-15T13:47:56.138779Z", + "url": "https://files.pythonhosted.org/packages/6a/fe/678158a53d2e0df0263e786c96843cd5b32ab89f163f06ebaf4c53ae35e4/filprofiler-2021.12.2-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "699677dbf36357a32c6962d61e892fa4", + "sha256": "afeed2d7065b2972e8b69f09f3532a996449c98e92d630e718af0fec6a245f15" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.2-cp36-cp36m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "699677dbf36357a32c6962d61e892fa4", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 503275, + "upload_time": "2021-12-15T14:06:17", + "upload_time_iso_8601": "2021-12-15T14:06:17.569686Z", + "url": "https://files.pythonhosted.org/packages/ac/01/c8bf3d1ef01476541042fcbf59ae834080b4ebdcefdada72e048c000f2e5/filprofiler-2021.12.2-cp36-cp36m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "0315381af962288b5ca4dad8e207ec87", + "sha256": "b7ada886c939dee248aeef4ff61ca14af283fadbc8ecf7dcfb79dda177a5f2dd" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.2-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "0315381af962288b5ca4dad8e207ec87", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2713867, + "upload_time": "2021-12-15T13:47:58", + "upload_time_iso_8601": "2021-12-15T13:47:58.148107Z", + "url": "https://files.pythonhosted.org/packages/d0/ca/a909e1fdc9b6d8238b1d79364bccff4dd4b9263e00ea5020e71690ddd199/filprofiler-2021.12.2-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "9a430d24f5e67a9dca1d07942d938436", + "sha256": "494c3da7c9720eabe017e8df48ebc684d04369430eeaf4d1a2fb07dec7b262a2" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.2-cp37-cp37m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "9a430d24f5e67a9dca1d07942d938436", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 503367, + "upload_time": "2021-12-15T14:06:18", + "upload_time_iso_8601": "2021-12-15T14:06:18.871941Z", + "url": "https://files.pythonhosted.org/packages/d3/2a/fc056ea2f8597a323bfe91285997efa9293789c316bfbd9db1108592f6fd/filprofiler-2021.12.2-cp37-cp37m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "630f81ea9064ee8c23fa0f7d7463a0a9", + "sha256": "7cf93cc4624a50ff59498576be89c85f04434b1ae61c7d341b444256d8996e84" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.2-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "630f81ea9064ee8c23fa0f7d7463a0a9", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2714034, + "upload_time": "2021-12-15T13:47:59", + "upload_time_iso_8601": "2021-12-15T13:47:59.454495Z", + "url": "https://files.pythonhosted.org/packages/37/a7/b89656000c8000c87655211c0c8cc2b9278573f9b3ec3e6b380a2e64747d/filprofiler-2021.12.2-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "34158d4a246b99cfacae425d0feeec74", + "sha256": "a6a78a3275fb4cb06e8e1bc58afc8e0d77255bce2cb9d2e5c4521a33a70f6ac4" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.2-cp38-cp38-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "34158d4a246b99cfacae425d0feeec74", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 503569, + "upload_time": "2021-12-15T14:06:19", + "upload_time_iso_8601": "2021-12-15T14:06:19.768632Z", + "url": "https://files.pythonhosted.org/packages/ee/89/def1bc50cb93b02082d2f239c336dd48d4ced6114d4a8a5205df22e5ed01/filprofiler-2021.12.2-cp38-cp38-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "d54a5af050a3f115cf4c54d21404432d", + "sha256": "381695ab9b91baeaec186567f3f8d3ca8fbdb2413ce427073d7d4f8e39cb01f4" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "d54a5af050a3f115cf4c54d21404432d", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2714197, + "upload_time": "2021-12-15T13:48:01", + "upload_time_iso_8601": "2021-12-15T13:48:01.483280Z", + "url": "https://files.pythonhosted.org/packages/8a/be/c5f81f7f367356f7929acd0baa5d81d74d1048855fbcb9bc175950866fe9/filprofiler-2021.12.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "2f4ae3bbbf9011021d45a2a73089d2e2", + "sha256": "942f9c65210535ae278867f21bbfe1f3a69b845ac0f42738c14dd04b8d637577" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.2-cp39-cp39-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "2f4ae3bbbf9011021d45a2a73089d2e2", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 503857, + "upload_time": "2021-12-15T14:06:20", + "upload_time_iso_8601": "2021-12-15T14:06:20.590997Z", + "url": "https://files.pythonhosted.org/packages/b0/a4/3cbf71c80ccf9aefdf346832997ae41eb4081f10fedd848520ecfb8e9a7a/filprofiler-2021.12.2-cp39-cp39-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "442eb497bdbb35f1d0c238fc05f645b6", + "sha256": "aabc3cedb43a3f1f40e9add206b07ba423e4d04e45bf78a7fa37f5ae0607f2c0" + }, + "downloads": -1, + "filename": "filprofiler-2021.12.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "442eb497bdbb35f1d0c238fc05f645b6", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2714771, + "upload_time": "2021-12-15T13:48:02", + "upload_time_iso_8601": "2021-12-15T13:48:02.878035Z", + "url": "https://files.pythonhosted.org/packages/b5/69/5ee941b783ca60c7abe9e4c978dcdcbd3b844bd7cfce6c29b0871210eefb/filprofiler-2021.12.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2021.3.0": [ + { + "comment_text": "", + "digests": { + "md5": "1179984e47a8f2c782809058501b377f", + "sha256": "ee0b65f40ecf9968695ad17f2c172dff1c6d06bc333c4250b657558bc2a94289" + }, + "downloads": -1, + "filename": "filprofiler-2021.3.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "1179984e47a8f2c782809058501b377f", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 373441, + "upload_time": "2021-03-19T14:37:55", + "upload_time_iso_8601": "2021-03-19T14:37:55.927201Z", + "url": "https://files.pythonhosted.org/packages/0f/f8/10757ba1447476e1ca94d1fd7d55dbce3f4c7549e3ee1a8a728cb4c8d360/filprofiler-2021.3.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "f8683693fe36d5a1d1c35d9b97f56df5", + "sha256": "59206d3b255443a123f7a8f77b84ddd37c4a670800c250b410c0dd4f44844eeb" + }, + "downloads": -1, + "filename": "filprofiler-2021.3.0-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "f8683693fe36d5a1d1c35d9b97f56df5", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2685078, + "upload_time": "2021-03-19T14:37:18", + "upload_time_iso_8601": "2021-03-19T14:37:18.027134Z", + "url": "https://files.pythonhosted.org/packages/c2/82/21472f56ac10d33ebfc1973f25b9d69e4932ccb0e24189c844ae7c58da0e/filprofiler-2021.3.0-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "9601b57903b4e01991205ae3f8fb0dd3", + "sha256": "5a5b88fd10f0a66c890f1db5594ef386824e93c9c6a550853fe9e9d6bf3a1aba" + }, + "downloads": -1, + "filename": "filprofiler-2021.3.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "9601b57903b4e01991205ae3f8fb0dd3", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 373457, + "upload_time": "2021-03-19T14:37:51", + "upload_time_iso_8601": "2021-03-19T14:37:51.917009Z", + "url": "https://files.pythonhosted.org/packages/4a/7f/2860210bdbddb8891d554964d25712a3115dbcede09601898782c4fcacb0/filprofiler-2021.3.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "ace7a0244a924a6000a3f359af4e7ea7", + "sha256": "8f680f52923b935fc8a620082937ec798682405f2880bb21baab7f02f64f9a14" + }, + "downloads": -1, + "filename": "filprofiler-2021.3.0-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "ace7a0244a924a6000a3f359af4e7ea7", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2686131, + "upload_time": "2021-03-19T14:37:19", + "upload_time_iso_8601": "2021-03-19T14:37:19.951194Z", + "url": "https://files.pythonhosted.org/packages/f3/99/3fa2721504fada5b2bf9b72966621f4bc6b74ea27c899a5404c517ad437b/filprofiler-2021.3.0-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "13fde8a53413f70eebb55f23bda57f12", + "sha256": "a4b552fd7b7090c0a4df52a1454903871d406de21e3e3b1c1acee403ff100cd0" + }, + "downloads": -1, + "filename": "filprofiler-2021.3.0-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "13fde8a53413f70eebb55f23bda57f12", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 373495, + "upload_time": "2021-03-19T14:39:00", + "upload_time_iso_8601": "2021-03-19T14:39:00.625106Z", + "url": "https://files.pythonhosted.org/packages/07/46/492ba6df36db4adc54fd3564b3d78eafa1a060400cb0d6c0b3507f5f2412/filprofiler-2021.3.0-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "3c94bc11ba84adf906d01bb1745bb1dc", + "sha256": "082b1a02643ab0ae1887112fa94f676457a80f0d52a1da1d7288b86a8c890a26" + }, + "downloads": -1, + "filename": "filprofiler-2021.3.0-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "3c94bc11ba84adf906d01bb1745bb1dc", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2684811, + "upload_time": "2021-03-19T14:37:21", + "upload_time_iso_8601": "2021-03-19T14:37:21.201101Z", + "url": "https://files.pythonhosted.org/packages/ba/50/23312f9ee12f3feec8626b1630aae5fc9d0705369cfffd0203eb1332947d/filprofiler-2021.3.0-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "c51410cb338bc6c2ab147037bb5877f4", + "sha256": "8597daaa96ee514e42238403a82215828b1e7aa931529596622068ad5a4d860d" + }, + "downloads": -1, + "filename": "filprofiler-2021.3.0-cp39-cp39-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "c51410cb338bc6c2ab147037bb5877f4", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 373500, + "upload_time": "2021-03-19T14:38:45", + "upload_time_iso_8601": "2021-03-19T14:38:45.310613Z", + "url": "https://files.pythonhosted.org/packages/65/6f/de2d9d8551687208314b2bbff9e678fb37a17112c0b39e32b3195c52a280/filprofiler-2021.3.0-cp39-cp39-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "ba13cabff642f57738f5b4a0ac2511d7", + "sha256": "910c5d1861e74310f20dce6e2813bb0346f3ea96c13c94031f3af7de4aa25ebd" + }, + "downloads": -1, + "filename": "filprofiler-2021.3.0-cp39-cp39-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "ba13cabff642f57738f5b4a0ac2511d7", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2684642, + "upload_time": "2021-03-19T14:37:23", + "upload_time_iso_8601": "2021-03-19T14:37:23.030258Z", + "url": "https://files.pythonhosted.org/packages/0e/9f/3751b62968c5e5ef45e6293fa414df4c77c953f72181d04fd06b28f497f0/filprofiler-2021.3.0-cp39-cp39-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2021.4.0": [ + { + "comment_text": "", + "digests": { + "md5": "43bac278c712959f6088d3b773aad759", + "sha256": "e3619cbced8c20398d1921f54c8da609100febc06c2d0b2dd492bf872ec67119" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "43bac278c712959f6088d3b773aad759", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 377525, + "upload_time": "2021-04-01T19:14:10", + "upload_time_iso_8601": "2021-04-01T19:14:10.209495Z", + "url": "https://files.pythonhosted.org/packages/88/13/b0482b0b2168d1bd63af6d9942e823b8b92b70643d1ade20d9fba0fdeb99/filprofiler-2021.4.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "ebbffc6be5e854273e355ce559f62fd8", + "sha256": "4c20b536bb0e8a92e731c0b338f3daef56d41c48a77e17b0d02f73d4d6c579f3" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.0-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "ebbffc6be5e854273e355ce559f62fd8", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2698384, + "upload_time": "2021-04-01T18:55:34", + "upload_time_iso_8601": "2021-04-01T18:55:34.193789Z", + "url": "https://files.pythonhosted.org/packages/36/8a/c0c2c6be995821571959b3a7eb94973deaf8ffb902107ec4b3acfae994fe/filprofiler-2021.4.0-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "435e8889f1a5654b10b6909cf7d318dd", + "sha256": "bfe0bb1a98d131d3eae29660133f64d9f5e9703f5f697b5868f85bd52ba39898" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "435e8889f1a5654b10b6909cf7d318dd", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 377554, + "upload_time": "2021-04-01T19:08:28", + "upload_time_iso_8601": "2021-04-01T19:08:28.014304Z", + "url": "https://files.pythonhosted.org/packages/e8/00/400ad67e8154ce2d02871059edc5182d154dd479ba7dcca140ed838a9a9c/filprofiler-2021.4.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "ab45fff6dde54acc1aecd2201454c751", + "sha256": "90ee5309e55f0a790780b9ba99292c6faf858a1c2ecebeb6d611006b7826be4a" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.0-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "ab45fff6dde54acc1aecd2201454c751", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2698977, + "upload_time": "2021-04-01T18:55:35", + "upload_time_iso_8601": "2021-04-01T18:55:35.544794Z", + "url": "https://files.pythonhosted.org/packages/d7/a6/f8638d13b4dbfa431de261a53dcb72a9b5be2f18a0677c071045d3fc0e78/filprofiler-2021.4.0-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "bfbe91883ffc9dadafdf52ad72fd82b8", + "sha256": "ec8a531f9d58892faaddb110224ba60f15cdbdb798d2dd4e26c26d7040b73c46" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.0-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "bfbe91883ffc9dadafdf52ad72fd82b8", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 378283, + "upload_time": "2021-04-01T19:10:55", + "upload_time_iso_8601": "2021-04-01T19:10:55.882327Z", + "url": "https://files.pythonhosted.org/packages/e8/43/4ef5b6010f920f4885d8540155afa3de2e92203fb78a7392577815d9d573/filprofiler-2021.4.0-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "3a394737679212de26eac4266437d477", + "sha256": "c172bd8a5ff845c6241e2bdd9dedc1574b2b954a0c851ab9baf2a68eb49f9547" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.0-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "3a394737679212de26eac4266437d477", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2698280, + "upload_time": "2021-04-01T18:55:37", + "upload_time_iso_8601": "2021-04-01T18:55:37.064160Z", + "url": "https://files.pythonhosted.org/packages/2a/f2/197659e7af06144e9a357c944c5d1da354f1bcbe5111c6614729a86f0da6/filprofiler-2021.4.0-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "699ae6e2ce888535ebdc7f26ed2d06f5", + "sha256": "aa1b345961e9ef81403bed2f39ae4844cae8f63753ff8c478a294de0e43306e6" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.0-cp39-cp39-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "699ae6e2ce888535ebdc7f26ed2d06f5", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 378283, + "upload_time": "2021-04-01T19:13:25", + "upload_time_iso_8601": "2021-04-01T19:13:25.604214Z", + "url": "https://files.pythonhosted.org/packages/95/2a/e8f0171f2be99bfcef593567537bcc0ee9193274e31028770330ff688cef/filprofiler-2021.4.0-cp39-cp39-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "86c73377e26fb29e51f6050cdd12aa8d", + "sha256": "3ed08fd1d5def3ea9e7becfe4a56f612b4809d1b7de2279f0ba9eec0614f0997" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.0-cp39-cp39-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "86c73377e26fb29e51f6050cdd12aa8d", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2698139, + "upload_time": "2021-04-01T18:55:38", + "upload_time_iso_8601": "2021-04-01T18:55:38.294002Z", + "url": "https://files.pythonhosted.org/packages/7e/b8/cb68eaaf4dd3b2bd9bffa49e3e11ac4d30fd4142d84f95492312de211b76/filprofiler-2021.4.0-cp39-cp39-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2021.4.1": [ + { + "comment_text": "", + "digests": { + "md5": "f395df815a061eb3add62b67fc9ef637", + "sha256": "d4cab252a115119c9271ba22dcce9e95ea889a3ec2e4bf00cbc6d8ada2541746" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.1-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "f395df815a061eb3add62b67fc9ef637", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 377210, + "upload_time": "2021-04-08T20:33:13", + "upload_time_iso_8601": "2021-04-08T20:33:13.755893Z", + "url": "https://files.pythonhosted.org/packages/d6/22/a7c981ab76ed78a9570ce6a61f152506b92eb529c919cfcab89b3ce9bdb6/filprofiler-2021.4.1-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "63d17b7eadbc62e9cbf4e5b969c32311", + "sha256": "2d6c6340cde08c20c42372d32a0e0de4771e1186061564cb09c5047be56a0c42" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.1-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "63d17b7eadbc62e9cbf4e5b969c32311", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2697601, + "upload_time": "2021-04-08T20:26:10", + "upload_time_iso_8601": "2021-04-08T20:26:10.144331Z", + "url": "https://files.pythonhosted.org/packages/80/c0/c5fa05e8b8d57f3eb3e3710494e0019ae35daefc27fbd49f35f87f13943f/filprofiler-2021.4.1-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "bc8dd1842611b09d9693556835aba86c", + "sha256": "2ec928ff08b698bb2aad616e4d44d6698b9424e1c5c4f3701191d9ce8034028c" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.1-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "bc8dd1842611b09d9693556835aba86c", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 377215, + "upload_time": "2021-04-08T20:38:42", + "upload_time_iso_8601": "2021-04-08T20:38:42.381704Z", + "url": "https://files.pythonhosted.org/packages/b5/f5/a666c69b51920a6465b708dfc02bcc1418d949abd8c35f4af299b616b2e8/filprofiler-2021.4.1-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "54bf91b1de74ca6b5a343964c0070a91", + "sha256": "2dfbd16e45f5b5e8000a1944ed6e24d83c2bfb576897c9a1da8110f42298fe58" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.1-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "54bf91b1de74ca6b5a343964c0070a91", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2698472, + "upload_time": "2021-04-08T20:26:11", + "upload_time_iso_8601": "2021-04-08T20:26:11.881970Z", + "url": "https://files.pythonhosted.org/packages/d9/ca/a6924e92c7daeb88ac481def11ae1e470899e7f94397a29d66719404b596/filprofiler-2021.4.1-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "a5480b20ceebbd87d21324aa46a53985", + "sha256": "cab985415f558637bc34de89ffcd8af8bc1001ea02c53d53896ac4e9e7db0bd1" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.1-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "a5480b20ceebbd87d21324aa46a53985", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 377902, + "upload_time": "2021-04-08T20:39:09", + "upload_time_iso_8601": "2021-04-08T20:39:09.594520Z", + "url": "https://files.pythonhosted.org/packages/46/08/a9f3e62915ec6f14fb7baeb669872370eae901d682029d1a30b3505574a0/filprofiler-2021.4.1-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "a9c095b5f2cedaf82ae7fa27e34f33c5", + "sha256": "4e7a444a08a2f2ced2d0113d45f6e2dcec0989d2bbe99b2804eecbbd563b97d4" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.1-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "a9c095b5f2cedaf82ae7fa27e34f33c5", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2697376, + "upload_time": "2021-04-08T20:26:13", + "upload_time_iso_8601": "2021-04-08T20:26:13.508598Z", + "url": "https://files.pythonhosted.org/packages/fd/a3/94035d1434c3f64cc00af8ab4a5116f1f9d83fde351e01d9394120fc43f3/filprofiler-2021.4.1-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "8b42afd8f94736471984547fbc01f87f", + "sha256": "ec79bae45e20e191d6e9a0ca60dd874b921e8fbd2d36cbddb28211c5a33a9c0c" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.1-cp39-cp39-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "8b42afd8f94736471984547fbc01f87f", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 377900, + "upload_time": "2021-04-08T20:42:26", + "upload_time_iso_8601": "2021-04-08T20:42:26.899434Z", + "url": "https://files.pythonhosted.org/packages/3c/82/6bb88a91861cc91394a657156a34c1d26b789f90aca430304a0acd082d2a/filprofiler-2021.4.1-cp39-cp39-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "2e74aad4c2f8c0e789ba25ce5ea66aba", + "sha256": "5f56981a1058d37ee482bb50735439b1375be06f33811fb00518fe4f5f729809" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.1-cp39-cp39-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "2e74aad4c2f8c0e789ba25ce5ea66aba", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2697333, + "upload_time": "2021-04-08T20:26:14", + "upload_time_iso_8601": "2021-04-08T20:26:14.948595Z", + "url": "https://files.pythonhosted.org/packages/22/0b/f604d37ae30e23c63225bf281b1e4de980a132c4f3920e1ed64fee61e961/filprofiler-2021.4.1-cp39-cp39-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2021.4.2": [ + { + "comment_text": "", + "digests": { + "md5": "86218ff7c42489c290f4a54fe70d8843", + "sha256": "fdca902b1ec0bed352d50b82853f937e47dca23e972977df5cc97ab5aa3a8ba6" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.2-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "86218ff7c42489c290f4a54fe70d8843", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 378885, + "upload_time": "2021-04-14T18:06:35", + "upload_time_iso_8601": "2021-04-14T18:06:35.903291Z", + "url": "https://files.pythonhosted.org/packages/b4/c7/e80e158f54863b1e4e3ed8f362aac7ac1897165724a4db7cf11310d7a4fb/filprofiler-2021.4.2-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "91a316b7a04190af8b2c1e0e8585ec45", + "sha256": "42a11f927eb22b610f6176aa82db9fd868e823f642b7d936ad4d213e27390a76" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.2-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "91a316b7a04190af8b2c1e0e8585ec45", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2699650, + "upload_time": "2021-04-14T17:47:48", + "upload_time_iso_8601": "2021-04-14T17:47:48.390903Z", + "url": "https://files.pythonhosted.org/packages/cb/d4/eddc29f96a74dec3c444db910bdf8ab27d376de3d4974ad362a1bc38cb8b/filprofiler-2021.4.2-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "6009d0b254623b551af5e7ddcd4dd75d", + "sha256": "9b820651fd0b56d5a72705768ded482c9d78c6f3c0da8294ab19226c247ac3f2" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.2-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "6009d0b254623b551af5e7ddcd4dd75d", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 378859, + "upload_time": "2021-04-14T17:58:13", + "upload_time_iso_8601": "2021-04-14T17:58:13.908047Z", + "url": "https://files.pythonhosted.org/packages/a2/68/be1d67f0a13180bb0f8fd5aea4ce0e09c8c5b044c8ba00bd94756967db82/filprofiler-2021.4.2-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "9ed9e6873c4d77c61dc4f91b10f924af", + "sha256": "2719b6e6189fda08272eb4e7c6d7d8770fcc3898f42b01d2d7e23bcec8de17d4" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.2-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "9ed9e6873c4d77c61dc4f91b10f924af", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2700150, + "upload_time": "2021-04-14T17:47:51", + "upload_time_iso_8601": "2021-04-14T17:47:51.262184Z", + "url": "https://files.pythonhosted.org/packages/b4/d3/0253480478c8cdba06476e588b67c73c8b5b9abf9ce6a928bf3b82945735/filprofiler-2021.4.2-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "6df730dfeb7e6f80b123b47f7813fe18", + "sha256": "96c76b1b745740944f61761b555b349aeb274aefe11366f3d889797508a9a24e" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.2-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "6df730dfeb7e6f80b123b47f7813fe18", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 379455, + "upload_time": "2021-04-14T18:06:14", + "upload_time_iso_8601": "2021-04-14T18:06:14.163304Z", + "url": "https://files.pythonhosted.org/packages/13/bf/993e4b1bf7938cfa1e692067f3281e056fabb7dd11897e4c759f9e86bcb0/filprofiler-2021.4.2-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "0a246a29c9a09eb849d5b83e097876c3", + "sha256": "5195fc75644f65e68d21d633bbb3f2ab7049d9a91761950a5d64c357c6db8c36" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.2-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "0a246a29c9a09eb849d5b83e097876c3", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2699588, + "upload_time": "2021-04-14T17:47:53", + "upload_time_iso_8601": "2021-04-14T17:47:53.150785Z", + "url": "https://files.pythonhosted.org/packages/e8/64/34d1ba52f3b24e1020d3dd75b5c10b8d0fd083d84fe2bf1c98b8f78f7af9/filprofiler-2021.4.2-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "90e3b7a237cd79c1c621e7b665413c97", + "sha256": "a3f4a0a5d19229639f9e78e94289b655bac036b34fdd516be3ab935209d4a110" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.2-cp39-cp39-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "90e3b7a237cd79c1c621e7b665413c97", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 379461, + "upload_time": "2021-04-14T18:05:56", + "upload_time_iso_8601": "2021-04-14T18:05:56.310786Z", + "url": "https://files.pythonhosted.org/packages/eb/67/acee188f17f95d8b96543b8d89fa0e1214941aa6926c68187a833df3cf53/filprofiler-2021.4.2-cp39-cp39-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "017021940ea8dfb7e20be88b888d64bc", + "sha256": "c7f3aca64ea81d51a9c1c0cf051538650cc23709cf07f36891a586a5753f2d5e" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.2-cp39-cp39-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "017021940ea8dfb7e20be88b888d64bc", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2699376, + "upload_time": "2021-04-14T17:47:54", + "upload_time_iso_8601": "2021-04-14T17:47:54.946782Z", + "url": "https://files.pythonhosted.org/packages/2d/e5/c58b1322ed825a270c412fea8e3df24b2e0f729d5b0f8cef306295123be4/filprofiler-2021.4.2-cp39-cp39-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2021.4.3": [ + { + "comment_text": "", + "digests": { + "md5": "269be695d7629aab221b0b4a31a096db", + "sha256": "f7deebbfc3023fab6c277dce9b327e25502a5755a1421aef9cf87e0d5c4ff02c" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.3-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "269be695d7629aab221b0b4a31a096db", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 378965, + "upload_time": "2021-04-15T21:23:15", + "upload_time_iso_8601": "2021-04-15T21:23:15.665299Z", + "url": "https://files.pythonhosted.org/packages/24/a2/382518eba93d86f14a5eecfbe8a724bdecb7e51e20f737b4cfd7bbfa0305/filprofiler-2021.4.3-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "4b4411a8152b5bf278dd2bbd0b30903f", + "sha256": "eae90ecafc01a586f8a0063ad0a1d6252e7508b1c0d0699123f92cdbf7ae67b3" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.3-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "4b4411a8152b5bf278dd2bbd0b30903f", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2700333, + "upload_time": "2021-04-15T21:11:34", + "upload_time_iso_8601": "2021-04-15T21:11:34.689782Z", + "url": "https://files.pythonhosted.org/packages/bd/3d/cb5b54a5cb60298af9fe3339828d8d809d1b043e8ace3da4f70c88148d45/filprofiler-2021.4.3-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "dc148feef27bc2ab1df8568c947196ad", + "sha256": "589739422dd1bd6e812ddfb9893274429d17229119e6ba188259dbce2856ad7e" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.3-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "dc148feef27bc2ab1df8568c947196ad", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 378935, + "upload_time": "2021-04-15T21:23:22", + "upload_time_iso_8601": "2021-04-15T21:23:22.272049Z", + "url": "https://files.pythonhosted.org/packages/5f/d6/22674afe6c3f8ba3797029b9d037da02885487dd4cb572d5c9caa7703f82/filprofiler-2021.4.3-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "2f90326811bfac29a9a5cd1b3eb88998", + "sha256": "d93118cccc6cf700914f6bcedb418ae3f1484831f3fa309ee1167bed71c4de58" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.3-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "2f90326811bfac29a9a5cd1b3eb88998", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2700808, + "upload_time": "2021-04-15T21:11:36", + "upload_time_iso_8601": "2021-04-15T21:11:36.640913Z", + "url": "https://files.pythonhosted.org/packages/b6/a0/bfdf9e4cc4550d6b97801745fb05eb679105454bf93969b0d3d31fdd6409/filprofiler-2021.4.3-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "5a14bbe9773825aa749a2adcba1bffe1", + "sha256": "895e90f6c3946fb1ab816271ad5b463c5f6a72c1f2091f6902f146ad78f16b4b" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.3-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "5a14bbe9773825aa749a2adcba1bffe1", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 379539, + "upload_time": "2021-04-15T21:28:24", + "upload_time_iso_8601": "2021-04-15T21:28:24.700887Z", + "url": "https://files.pythonhosted.org/packages/0c/88/d869e606005abe34be15b0e2af526b9853422af90d4ad72992b82304fe27/filprofiler-2021.4.3-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "2ac61dae557b543da87f755a11d20b37", + "sha256": "d5df4e2f7dc0589e31a96c4d48bd803f2a377dcfedd96f2f3dd9f5ef62ab66d9" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.3-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "2ac61dae557b543da87f755a11d20b37", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2700304, + "upload_time": "2021-04-15T21:11:38", + "upload_time_iso_8601": "2021-04-15T21:11:38.352104Z", + "url": "https://files.pythonhosted.org/packages/f8/2f/4a635fbe9f9b1187e25d4dbf9ae583ee79d9bc4e2b4a78edb52fd90de1ab/filprofiler-2021.4.3-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "99f86cca9d3de0dc496472293c40be29", + "sha256": "33986511e5d3e48c823468ae1f28b53600389a7928f4b8649f56d98e2a3bf48f" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.3-cp39-cp39-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "99f86cca9d3de0dc496472293c40be29", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 379546, + "upload_time": "2021-04-15T21:29:55", + "upload_time_iso_8601": "2021-04-15T21:29:55.108389Z", + "url": "https://files.pythonhosted.org/packages/57/73/d15540447cb53fde6db767a2df3146664ef085a42fe12112db17fa775f8a/filprofiler-2021.4.3-cp39-cp39-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "dda31eaeeadaefd4063546b8560aa4a0", + "sha256": "a2b45460295b217e13db1df0979cdd9058bde60315bfc16ee88d726497842d6a" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.3-cp39-cp39-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "dda31eaeeadaefd4063546b8560aa4a0", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2700170, + "upload_time": "2021-04-15T21:11:39", + "upload_time_iso_8601": "2021-04-15T21:11:39.669793Z", + "url": "https://files.pythonhosted.org/packages/c2/cc/df684aba17a08c8ff29d3c96a4cb1ecf88017a654c33ea5c5fa1088486bc/filprofiler-2021.4.3-cp39-cp39-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2021.4.4": [ + { + "comment_text": "", + "digests": { + "md5": "90a1ceb82762d8edd4c1d04edb881dd3", + "sha256": "f4dca73c892dfdd0f31689c66424cb82fe45bce07bf8dbcf74f2c49e6600fe7d" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.4-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "90a1ceb82762d8edd4c1d04edb881dd3", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 469407, + "upload_time": "2021-04-28T23:11:21", + "upload_time_iso_8601": "2021-04-28T23:11:21.926443Z", + "url": "https://files.pythonhosted.org/packages/19/03/69529897d62c6af17459511a5021c1b62ceb699029643410756b3052485d/filprofiler-2021.4.4-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "685174d40afbd08aca95d18513ade1fb", + "sha256": "29f75f933d1c853b6a9b826ed961d6f4664da4d60b255d74f68960ece2eda2f1" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.4-cp36-cp36m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "685174d40afbd08aca95d18513ade1fb", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2777593, + "upload_time": "2021-04-28T23:08:18", + "upload_time_iso_8601": "2021-04-28T23:08:18.601714Z", + "url": "https://files.pythonhosted.org/packages/e7/5c/5e80450549b37fbf4a7321e6664cc90b5773e5cb9ead099a5e324dc498f8/filprofiler-2021.4.4-cp36-cp36m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "ce83fb55998c8a621bd6d15ae8c8818d", + "sha256": "ace5589b4d6c4b052c886c214d8a0bcc6e6b263f899e42fb6014cb8b4e753257" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.4-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "ce83fb55998c8a621bd6d15ae8c8818d", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 469349, + "upload_time": "2021-04-28T23:15:51", + "upload_time_iso_8601": "2021-04-28T23:15:51.085397Z", + "url": "https://files.pythonhosted.org/packages/ea/39/326c3a27cb72ec88bb5fa733e25f71c6845788732cae606cced0464a3aa0/filprofiler-2021.4.4-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "40991f0f21714779ca5626b5385a92fa", + "sha256": "bf02df4f5bd85b0a713e53dde27cf7af67b3db3cb8f4ff34161dbd0f7b34e943" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.4-cp37-cp37m-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "40991f0f21714779ca5626b5385a92fa", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2778834, + "upload_time": "2021-04-28T23:08:20", + "upload_time_iso_8601": "2021-04-28T23:08:20.143686Z", + "url": "https://files.pythonhosted.org/packages/48/06/fb6482ab4986c69b6c054b2217bf03db2d813a1ea5ca74740c170e0b4c75/filprofiler-2021.4.4-cp37-cp37m-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "c7728c6f6d661588a1ea29ed29cce881", + "sha256": "c1c5f5190bdfe903885ab8ab987c24116a8213777febe35498ca9395eb5e16f2" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.4-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "c7728c6f6d661588a1ea29ed29cce881", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 469785, + "upload_time": "2021-04-28T23:17:38", + "upload_time_iso_8601": "2021-04-28T23:17:38.711751Z", + "url": "https://files.pythonhosted.org/packages/84/e3/a52cf080938a2308268c484640a32ea4253a75e97b99ce0279cc7d531923/filprofiler-2021.4.4-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "924514a5d3774c597febac70a7840803", + "sha256": "6068950c7954c662fe6f2bb8ec32f8abcc3177660e94fe508c0734f00b6b3f50" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.4-cp38-cp38-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "924514a5d3774c597febac70a7840803", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2777788, + "upload_time": "2021-04-28T23:08:21", + "upload_time_iso_8601": "2021-04-28T23:08:21.637301Z", + "url": "https://files.pythonhosted.org/packages/d5/1a/8b0fb5f894a1d3e0dcd1ead9994df17aa0b43f31ee7b2f84b85c9673f330/filprofiler-2021.4.4-cp38-cp38-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "167c4c16836e9687f5e34ea1d8406fc3", + "sha256": "046f913f142eab5ee0f3e98e255ce98837b984ae2fa4588b9208a6191562f7f6" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.4-cp39-cp39-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "167c4c16836e9687f5e34ea1d8406fc3", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 469790, + "upload_time": "2021-04-28T23:17:08", + "upload_time_iso_8601": "2021-04-28T23:17:08.354448Z", + "url": "https://files.pythonhosted.org/packages/34/44/ba779d2e4e5a85ec028e5165551c4ed037122c1b0c71bb00b00d5b043d07/filprofiler-2021.4.4-cp39-cp39-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "9be7e6692241ab371ec291882cdd3c1c", + "sha256": "f3d60665f556509462b4540149699f26a9e4f6791c986ee23687c242bfb79fc6" + }, + "downloads": -1, + "filename": "filprofiler-2021.4.4-cp39-cp39-manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "9be7e6692241ab371ec291882cdd3c1c", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2777453, + "upload_time": "2021-04-28T23:08:22", + "upload_time_iso_8601": "2021-04-28T23:08:22.956328Z", + "url": "https://files.pythonhosted.org/packages/54/f6/56bb83913acc3c448dbb8985d2daf0c970b94e5230314d1161fae92f162d/filprofiler-2021.4.4-cp39-cp39-manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2021.5.0": [ + { + "comment_text": "", + "digests": { + "md5": "60989a8205261538107224b5e42503ca", + "sha256": "0e6a4680124b6f75db0f1b2bc8fe6c149e68aaed800b36f3cce1ea091337c277" + }, + "downloads": -1, + "filename": "filprofiler-2021.5.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "60989a8205261538107224b5e42503ca", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 457605, + "upload_time": "2021-05-06T18:33:23", + "upload_time_iso_8601": "2021-05-06T18:33:23.540840Z", + "url": "https://files.pythonhosted.org/packages/be/3c/da27ed7d12bef0da88700742ccd78f418a3a1246dc3d6c239a86ecfd384f/filprofiler-2021.5.0-cp36-cp36m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "d6561d905b7114a1f3acf37ea6da2897", + "sha256": "3b42020728d424524a22cf4eede2cc3023de0f20ad3cbf067ec43e6d1838e976" + }, + "downloads": -1, + "filename": "filprofiler-2021.5.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "d6561d905b7114a1f3acf37ea6da2897", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2739268, + "upload_time": "2021-05-06T18:25:54", + "upload_time_iso_8601": "2021-05-06T18:25:54.466881Z", + "url": "https://files.pythonhosted.org/packages/4c/7a/bfab1e3890c39b7a10ec3566f179752fe1be82f2cf63afdc0e995af702df/filprofiler-2021.5.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "d012f316e5ce735af4270db211911bcb", + "sha256": "c5f3b4200139f1dc14da39bd09056761c6ae377cd77cf620441857736cc0ffeb" + }, + "downloads": -1, + "filename": "filprofiler-2021.5.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "d012f316e5ce735af4270db211911bcb", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 457612, + "upload_time": "2021-05-06T18:27:44", + "upload_time_iso_8601": "2021-05-06T18:27:44.478783Z", + "url": "https://files.pythonhosted.org/packages/9c/46/f4582095593f3efe40dc949c1d232f0f32880c96f965f2e16c17bb709504/filprofiler-2021.5.0-cp37-cp37m-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "3265912257b243093c0df3638cf73759", + "sha256": "a66c1d471e8b8240a2ab413a520f7594713e7867d27a9237fdfc380603be74ed" + }, + "downloads": -1, + "filename": "filprofiler-2021.5.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "3265912257b243093c0df3638cf73759", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2740259, + "upload_time": "2021-05-06T18:25:58", + "upload_time_iso_8601": "2021-05-06T18:25:58.003754Z", + "url": "https://files.pythonhosted.org/packages/f0/35/c874f65afb92c755ac073d9abb000aef996081e3f908d362699440d92590/filprofiler-2021.5.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "5948e44296165ef47cca198f80065d2f", + "sha256": "4e2d37b4d8160761800165dc304fe0931e37b52d6da2da1562723b554293daed" + }, + "downloads": -1, + "filename": "filprofiler-2021.5.0-cp38-cp38-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "5948e44296165ef47cca198f80065d2f", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 457359, + "upload_time": "2021-05-06T18:32:50", + "upload_time_iso_8601": "2021-05-06T18:32:50.615065Z", + "url": "https://files.pythonhosted.org/packages/f7/91/07480225a7c61a6c25a624234f77daa41a1e3ac864e0167b4a98520932a7/filprofiler-2021.5.0-cp38-cp38-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "14ce0a6e03b45ce6c3276a8ff256cf19", + "sha256": "3cb8f8982df9a1c50d8a3ab2fadb56ed0330836f9f7202e11e42f053b342fcc5" + }, + "downloads": -1, + "filename": "filprofiler-2021.5.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "14ce0a6e03b45ce6c3276a8ff256cf19", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2739024, + "upload_time": "2021-05-06T18:25:59", + "upload_time_iso_8601": "2021-05-06T18:25:59.658318Z", + "url": "https://files.pythonhosted.org/packages/26/07/4c60345e92d9c202c485db4d03927abbef54aa154022c646fa7905b717ee/filprofiler-2021.5.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "21227cd975528c6dc89bcc36ef4b61f7", + "sha256": "0bc2dc04c270408ff6502332a01dc1b07a89b20b23405a1e142d9d05139ad937" + }, + "downloads": -1, + "filename": "filprofiler-2021.5.0-cp39-cp39-macosx_10_14_x86_64.whl", + "has_sig": false, + "md5_digest": "21227cd975528c6dc89bcc36ef4b61f7", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 457362, + "upload_time": "2021-05-06T18:36:42", + "upload_time_iso_8601": "2021-05-06T18:36:42.806874Z", + "url": "https://files.pythonhosted.org/packages/0b/82/c1311063d68f6ed28c3c13c775a6944bb53b79127cd73f9e97d3da8fea22/filprofiler-2021.5.0-cp39-cp39-macosx_10_14_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "c55aff920e52ae4fec89112302a0bd48", + "sha256": "18c1d5083bee532fb7ae063f6264cebb6851a558e4d6d57eeeb9f64b521627a4" + }, + "downloads": -1, + "filename": "filprofiler-2021.5.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "c55aff920e52ae4fec89112302a0bd48", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2738841, + "upload_time": "2021-05-06T18:26:01", + "upload_time_iso_8601": "2021-05-06T18:26:01.850785Z", + "url": "https://files.pythonhosted.org/packages/6a/3b/3453b11dda3b3530a8f02ce8574719b6f19addf4e10b5b06195c9a785927/filprofiler-2021.5.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2021.7.0": [ + { + "comment_text": "", + "digests": { + "md5": "b1a3ced13107d353f5e3a949dc0941c6", + "sha256": "8643979537ae0441b1d2f75a68da9aad50ebec7a08b311dbc2eca45248d490dc" + }, + "downloads": -1, + "filename": "filprofiler-2021.7.0-cp36-cp36m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "b1a3ced13107d353f5e3a949dc0941c6", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 461874, + "upload_time": "2021-07-12T23:32:34", + "upload_time_iso_8601": "2021-07-12T23:32:34.283989Z", + "url": "https://files.pythonhosted.org/packages/ee/e6/dbc4b799204c44a1c41093ae97e0937f750928703e0628e66a4bc6394b95/filprofiler-2021.7.0-cp36-cp36m-macosx_10_15_x86_64.whl", + "yanked": true, + "yanked_reason": "Segfaults on Ubuntu" + }, + { + "comment_text": "", + "digests": { + "md5": "4208410e6f10244d174b8af654ceac53", + "sha256": "2b2a624d1f4173652a0bb4d4e1fac852e4d3179ec399ea3cfc20928f18c4ddef" + }, + "downloads": -1, + "filename": "filprofiler-2021.7.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "4208410e6f10244d174b8af654ceac53", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2644632, + "upload_time": "2021-07-12T23:26:45", + "upload_time_iso_8601": "2021-07-12T23:26:45.811253Z", + "url": "https://files.pythonhosted.org/packages/35/18/8032404449cba29c9e682b99a542f0826d2b67c31bd59af28f7ca1ce9fce/filprofiler-2021.7.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": true, + "yanked_reason": "Segfaults on Ubuntu" + }, + { + "comment_text": "", + "digests": { + "md5": "7203c719142b6200b2518b51ee2c24c3", + "sha256": "69d06eb525de32a2a1f501b247d9bd75233b2c5b37120798276a8c04026c290d" + }, + "downloads": -1, + "filename": "filprofiler-2021.7.0-cp37-cp37m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "7203c719142b6200b2518b51ee2c24c3", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 461845, + "upload_time": "2021-07-12T23:29:54", + "upload_time_iso_8601": "2021-07-12T23:29:54.915927Z", + "url": "https://files.pythonhosted.org/packages/b3/9f/3a52704500f2e56bcbe7e4d9bb0bab3850fd8e5155c6d8506ddc7aa1f1a9/filprofiler-2021.7.0-cp37-cp37m-macosx_10_15_x86_64.whl", + "yanked": true, + "yanked_reason": "Segfaults on Ubuntu" + }, + { + "comment_text": "", + "digests": { + "md5": "5d5f88c56d0dfb6a9838c709b04d9995", + "sha256": "6c5720957368e7442b2507a7d6815c84fc27cd37bc59eb29158eba1b22e73720" + }, + "downloads": -1, + "filename": "filprofiler-2021.7.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "5d5f88c56d0dfb6a9838c709b04d9995", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 5224222, + "upload_time": "2021-07-12T23:26:47", + "upload_time_iso_8601": "2021-07-12T23:26:47.706784Z", + "url": "https://files.pythonhosted.org/packages/18/dd/2959abd0bab3c83ae7dc4a84358a3fbb9fb32abe8b8e96655a977af81a9e/filprofiler-2021.7.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": true, + "yanked_reason": "Segfaults on Ubuntu" + }, + { + "comment_text": "", + "digests": { + "md5": "5a5fbb0079acfb29083e5b108bae6b1c", + "sha256": "08e5c04540e707bf838cb2fa69b677be76dc79e5c6ea340ddbb278a723c27fbb" + }, + "downloads": -1, + "filename": "filprofiler-2021.7.0-cp38-cp38-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "5a5fbb0079acfb29083e5b108bae6b1c", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 461508, + "upload_time": "2021-07-12T23:37:02", + "upload_time_iso_8601": "2021-07-12T23:37:02.199882Z", + "url": "https://files.pythonhosted.org/packages/6d/04/c47b2daad5423cbb64c40a14a1e28fd5b594f75091263b3c1b813483851d/filprofiler-2021.7.0-cp38-cp38-macosx_10_15_x86_64.whl", + "yanked": true, + "yanked_reason": "Segfaults on Ubuntu" + }, + { + "comment_text": "", + "digests": { + "md5": "21c8d354ee22d48f3fd84ead129e5449", + "sha256": "7bc509d8b515c3f9356acd201d1be76547045b499337db248edb92aa37f79dd0" + }, + "downloads": -1, + "filename": "filprofiler-2021.7.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "21c8d354ee22d48f3fd84ead129e5449", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 7803518, + "upload_time": "2021-07-12T23:26:49", + "upload_time_iso_8601": "2021-07-12T23:26:49.664830Z", + "url": "https://files.pythonhosted.org/packages/5c/60/2c6e49badf41618d5a0688410db0b797d1f21bbe68e121949efd42389049/filprofiler-2021.7.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": true, + "yanked_reason": "Segfaults on Ubuntu" + }, + { + "comment_text": "", + "digests": { + "md5": "b31c587478f0d4fb7eaf722caae8ea4f", + "sha256": "9d6c442240ee240a813a5f5cff788d6ed3c80c86d7a56f7d7d98217e7f6fa1ec" + }, + "downloads": -1, + "filename": "filprofiler-2021.7.0-cp39-cp39-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "b31c587478f0d4fb7eaf722caae8ea4f", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 461794, + "upload_time": "2021-07-12T23:35:24", + "upload_time_iso_8601": "2021-07-12T23:35:24.707287Z", + "url": "https://files.pythonhosted.org/packages/87/16/c29a956c19f16288fed1183db3e805f0b514693a6454e9765dc9cc691c74/filprofiler-2021.7.0-cp39-cp39-macosx_10_15_x86_64.whl", + "yanked": true, + "yanked_reason": "Segfaults on Ubuntu" + }, + { + "comment_text": "", + "digests": { + "md5": "8aa52ff08babea0aa6368f78807f297b", + "sha256": "c6613b5136d3a65fd06b061b5f24ac90ae626e150ed3a07e11e692e55b0fd7c0" + }, + "downloads": -1, + "filename": "filprofiler-2021.7.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "8aa52ff08babea0aa6368f78807f297b", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 10382905, + "upload_time": "2021-07-12T23:26:51", + "upload_time_iso_8601": "2021-07-12T23:26:51.404064Z", + "url": "https://files.pythonhosted.org/packages/78/25/129b051162a13f1070a73ff5c68afe21a120a78b34519579224d72ed7ebd/filprofiler-2021.7.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": true, + "yanked_reason": "Segfaults on Ubuntu" + } + ], + "2021.7.1": [ + { + "comment_text": "", + "digests": { + "md5": "a8c151afb63ccef4394192eeff241b67", + "sha256": "0bda23c07cf54500ab60aec8f66c2c00038fa85f800f9c008759fea1df251b1e" + }, + "downloads": -1, + "filename": "filprofiler-2021.7.1-cp36-cp36m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "a8c151afb63ccef4394192eeff241b67", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 461871, + "upload_time": "2021-07-19T00:16:41", + "upload_time_iso_8601": "2021-07-19T00:16:41.958546Z", + "url": "https://files.pythonhosted.org/packages/2c/16/82bbc947d893f4bbdebd53dbca1e631c514cd9b46d0e556fe2436f18bdf9/filprofiler-2021.7.1-cp36-cp36m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "8643aa40b4c6df18d4b15b0e20dbb5cc", + "sha256": "1cb345e2d4d601ed5cff0337aa50382c6df1cecfcb07f1d4cf978505091a173e" + }, + "downloads": -1, + "filename": "filprofiler-2021.7.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "8643aa40b4c6df18d4b15b0e20dbb5cc", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2644629, + "upload_time": "2021-07-19T00:24:55", + "upload_time_iso_8601": "2021-07-19T00:24:55.530254Z", + "url": "https://files.pythonhosted.org/packages/e0/6a/fb4048d18ccec72fbce4ea006a35122bfec5778c98a45ff9d84479c93238/filprofiler-2021.7.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "1dd79a72d0d75d716e211364528735e8", + "sha256": "abd25cc57cdd09c610dbb3d247b69c26997371b4830b05ab0a91d53e51e6440f" + }, + "downloads": -1, + "filename": "filprofiler-2021.7.1-cp37-cp37m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "1dd79a72d0d75d716e211364528735e8", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 461843, + "upload_time": "2021-07-19T00:22:25", + "upload_time_iso_8601": "2021-07-19T00:22:25.120902Z", + "url": "https://files.pythonhosted.org/packages/e1/fa/5acf96fb521159a6c4a616cfe97e4df2e7b10ca8a69a1b0011e22b716ea7/filprofiler-2021.7.1-cp37-cp37m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "8fadccdf4c456af7101b5f57f238f89f", + "sha256": "f48923efaaa4f9671e7e49efbf0cc5e9c98c05360fae624cfa62d28405480ab8" + }, + "downloads": -1, + "filename": "filprofiler-2021.7.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "8fadccdf4c456af7101b5f57f238f89f", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 5224948, + "upload_time": "2021-07-19T00:24:57", + "upload_time_iso_8601": "2021-07-19T00:24:57.292515Z", + "url": "https://files.pythonhosted.org/packages/7c/53/3feff9ac5da741a398c50deee9f0610048cbf10858ee82b75a7465c6eed7/filprofiler-2021.7.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "92c0dc05f3f20b61d7b332ca0bcaa58d", + "sha256": "453ab345cf38ef63336e49848d48023d3fff02f7f0b54a3afff223a2d9703b78" + }, + "downloads": -1, + "filename": "filprofiler-2021.7.1-cp38-cp38-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "92c0dc05f3f20b61d7b332ca0bcaa58d", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 461505, + "upload_time": "2021-07-19T00:25:59", + "upload_time_iso_8601": "2021-07-19T00:25:59.166242Z", + "url": "https://files.pythonhosted.org/packages/21/1b/a9489c2610afdfa36c22e04f84c54c1b68c5bf2b8e7538dc31ea6c4918e6/filprofiler-2021.7.1-cp38-cp38-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "6c2e9d9243308f7c0775a2844695d69b", + "sha256": "5269c46c2aa6bb33a6e381dffde200c0c1bbd44979cfdbf386473f3fa0451f5b" + }, + "downloads": -1, + "filename": "filprofiler-2021.7.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "6c2e9d9243308f7c0775a2844695d69b", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 7804219, + "upload_time": "2021-07-19T00:24:59", + "upload_time_iso_8601": "2021-07-19T00:24:59.221014Z", + "url": "https://files.pythonhosted.org/packages/a7/6b/b4414112744b93ca334c224695f2aaff1cb2e31e19086600c72b82d8fb87/filprofiler-2021.7.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "d43a5a8abcb3b4aac7edf0baaa658257", + "sha256": "cd8dfacbe8cd2241f1b249485659e744ffcf8b9427c93b9b936def60b445c994" + }, + "downloads": -1, + "filename": "filprofiler-2021.7.1-cp39-cp39-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "d43a5a8abcb3b4aac7edf0baaa658257", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 461793, + "upload_time": "2021-07-19T00:24:56", + "upload_time_iso_8601": "2021-07-19T00:24:56.237350Z", + "url": "https://files.pythonhosted.org/packages/9d/63/f3106fa2c2a2ea79a938fdd033ac21c33e9b5c25017a456bffe5766a4263/filprofiler-2021.7.1-cp39-cp39-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "254db7ff674036cb6b6b6929c1a1553b", + "sha256": "d8922f6fd66baa28bcbddcca6f92c8e688f7c72bec762f18421187e7b58e9c2e" + }, + "downloads": -1, + "filename": "filprofiler-2021.7.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "254db7ff674036cb6b6b6929c1a1553b", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 10383312, + "upload_time": "2021-07-19T00:25:01", + "upload_time_iso_8601": "2021-07-19T00:25:01.350204Z", + "url": "https://files.pythonhosted.org/packages/36/9e/f5a2098523158299785e1dffe076580bcaec588c39c49e9f472c2267153d/filprofiler-2021.7.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2021.8.0": [ + { + "comment_text": "", + "digests": { + "md5": "50a745bbf9d3bfcf29a4ad4f59da71c8", + "sha256": "ac25487783ce5c06c3f3678d1e3f040cb2cb54f608619ef9082113120f7a5da7" + }, + "downloads": -1, + "filename": "filprofiler-2021.8.0-cp36-cp36m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "50a745bbf9d3bfcf29a4ad4f59da71c8", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 463099, + "upload_time": "2021-08-17T22:06:05", + "upload_time_iso_8601": "2021-08-17T22:06:05.994189Z", + "url": "https://files.pythonhosted.org/packages/54/56/010dfd4f44e8464a89964c87644f3072556061f683158fc3c7d5b4769a76/filprofiler-2021.8.0-cp36-cp36m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "89512dc6e59e5625d86d60332a70225a", + "sha256": "6a6028efd2180e41cb735cd49c534d5d9223f4ab6e47d76151e29800ade7c966" + }, + "downloads": -1, + "filename": "filprofiler-2021.8.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "89512dc6e59e5625d86d60332a70225a", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2646884, + "upload_time": "2021-08-17T22:03:42", + "upload_time_iso_8601": "2021-08-17T22:03:42.844313Z", + "url": "https://files.pythonhosted.org/packages/c4/3c/5c545b0ced2a816bce92cf149def0b2b97850fd1a623e04ca9e99e89f072/filprofiler-2021.8.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "838ca13df48555ecef832e651c0e81ee", + "sha256": "eaa0903fc2b87c62823cf44c47852f438298627649634f8d31112bf560e34a1d" + }, + "downloads": -1, + "filename": "filprofiler-2021.8.0-cp37-cp37m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "838ca13df48555ecef832e651c0e81ee", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 463098, + "upload_time": "2021-08-17T22:09:58", + "upload_time_iso_8601": "2021-08-17T22:09:58.570680Z", + "url": "https://files.pythonhosted.org/packages/57/45/3b083925d61615fb2630724baee4e610a51846b0fc15bb643d91375b93ec/filprofiler-2021.8.0-cp37-cp37m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "2591aa4cb63dee5ee6a4f9ea487f8309", + "sha256": "ed01e4efd09cc586c8f0b5bca8240b1a545c9a379c345fbd5df3fe6dcb9af12f" + }, + "downloads": -1, + "filename": "filprofiler-2021.8.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "2591aa4cb63dee5ee6a4f9ea487f8309", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 5229621, + "upload_time": "2021-08-17T22:03:45", + "upload_time_iso_8601": "2021-08-17T22:03:45.158004Z", + "url": "https://files.pythonhosted.org/packages/ad/24/75d6abdf0246d9ea70cdb88014ae2eb9c8adc64e95ccd6dddf61052c7959/filprofiler-2021.8.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "a76bd22440c321ba33e68e9847a592e5", + "sha256": "f170e880b1c6f312dfead268264422099d8643d3818f6b825b82c8476ecd5784" + }, + "downloads": -1, + "filename": "filprofiler-2021.8.0-cp38-cp38-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "a76bd22440c321ba33e68e9847a592e5", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 463091, + "upload_time": "2021-08-17T22:10:54", + "upload_time_iso_8601": "2021-08-17T22:10:54.079755Z", + "url": "https://files.pythonhosted.org/packages/b2/61/08aae67bdb404ad536e662130da2a665ced8ebfcd827c75789c77d873464/filprofiler-2021.8.0-cp38-cp38-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "270c1fb060747ce0f5ccd3b69ab14b7a", + "sha256": "51bdb474512dd017cac8bed1fc941a31f5b49189fc0dc1d9b000d24d0e935c05" + }, + "downloads": -1, + "filename": "filprofiler-2021.8.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "270c1fb060747ce0f5ccd3b69ab14b7a", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 7811314, + "upload_time": "2021-08-17T22:03:47", + "upload_time_iso_8601": "2021-08-17T22:03:47.037247Z", + "url": "https://files.pythonhosted.org/packages/54/91/8fd38b217014e12d8aa3efcd25ec441aeff553df159bd411644a7b44b717/filprofiler-2021.8.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "7574ab0a5f043637f6a31e1be0c7b01a", + "sha256": "805c8d56f9e23075ef737aeceaeae0f4f6e42ec38df14a11e830d0e8a274d990" + }, + "downloads": -1, + "filename": "filprofiler-2021.8.0-cp39-cp39-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "7574ab0a5f043637f6a31e1be0c7b01a", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 463170, + "upload_time": "2021-08-17T22:12:14", + "upload_time_iso_8601": "2021-08-17T22:12:14.904887Z", + "url": "https://files.pythonhosted.org/packages/af/19/fbb855a1e619228bb1ec2af23c66b6d2356963a3118b84ec9213779c6d14/filprofiler-2021.8.0-cp39-cp39-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "645b78133586b49bfbd4e6ee200171fe", + "sha256": "1682b0dd4f344f8226de10f5aea42d9516af43f96183a23163ce1b3e08a150e0" + }, + "downloads": -1, + "filename": "filprofiler-2021.8.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "645b78133586b49bfbd4e6ee200171fe", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 10393165, + "upload_time": "2021-08-17T22:03:49", + "upload_time_iso_8601": "2021-08-17T22:03:49.022835Z", + "url": "https://files.pythonhosted.org/packages/52/94/7e1efc57445d6698f41c61fdea3b00be49a230bdfa20da34cb69246bc103/filprofiler-2021.8.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2021.9.0": [ + { + "comment_text": "", + "digests": { + "md5": "2fb9fc67b9c7f176406992dc2de8bd34", + "sha256": "bf422d73c9e48477ef7672177cb9f7abbe669ef58751ee0f65fd05ad3d04d47b" + }, + "downloads": -1, + "filename": "filprofiler-2021.9.0-cp36-cp36m-macosx_11_0_x86_64.whl", + "has_sig": false, + "md5_digest": "2fb9fc67b9c7f176406992dc2de8bd34", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 474642, + "upload_time": "2021-09-24T21:18:11", + "upload_time_iso_8601": "2021-09-24T21:18:11.865754Z", + "url": "https://files.pythonhosted.org/packages/99/54/6c56d487bba9962f31beac2fdf7b46ae25d1087e37f14186f7d25e77c6ef/filprofiler-2021.9.0-cp36-cp36m-macosx_11_0_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "840be45742a1c0935b97b24951a326e6", + "sha256": "8c2d94696d6af035cf1c64dea642a5726957203657c7fbf53461470cf497ea66" + }, + "downloads": -1, + "filename": "filprofiler-2021.9.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "840be45742a1c0935b97b24951a326e6", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2675449, + "upload_time": "2021-09-24T21:14:20", + "upload_time_iso_8601": "2021-09-24T21:14:20.866833Z", + "url": "https://files.pythonhosted.org/packages/57/52/2bd24940ee35aec89d40cb2f335345dad58da66205e690e9945a1b854abc/filprofiler-2021.9.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "7f9601ee706557015f76c916632e1c97", + "sha256": "2b4b0505c907925de628e38581debc05274727990f629bad602ec9997988aa91" + }, + "downloads": -1, + "filename": "filprofiler-2021.9.0-cp37-cp37m-macosx_11_0_x86_64.whl", + "has_sig": false, + "md5_digest": "7f9601ee706557015f76c916632e1c97", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 474535, + "upload_time": "2021-09-24T21:17:05", + "upload_time_iso_8601": "2021-09-24T21:17:05.946678Z", + "url": "https://files.pythonhosted.org/packages/a0/fb/fa98754ede16cf038db3d114beac40b57a0e49e98834ccb0ce000da1d7e9/filprofiler-2021.9.0-cp37-cp37m-macosx_11_0_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "e73540b1bb8ed5a477b3dd8a93c82402", + "sha256": "dbc1dcd79a2fb172b3e04110771f0dc15d23a51f61b30960f16ebe3f13afd49a" + }, + "downloads": -1, + "filename": "filprofiler-2021.9.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "e73540b1bb8ed5a477b3dd8a93c82402", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 5288907, + "upload_time": "2021-09-24T21:14:22", + "upload_time_iso_8601": "2021-09-24T21:14:22.607300Z", + "url": "https://files.pythonhosted.org/packages/c4/a6/a82b61ad6e1ba5acbbcfecab8fa06838d2406e5373e20863506a2e768636/filprofiler-2021.9.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "acb0b1d463ef9bf4bff43009d1e39f99", + "sha256": "dba2103fda530655140c34ccf342426466fcfaa3afb93c66cdf681067fc64935" + }, + "downloads": -1, + "filename": "filprofiler-2021.9.0-cp38-cp38-macosx_11_0_x86_64.whl", + "has_sig": false, + "md5_digest": "acb0b1d463ef9bf4bff43009d1e39f99", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 474496, + "upload_time": "2021-09-24T21:21:56", + "upload_time_iso_8601": "2021-09-24T21:21:56.806560Z", + "url": "https://files.pythonhosted.org/packages/07/26/d28fd8051193a2b327cfc60ab6e13cded01b9052e06ab388d13c6f5a94e3/filprofiler-2021.9.0-cp38-cp38-macosx_11_0_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "77e58f73e2b422aadb5df203b7e806ce", + "sha256": "7bd4ba283c750ed1e2b4f23ade6162e7b990ab95766a13aac6fe480192dcd96c" + }, + "downloads": -1, + "filename": "filprofiler-2021.9.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "77e58f73e2b422aadb5df203b7e806ce", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 7901852, + "upload_time": "2021-09-24T21:14:24", + "upload_time_iso_8601": "2021-09-24T21:14:24.088537Z", + "url": "https://files.pythonhosted.org/packages/4e/b9/0588d89f16a35c2353df84ac88668882dd352f22901b2eeb82a16bf2e703/filprofiler-2021.9.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "75667578bac750f23727c0ab1125d9a7", + "sha256": "cfeba022d7a38d221a8c8bc1260e807b5cedb76f5ab1c0f21e497fa98a7a3e5d" + }, + "downloads": -1, + "filename": "filprofiler-2021.9.0-cp39-cp39-macosx_11_0_x86_64.whl", + "has_sig": false, + "md5_digest": "75667578bac750f23727c0ab1125d9a7", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 474537, + "upload_time": "2021-09-24T21:22:17", + "upload_time_iso_8601": "2021-09-24T21:22:17.398987Z", + "url": "https://files.pythonhosted.org/packages/d1/23/b33f0812740a40b7265fae80350c0119f1512b11ccc7bf4a5a32eeac2db2/filprofiler-2021.9.0-cp39-cp39-macosx_11_0_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "0929423ffaea86a80af13a8a2540f500", + "sha256": "81e309fdc9785f43fda456ea7a9b91497ea458116f6b97483cdd3eb81661ef50" + }, + "downloads": -1, + "filename": "filprofiler-2021.9.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "0929423ffaea86a80af13a8a2540f500", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 10514687, + "upload_time": "2021-09-24T21:14:26", + "upload_time_iso_8601": "2021-09-24T21:14:26.368597Z", + "url": "https://files.pythonhosted.org/packages/e4/9e/c164b23d33f881e506a5a743fae5fcf310f6189350d6055b5b06882f5b6a/filprofiler-2021.9.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2021.9.1": [ + { + "comment_text": "", + "digests": { + "md5": "b75da3c672079ed6e8d8bc7c467c56db", + "sha256": "905694ef88ce61ee858d8a0558582ab239224feb1beb06f57c5a5d94b0947972" + }, + "downloads": -1, + "filename": "filprofiler-2021.9.1-cp36-cp36m-macosx_11_0_x86_64.whl", + "has_sig": false, + "md5_digest": "b75da3c672079ed6e8d8bc7c467c56db", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 474741, + "upload_time": "2021-09-27T15:57:26", + "upload_time_iso_8601": "2021-09-27T15:57:26.124075Z", + "url": "https://files.pythonhosted.org/packages/33/7e/d6c5f2186188a64a6e2d4e60d6ce6b94555b8efa4b9eaa75bc8065916de1/filprofiler-2021.9.1-cp36-cp36m-macosx_11_0_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "4d51641af2ce000a026932d28f900fbc", + "sha256": "c5b620776e815d97ffb4abb69acad123332db08eecc5de79f5388576767061ed" + }, + "downloads": -1, + "filename": "filprofiler-2021.9.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "4d51641af2ce000a026932d28f900fbc", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2675670, + "upload_time": "2021-09-27T15:56:43", + "upload_time_iso_8601": "2021-09-27T15:56:43.064612Z", + "url": "https://files.pythonhosted.org/packages/8b/9c/7bdfda5e67a955271ef4b7ca1cdc573249fa74c2f3888dc35e3c4fb36d2f/filprofiler-2021.9.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "3510e06d3853661ac03616d609109246", + "sha256": "f14efafb91ce18792303d321352056937984270a2a2927e3d318f9ecd4d78526" + }, + "downloads": -1, + "filename": "filprofiler-2021.9.1-cp37-cp37m-macosx_11_0_x86_64.whl", + "has_sig": false, + "md5_digest": "3510e06d3853661ac03616d609109246", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 474652, + "upload_time": "2021-09-27T15:58:35", + "upload_time_iso_8601": "2021-09-27T15:58:35.174508Z", + "url": "https://files.pythonhosted.org/packages/80/f4/9f0f786afcc9537296b84355da88541b46cb4e3cb110c571001d802e6370/filprofiler-2021.9.1-cp37-cp37m-macosx_11_0_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "0ec79aa50fdab57544999361ae5facc1", + "sha256": "f4c3f5838b53a2fe4ff489fdcce6652d7ab24300df9e751a0b963e4c948c8cc9" + }, + "downloads": -1, + "filename": "filprofiler-2021.9.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "0ec79aa50fdab57544999361ae5facc1", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 5289116, + "upload_time": "2021-09-27T15:56:44", + "upload_time_iso_8601": "2021-09-27T15:56:44.435459Z", + "url": "https://files.pythonhosted.org/packages/ea/63/3b1e25d778962b4f9007bc4ed1c539556fdf2ff197734be0bb90e1d8f136/filprofiler-2021.9.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "c2e95798448fffbd26f03fa16ceeb749", + "sha256": "7144d5ae678e2bc7829c6385110be85c55cd9d4358edf6b7fc9928bdfc8ee6e3" + }, + "downloads": -1, + "filename": "filprofiler-2021.9.1-cp38-cp38-macosx_11_0_x86_64.whl", + "has_sig": false, + "md5_digest": "c2e95798448fffbd26f03fa16ceeb749", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 474609, + "upload_time": "2021-09-27T15:59:09", + "upload_time_iso_8601": "2021-09-27T15:59:09.341254Z", + "url": "https://files.pythonhosted.org/packages/3b/db/76699ab5ba517e1fd90357fbb52f563a189b9455f66aea1c3610347a36a8/filprofiler-2021.9.1-cp38-cp38-macosx_11_0_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "6c5ea3ce2db68cb3448f28bbf04e5ba2", + "sha256": "6d3d32e5a9eb33354578bd9deb185c407bd8e8e4ad6bc816b88d3bf0e6182649" + }, + "downloads": -1, + "filename": "filprofiler-2021.9.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "6c5ea3ce2db68cb3448f28bbf04e5ba2", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 7902247, + "upload_time": "2021-09-27T15:56:45", + "upload_time_iso_8601": "2021-09-27T15:56:45.847356Z", + "url": "https://files.pythonhosted.org/packages/05/af/806c9054ad54c4ba4ef44752a1ec1577ef398e7656065a5bb8e054d59856/filprofiler-2021.9.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "ee24a6398028863b5662bbae1e219a4f", + "sha256": "0255dc8028ffbe1295fe3cf44d601e07b44c94d4c3ab6186d70b1ed59b8ade51" + }, + "downloads": -1, + "filename": "filprofiler-2021.9.1-cp39-cp39-macosx_11_0_x86_64.whl", + "has_sig": false, + "md5_digest": "ee24a6398028863b5662bbae1e219a4f", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 474644, + "upload_time": "2021-09-27T16:01:47", + "upload_time_iso_8601": "2021-09-27T16:01:47.009507Z", + "url": "https://files.pythonhosted.org/packages/b4/05/f7f801e01647c1ad7c1ca86883a792dbf38855ee7519abfd4ef1e0772ae8/filprofiler-2021.9.1-cp39-cp39-macosx_11_0_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "1f509eab5d7bb94d8f5a55ec9b419cc5", + "sha256": "eae4e60e20f7e4082278d94d3a094ddb3510f6c6a8f5576b42b533a8fc2de9ca" + }, + "downloads": -1, + "filename": "filprofiler-2021.9.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "1f509eab5d7bb94d8f5a55ec9b419cc5", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 10515233, + "upload_time": "2021-09-27T15:56:48", + "upload_time_iso_8601": "2021-09-27T15:56:48.086800Z", + "url": "https://files.pythonhosted.org/packages/1c/9a/1eeb9a8fbb58a64715e69fe362f11295515de815737aa41d26fd2d6f7d61/filprofiler-2021.9.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2022.1.0": [ + { + "comment_text": "", + "digests": { + "md5": "15f7a4d78ff5ebca4bcd26f968e9247b", + "sha256": "6466eaadc1fbf18a8d21f26d48d8bbcd3728c4e2ca997200018f5e37b001ee83" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.0-cp310-cp310-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "15f7a4d78ff5ebca4bcd26f968e9247b", + "packagetype": "bdist_wheel", + "python_version": "cp310", + "requires_python": ">=3.6", + "size": 501744, + "upload_time": "2022-01-26T23:55:42", + "upload_time_iso_8601": "2022-01-26T23:55:42.956888Z", + "url": "https://files.pythonhosted.org/packages/f6/16/1fca5686f1461408a703aad1f48ecff6a1818057e619cfcdc71c1f23dcf1/filprofiler-2022.1.0-cp310-cp310-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "d4ef4aeff895fa6f4dbb355d1c177e95", + "sha256": "b48a53e0caa7792c8d98c15cce243634288d6b93b1e9f40cbd5876eaa63ee7dc" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "d4ef4aeff895fa6f4dbb355d1c177e95", + "packagetype": "bdist_wheel", + "python_version": "cp310", + "requires_python": ">=3.6", + "size": 2711815, + "upload_time": "2022-01-26T23:29:14", + "upload_time_iso_8601": "2022-01-26T23:29:14.583288Z", + "url": "https://files.pythonhosted.org/packages/8e/7f/ab5787bf98dbab62b5802e75e9deef8c5aa59ee07db9b0c914f558d71242/filprofiler-2022.1.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "27b01582c5585281c1a97a5b9d51b685", + "sha256": "3ecb438c5ad634eac2ddd18b23ec501683ce6afa269edeea1777cec7a8af55cc" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.0-cp36-cp36m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "27b01582c5585281c1a97a5b9d51b685", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 501782, + "upload_time": "2022-01-26T23:55:44", + "upload_time_iso_8601": "2022-01-26T23:55:44.444425Z", + "url": "https://files.pythonhosted.org/packages/58/0c/b4a46b4fb477693831c4fb05bf23c006c1e04f3e9a9863586398e5ca9bd0/filprofiler-2022.1.0-cp36-cp36m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "ade8a6a1635f2dc8104442930650f51a", + "sha256": "c1fda7ba8a3c0662ee97a3808afc74fcc69671760733c927142aa807b1c2613d" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "ade8a6a1635f2dc8104442930650f51a", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2711984, + "upload_time": "2022-01-26T23:29:16", + "upload_time_iso_8601": "2022-01-26T23:29:16.388746Z", + "url": "https://files.pythonhosted.org/packages/6b/fb/56ea8ac281b0a53840242e5f80a09dde24c96d70e5b4d6ee011ec1f20aef/filprofiler-2022.1.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "40251671e6e732644b0bdf500e5766ff", + "sha256": "4b824a25f14c7b1753578df406245faaa1d3873cfd447e065ede1d0339a4a54b" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.0-cp37-cp37m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "40251671e6e732644b0bdf500e5766ff", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 501804, + "upload_time": "2022-01-26T23:55:45", + "upload_time_iso_8601": "2022-01-26T23:55:45.507453Z", + "url": "https://files.pythonhosted.org/packages/3e/a8/c0e21d2c59c1e1f8625b9040cf3897aa523a692c8393032cdb03df08fba2/filprofiler-2022.1.0-cp37-cp37m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "b3f50a45c2f035aef95cee94c9b376da", + "sha256": "dd7e033616ccf73f08bf8736aa42b0eb995c83f83b13304537361eb346c4d4ce" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "b3f50a45c2f035aef95cee94c9b376da", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2712014, + "upload_time": "2022-01-26T23:29:17", + "upload_time_iso_8601": "2022-01-26T23:29:17.756786Z", + "url": "https://files.pythonhosted.org/packages/d0/12/d8ff279a6cca1bb4f529288411263051ce949657a00552286abbc05c1b9c/filprofiler-2022.1.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "6aeb69c05505e7aacd0be9bc2d05db31", + "sha256": "bf695f73cc6440684076901a508012eb32adbf80ff10edb123180825f8f29579" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.0-cp38-cp38-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "6aeb69c05505e7aacd0be9bc2d05db31", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 501801, + "upload_time": "2022-01-26T23:55:47", + "upload_time_iso_8601": "2022-01-26T23:55:47.252883Z", + "url": "https://files.pythonhosted.org/packages/fe/63/44ae2ad4c7b2fcc94258fccdf29433f10861ba003c41dd507baf9a236d3c/filprofiler-2022.1.0-cp38-cp38-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "8ef7edb1a39484198487df594532d599", + "sha256": "182126fee5b234ec07e7ad71adff8264f75bf2371277dbe10d71de567271d7f7" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "8ef7edb1a39484198487df594532d599", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2712001, + "upload_time": "2022-01-26T23:29:19", + "upload_time_iso_8601": "2022-01-26T23:29:19.468036Z", + "url": "https://files.pythonhosted.org/packages/85/63/3defe55aafd369e3d4123b418e49a18f5f429c3bdabcfa57e2b6afc6e687/filprofiler-2022.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "55d4942da5fbea37f0ea877dd2eaeb10", + "sha256": "68e6f4d3c3d4124306c8ca651bbb04c125edf76a38a61a37803d322c7c8aa0d0" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.0-cp39-cp39-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "55d4942da5fbea37f0ea877dd2eaeb10", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 501735, + "upload_time": "2022-01-26T23:55:48", + "upload_time_iso_8601": "2022-01-26T23:55:48.750323Z", + "url": "https://files.pythonhosted.org/packages/26/0a/41b8cda6e9b99a6b8382066c2acbfa03d8a1680d2a4dd1b50612d9baede3/filprofiler-2022.1.0-cp39-cp39-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "9efa8df15ab0b86d3d9ffd682689e109", + "sha256": "3427542c4ba42322f9682fdb9418abbbeb3565961e0485d0ccb665cfe5a28045" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "9efa8df15ab0b86d3d9ffd682689e109", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2711795, + "upload_time": "2022-01-26T23:29:21", + "upload_time_iso_8601": "2022-01-26T23:29:21.198636Z", + "url": "https://files.pythonhosted.org/packages/f4/8d/73753fdf7e2fcd4c0c2d8102a5f436a1debc922d95c7982284d53b97aa92/filprofiler-2022.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "2022.1.1": [ + { + "comment_text": "", + "digests": { + "md5": "2b60a8f4841058210701edc83d87fe21", + "sha256": "ea46f0e11e68b70a1044732cd1c006195b886458ff291dfbd46b201d65d2438a" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp310-cp310-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "2b60a8f4841058210701edc83d87fe21", + "packagetype": "bdist_wheel", + "python_version": "cp310", + "requires_python": ">=3.6", + "size": 501742, + "upload_time": "2022-01-30T15:28:16", + "upload_time_iso_8601": "2022-01-30T15:28:16.924000Z", + "url": "https://files.pythonhosted.org/packages/04/d5/24be46febccfaf60dfec818df058925247354503b44b22d774582515b930/filprofiler-2022.1.1-cp310-cp310-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "87dbd9f292e50cc84a0fb57b4674db84", + "sha256": "b8a8d197093a86b27c75acf64bd9e17948b05007577117ddedf22d450797b8c2" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "87dbd9f292e50cc84a0fb57b4674db84", + "packagetype": "bdist_wheel", + "python_version": "cp310", + "requires_python": ">=3.6", + "size": 2865558, + "upload_time": "2022-01-30T15:02:46", + "upload_time_iso_8601": "2022-01-30T15:02:46.825623Z", + "url": "https://files.pythonhosted.org/packages/38/86/6b0b10495f2bb2373255aeddd143d53e0bd28b1f30cde57b5781f4a459ff/filprofiler-2022.1.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "655dae9c8fcea1bc65d3dbb331a27815", + "sha256": "10f70525dbbc8a8b90be829f5f46e87401a3acb4fdacd57ee6d41eb9347c3cd4" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp36-cp36m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "655dae9c8fcea1bc65d3dbb331a27815", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 501776, + "upload_time": "2022-01-30T15:28:18", + "upload_time_iso_8601": "2022-01-30T15:28:18.351349Z", + "url": "https://files.pythonhosted.org/packages/f1/26/42d7de20d28ac4ce731b3f918f34c4ba22f6472a98b4d64b6b86da4bd5b5/filprofiler-2022.1.1-cp36-cp36m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "e553b0d8dfa265b99ee320c59235b1a8", + "sha256": "9caec74f9ed93bccea0f077347fb648d46b47b9632e2aeeff34c7f0e2e38370b" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "e553b0d8dfa265b99ee320c59235b1a8", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2866729, + "upload_time": "2022-01-30T15:02:48", + "upload_time_iso_8601": "2022-01-30T15:02:48.780894Z", + "url": "https://files.pythonhosted.org/packages/a1/82/6d8b2fc5a1ed6f16c3ad31effdbde4d800963788bc3c6c0fbcc69fc73035/filprofiler-2022.1.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "8c84ac608712cab52f0aec7425678e8b", + "sha256": "27e07e7189c6157eec5d03011ee8bbed6212a9486a727182b406d387303f92e2" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp37-cp37m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "8c84ac608712cab52f0aec7425678e8b", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 501803, + "upload_time": "2022-01-30T15:28:19", + "upload_time_iso_8601": "2022-01-30T15:28:19.314799Z", + "url": "https://files.pythonhosted.org/packages/00/85/2468dfe9d84e944b9f2d6f8fd93d3d13d77a4bcec18f86f5e2dead0f3df3/filprofiler-2022.1.1-cp37-cp37m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "1c1dc627778e112f16e7b4e911662504", + "sha256": "6aa730c7238fb39c29b6a18714891b0f8020fec670b303fc53579f056d7ad770" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "1c1dc627778e112f16e7b4e911662504", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2866504, + "upload_time": "2022-01-30T15:02:50", + "upload_time_iso_8601": "2022-01-30T15:02:50.527020Z", + "url": "https://files.pythonhosted.org/packages/e3/77/39cccb3afd2c99caa68bcdc55e8462f6befc982b880e8820aa1c0b32c966/filprofiler-2022.1.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "ceff6d03863734397acadcb9c1f43e90", + "sha256": "a674bc0e49f8ac491b88f84c91f5cc18c01e5786926360a5233f35d4fae4255d" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp38-cp38-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "ceff6d03863734397acadcb9c1f43e90", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 501796, + "upload_time": "2022-01-30T15:28:20", + "upload_time_iso_8601": "2022-01-30T15:28:20.220666Z", + "url": "https://files.pythonhosted.org/packages/df/96/70904c60b8a1c04cd73274383179a87a22e46ea73b48d5cd8f737ab434b6/filprofiler-2022.1.1-cp38-cp38-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "852cfbd87443e6ff4fd4cd008a79c641", + "sha256": "dbf1b35114be73a2d33f4914c328c845a728c6e2b45abb5a0d2ee50dce53d1fa" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "852cfbd87443e6ff4fd4cd008a79c641", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2866434, + "upload_time": "2022-01-30T15:02:52", + "upload_time_iso_8601": "2022-01-30T15:02:52.182745Z", + "url": "https://files.pythonhosted.org/packages/cd/9e/cf84b5ec0a3e55ec91f8af52a8f8ef61ef21ac06590a02ac2b85defc3d53/filprofiler-2022.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "ead7722a96c9cc0d68a0ea207e363990", + "sha256": "0bef291a28195906386670da3d1191416dc9434e6964abcda4e13755c819f6ab" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp39-cp39-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "ead7722a96c9cc0d68a0ea207e363990", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 501736, + "upload_time": "2022-01-30T15:28:21", + "upload_time_iso_8601": "2022-01-30T15:28:21.443985Z", + "url": "https://files.pythonhosted.org/packages/e5/22/f5c3fda3b9518a9ddd9f3221a8241278475b7294262637bd0eb485f92e54/filprofiler-2022.1.1-cp39-cp39-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "f37833afecb8ae9b99f227eb58b35b3f", + "sha256": "5184dbc6c36eae8bb19667d6189e2df0bf17c26b680ce3bd6904c979a06e0664" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "f37833afecb8ae9b99f227eb58b35b3f", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2865503, + "upload_time": "2022-01-30T15:02:53", + "upload_time_iso_8601": "2022-01-30T15:02:53.998742Z", + "url": "https://files.pythonhosted.org/packages/11/06/099ed54f3c80ff77a3c14016e84d189d2696b7f220927586e4b3bb75f381/filprofiler-2022.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ] + }, + "urls": [ + { + "comment_text": "", + "digests": { + "md5": "2b60a8f4841058210701edc83d87fe21", + "sha256": "ea46f0e11e68b70a1044732cd1c006195b886458ff291dfbd46b201d65d2438a" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp310-cp310-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "2b60a8f4841058210701edc83d87fe21", + "packagetype": "bdist_wheel", + "python_version": "cp310", + "requires_python": ">=3.6", + "size": 501742, + "upload_time": "2022-01-30T15:28:16", + "upload_time_iso_8601": "2022-01-30T15:28:16.924000Z", + "url": "https://files.pythonhosted.org/packages/04/d5/24be46febccfaf60dfec818df058925247354503b44b22d774582515b930/filprofiler-2022.1.1-cp310-cp310-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "87dbd9f292e50cc84a0fb57b4674db84", + "sha256": "b8a8d197093a86b27c75acf64bd9e17948b05007577117ddedf22d450797b8c2" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "87dbd9f292e50cc84a0fb57b4674db84", + "packagetype": "bdist_wheel", + "python_version": "cp310", + "requires_python": ">=3.6", + "size": 2865558, + "upload_time": "2022-01-30T15:02:46", + "upload_time_iso_8601": "2022-01-30T15:02:46.825623Z", + "url": "https://files.pythonhosted.org/packages/38/86/6b0b10495f2bb2373255aeddd143d53e0bd28b1f30cde57b5781f4a459ff/filprofiler-2022.1.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "655dae9c8fcea1bc65d3dbb331a27815", + "sha256": "10f70525dbbc8a8b90be829f5f46e87401a3acb4fdacd57ee6d41eb9347c3cd4" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp36-cp36m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "655dae9c8fcea1bc65d3dbb331a27815", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 501776, + "upload_time": "2022-01-30T15:28:18", + "upload_time_iso_8601": "2022-01-30T15:28:18.351349Z", + "url": "https://files.pythonhosted.org/packages/f1/26/42d7de20d28ac4ce731b3f918f34c4ba22f6472a98b4d64b6b86da4bd5b5/filprofiler-2022.1.1-cp36-cp36m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "e553b0d8dfa265b99ee320c59235b1a8", + "sha256": "9caec74f9ed93bccea0f077347fb648d46b47b9632e2aeeff34c7f0e2e38370b" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "e553b0d8dfa265b99ee320c59235b1a8", + "packagetype": "bdist_wheel", + "python_version": "cp36", + "requires_python": ">=3.6", + "size": 2866729, + "upload_time": "2022-01-30T15:02:48", + "upload_time_iso_8601": "2022-01-30T15:02:48.780894Z", + "url": "https://files.pythonhosted.org/packages/a1/82/6d8b2fc5a1ed6f16c3ad31effdbde4d800963788bc3c6c0fbcc69fc73035/filprofiler-2022.1.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "8c84ac608712cab52f0aec7425678e8b", + "sha256": "27e07e7189c6157eec5d03011ee8bbed6212a9486a727182b406d387303f92e2" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp37-cp37m-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "8c84ac608712cab52f0aec7425678e8b", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 501803, + "upload_time": "2022-01-30T15:28:19", + "upload_time_iso_8601": "2022-01-30T15:28:19.314799Z", + "url": "https://files.pythonhosted.org/packages/00/85/2468dfe9d84e944b9f2d6f8fd93d3d13d77a4bcec18f86f5e2dead0f3df3/filprofiler-2022.1.1-cp37-cp37m-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "1c1dc627778e112f16e7b4e911662504", + "sha256": "6aa730c7238fb39c29b6a18714891b0f8020fec670b303fc53579f056d7ad770" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "1c1dc627778e112f16e7b4e911662504", + "packagetype": "bdist_wheel", + "python_version": "cp37", + "requires_python": ">=3.6", + "size": 2866504, + "upload_time": "2022-01-30T15:02:50", + "upload_time_iso_8601": "2022-01-30T15:02:50.527020Z", + "url": "https://files.pythonhosted.org/packages/e3/77/39cccb3afd2c99caa68bcdc55e8462f6befc982b880e8820aa1c0b32c966/filprofiler-2022.1.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "ceff6d03863734397acadcb9c1f43e90", + "sha256": "a674bc0e49f8ac491b88f84c91f5cc18c01e5786926360a5233f35d4fae4255d" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp38-cp38-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "ceff6d03863734397acadcb9c1f43e90", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 501796, + "upload_time": "2022-01-30T15:28:20", + "upload_time_iso_8601": "2022-01-30T15:28:20.220666Z", + "url": "https://files.pythonhosted.org/packages/df/96/70904c60b8a1c04cd73274383179a87a22e46ea73b48d5cd8f737ab434b6/filprofiler-2022.1.1-cp38-cp38-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "852cfbd87443e6ff4fd4cd008a79c641", + "sha256": "dbf1b35114be73a2d33f4914c328c845a728c6e2b45abb5a0d2ee50dce53d1fa" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "852cfbd87443e6ff4fd4cd008a79c641", + "packagetype": "bdist_wheel", + "python_version": "cp38", + "requires_python": ">=3.6", + "size": 2866434, + "upload_time": "2022-01-30T15:02:52", + "upload_time_iso_8601": "2022-01-30T15:02:52.182745Z", + "url": "https://files.pythonhosted.org/packages/cd/9e/cf84b5ec0a3e55ec91f8af52a8f8ef61ef21ac06590a02ac2b85defc3d53/filprofiler-2022.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "ead7722a96c9cc0d68a0ea207e363990", + "sha256": "0bef291a28195906386670da3d1191416dc9434e6964abcda4e13755c819f6ab" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp39-cp39-macosx_10_15_x86_64.whl", + "has_sig": false, + "md5_digest": "ead7722a96c9cc0d68a0ea207e363990", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 501736, + "upload_time": "2022-01-30T15:28:21", + "upload_time_iso_8601": "2022-01-30T15:28:21.443985Z", + "url": "https://files.pythonhosted.org/packages/e5/22/f5c3fda3b9518a9ddd9f3221a8241278475b7294262637bd0eb485f92e54/filprofiler-2022.1.1-cp39-cp39-macosx_10_15_x86_64.whl", + "yanked": false, + "yanked_reason": null + }, + { + "comment_text": "", + "digests": { + "md5": "f37833afecb8ae9b99f227eb58b35b3f", + "sha256": "5184dbc6c36eae8bb19667d6189e2df0bf17c26b680ce3bd6904c979a06e0664" + }, + "downloads": -1, + "filename": "filprofiler-2022.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "has_sig": false, + "md5_digest": "f37833afecb8ae9b99f227eb58b35b3f", + "packagetype": "bdist_wheel", + "python_version": "cp39", + "requires_python": ">=3.6", + "size": 2865503, + "upload_time": "2022-01-30T15:02:53", + "upload_time_iso_8601": "2022-01-30T15:02:53.998742Z", + "url": "https://files.pythonhosted.org/packages/11/06/099ed54f3c80ff77a3c14016e84d189d2696b7f220927586e4b3bb75f381/filprofiler-2022.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", + "yanked": false, + "yanked_reason": null + } + ], + "vulnerabilities": [] +} diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index ddd56fbe96919..882117f976fb7 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,11 @@ { - "name": "create-turbo", +<<<<<<< HEAD "version": "2.0.4", +||||||| parent of 0d8de51003 (Trying out new release process via cargo dist) + "version": "2.0.3", +======= + "version": "2.0.4-canary.0", +>>>>>>> 0d8de51003 (Trying out new release process via cargo dist) "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 205d4e09e14ac..9ef5217b43d01 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,12 @@ { "name": "eslint-config-turbo", +<<<<<<< HEAD "version": "2.0.4", +||||||| parent of 0d8de51003 (Trying out new release process via cargo dist) + "version": "2.0.3", +======= + "version": "2.0.4-canary.0", +>>>>>>> 0d8de51003 (Trying out new release process via cargo dist) "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 57c3e44b2b3c0..f14257b167b6a 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,12 @@ { "name": "eslint-plugin-turbo", +<<<<<<< HEAD "version": "2.0.4", +||||||| parent of 0d8de51003 (Trying out new release process via cargo dist) + "version": "2.0.3", +======= + "version": "2.0.4-canary.0", +>>>>>>> 0d8de51003 (Trying out new release process via cargo dist) "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index 32ab998986168..bc31a6092bf99 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,12 @@ { "name": "@turbo/codemod", +<<<<<<< HEAD "version": "2.0.4", +||||||| parent of 0d8de51003 (Trying out new release process via cargo dist) + "version": "2.0.3", +======= + "version": "2.0.4-canary.0", +>>>>>>> 0d8de51003 (Trying out new release process via cargo dist) "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index e61a18aa80cc9..427fa3fdea9fe 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,12 @@ { "name": "@turbo/gen", +<<<<<<< HEAD "version": "2.0.4", +||||||| parent of 0d8de51003 (Trying out new release process via cargo dist) + "version": "2.0.3", +======= + "version": "2.0.4-canary.0", +>>>>>>> 0d8de51003 (Trying out new release process via cargo dist) "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index d16e0ebeba3f3..3c5dfaaa1b221 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,12 @@ { "name": "turbo-ignore", +<<<<<<< HEAD "version": "2.0.4", +||||||| parent of 0d8de51003 (Trying out new release process via cargo dist) + "version": "2.0.3", +======= + "version": "2.0.4-canary.0", +>>>>>>> 0d8de51003 (Trying out new release process via cargo dist) "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 07b170a925d55..32a4f6f06b293 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,12 @@ { "name": "@turbo/types", +<<<<<<< HEAD "version": "2.0.4", +||||||| parent of 0d8de51003 (Trying out new release process via cargo dist) + "version": "2.0.3", +======= + "version": "2.0.4-canary.0", +>>>>>>> 0d8de51003 (Trying out new release process via cargo dist) "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 4d750532e40f3..754a4c01ca1d7 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,12 @@ { "name": "@turbo/workspaces", +<<<<<<< HEAD "version": "2.0.4", +||||||| parent of 0d8de51003 (Trying out new release process via cargo dist) + "version": "2.0.3", +======= + "version": "2.0.4-canary.0", +>>>>>>> 0d8de51003 (Trying out new release process via cargo dist) "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 7a3faf3c4b400..dcc7b1c373452 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,12 @@ { "name": "turbo", +<<<<<<< HEAD "version": "2.0.4", +||||||| parent of 0d8de51003 (Trying out new release process via cargo dist) + "version": "2.0.3", +======= + "version": "2.0.4-canary.0", +>>>>>>> 0d8de51003 (Trying out new release process via cargo dist) "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turbo", "bugs": "https://github.com/vercel/turbo/issues", @@ -17,11 +23,27 @@ "bin" ], "optionalDependencies": { +<<<<<<< HEAD "turbo-darwin-64": "2.0.4", "turbo-darwin-arm64": "2.0.4", "turbo-linux-64": "2.0.4", "turbo-linux-arm64": "2.0.4", "turbo-windows-64": "2.0.4", "turbo-windows-arm64": "2.0.4" +||||||| parent of 0d8de51003 (Trying out new release process via cargo dist) + "turbo-darwin-64": "2.0.3", + "turbo-darwin-arm64": "2.0.3", + "turbo-linux-64": "2.0.3", + "turbo-linux-arm64": "2.0.3", + "turbo-windows-64": "2.0.3", + "turbo-windows-arm64": "2.0.3" +======= + "turbo-darwin-64": "2.0.4-canary.0", + "turbo-darwin-arm64": "2.0.4-canary.0", + "turbo-linux-64": "2.0.4-canary.0", + "turbo-linux-arm64": "2.0.4-canary.0", + "turbo-windows-64": "2.0.4-canary.0", + "turbo-windows-arm64": "2.0.4-canary.0" +>>>>>>> 0d8de51003 (Trying out new release process via cargo dist) } } diff --git a/version.txt b/version.txt index a8cbed9594bbc..774607647fada 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,10 @@ +<<<<<<< HEAD 2.0.4 latest +||||||| parent of 0d8de51003 (Trying out new release process via cargo dist) +2.0.3 +latest +======= +2.0.4-canary.0 +canary +>>>>>>> 0d8de51003 (Trying out new release process via cargo dist)