Skip to main content

No project description provided

Project description

Mountaineer Header

Move fast. Climb mountains. Don't break things.

Mountaineer 🏔️ is a framework to easily build webapps in Python and React. If you've used either of these languages before for development, we think you'll be right at home.

Main Features

Each framework has its own unique features and tradeoffs. Mountaineer focuses on developer productivity above all else, with production speed a close second.

  • 📝 Typehints up and down the stack: frontend, backend, and database
  • 🎙️ Trivially easy client<->server communication, data binding, and function calling
  • 🌎 Optimized server rendering for better accessibility and SEO
  • 🏹 Static analysis of web pages for strong validation: link validity, data access, etc.
  • 🤩 Skip the API or Node.js server just to serve frontend clients

Getting Started

New Project

To get started as quickly as possible, we bundle a project generator that sets up a simple project after a quick Q&A.

$ pipx run create-mountaineer-app new

? Project name [my-project]: my_website
? Use poetry for dependency management? [Yes] Yes
? Author [Pierce Freeman <pierce@freeman.vc>] Default
? Use Tailwind CSS? [Yes] Yes

Mountaineer projects all follow a similar structure. After running this CLI you should see a new folder called my_website, with folders like the following:

my_website
  /controllers
    /home.py
  /views
    /app
      /home
        /page.tsx
      /layout.tsx
    /package.json
    /tsconfig.json
pyproject.toml
poetry.lock

Every service file is nested under the my_website root package. Views are defined in a disk-based hierarchy (views) where nested routes are in nested folders. This folder acts as your React project and is where you can define requirements and build parameters in package.json and tsconfig.json. Controllers are defined nearby in a flat folder (controllers) where each route is a separate file.

Development

While doing development work, you'll usually want to preview the frontend and automatically build dependent files. You can do this with:

$ poetry run runserver

Or, if you just want to watch the source tree for changes without hosting the server:

$ poetry run watch

Walkthrough

Below we go through some of the unique aspects of mountaineer. Let's get started with creating a new controller, since this will define which data you can push and pull to your frontend.

from mountaineer.actions import sideeffect
from mountaineer.controller import ControllerBase
from mountaineer.render import RenderBase
from fastapi import Request

class HomeRender(RenderBase):
    client_ip: str
    current_count: int

class HomeController(ControllerBase):
    url = "/"
    view_path = "/app/home/page.tsx"

    def __init__(self):
        super().__init__()
        self.global_count = 0

    def render(self, request: Request) -> HomeRender:
        return HomeRender(
            client_ip=(
                request.client.host
                if request.client
                else "unknown"
            ),
            current_count=self.global_count,
        )

The only three requirements of a controller are setting the:

  • URL
  • View path
  • Initial data payload

This particular controller manages a counter that we want to persist across page loads. We keep it in memory attached to an instance of the class. It will therefore reset when the current webserver process ends. You could imagine we could also persist it to a database via some simple SQL queries, or an ORM like SqlAlchemy. For this walkthrough, database persistence is out of scope.

The client here doesn't need much data so we keep the HomeRender model simple, just sending the current count and client IP address. The data from render() is injected into the frontend as we'll see in a minute. This render() function accepts all parameters that FastAPI endpoints do: paths, query parameters, and dependency injected functions. Right now we're just grabbing the Request object to get the client IP.

Let's move over to the frontend.

import React from "react";
import { useServer } from "./_server/useServer";

const Home = () => {
  const serverState = useServer();

  return (
    <div>
      <p>
        Hello {serverState.client_ip}, current count is
        {" "}{serverState.current_count}
      </p>
    </div>
  );
};

export default Home;

We define a simple view to show the data coming from the backend. To accomplish this conventionally, we'd need to wire up an API layer, a Node server, or otherwise format the page with Jinja templates.

Here instead we use our automatically generated useServer() hook. This hook payload will provide all the HomeRender fields as properties of serverState. And it's available instantly on page load without any roundtrip fetches.

If you access this in your browser at localhost:5006/ we can see the counter, but we can't really do anything with it yet. Let's add some interactivity to increase the current count.

[!TIP] Try disabling Javascript in your browser. The page will still render as-is with all variables intact, thanks to our server-side rendering.

from pydantic import BaseModel

class IncrementCountRequest(BaseModel):
    count: int

class HomeController(ControllerBase):
    ...

    @sideeffect
    def increment_count(self, payload: IncrementCountRequest):
        self.global_count += payload.count

What good is a counter that doesn't count? We define a function that accepts a pydantic model, which defines an int increment. When clients provide this number we'll use this to update the global state.

The important part here is the @sideeffect. This decorator indicates that we want the frontend to refresh its data, since after we update the global count on the server the client state will be newly outdated.

Mountaineer detects the presence of this sideeffect function and analyzes its signature. It then exposes this to the frontend as a normal async function.

import React from "react";
import { useServer } from "./_server/useServer";

const Home = () => {
  const serverState = useServer();

  return (
    <div>
      <p>
        Hello {serverState.client_ip}, current count is
        {" "}{serverState.current_count}
      </p>
      <button
        onClick={async () => {
          await serverState.increment_count({
            requestBody: {
              count: 1,
            },
          });
        }}
      >
        Increment
      </button>
    </div>
  );
};

export default Home;

We run this async handler when the button is clicked and specify our desired increment count. Notice that we don't have to read or parse the output value of this function. Since the function is marked as a sideeffect, the frontend will automatically refresh its data after the function is called.

Go ahead and load it in your browser. If you open up your web tools, you can increment the ticker and see POST requests sending data to the backend and receiving the current server state. The actual data updates and merging happens internally by mountaineer.

Getting Started Final Webapp

You can use these serverState variables anywhere you'd use dynamic React state variables. But unlike React state, these variables are automatically updated when a relevant sideeffect is triggered.

And that's it. We've just built a fully interactive web application without having to worry about an explicit API. You specify the data model and actions on the server and the appropriate frontend hooks are generated and updated automatically. It gives you the power of server rendered html and the interactivity of a virtual DOM, without having to compromise on complicated data mutations to keep everything in sync.

Learn More

We have additional documentation that does more of a technical deep dive on different features of mountaineer. We order these roughly in the order that we anticipate you'll need them.

  • Client Actions: Details on @sideeffect, @passthrough, and masking @sideeffect fields for partial re-rendering.
  • View Definition: How to define the view and use the serverState hook. Covers page.tsx and layout.tsx conventions to easily nest your site designs.
  • Page Metadata: How to set the title, description, and other metadata for your pages.
  • Link Generation: Generate links to other pages within your webapp, with typehinting and automatic URL generation.
  • Error Handling: Conventions for handling client-side errors while fetching data in your webapp.
  • PostCSS: PostCSS build plugin for TailwindCSS support and other CSS processing.
  • Core Library: Details on how to do local development on the core library.

Future Directions

  • Offload more of the server logic to Rust
  • AST parsing of the tsx files to determine which parts of the serverState they're actually using and mask accordingly
  • Plugins for simple authentication, daemons, billing, etc.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mountaineer-0.1.0.tar.gz (647.5 kB view details)

Uploaded Source

Built Distributions

mountaineer-0.1.0-py3-none-any.whl (680.8 kB view details)

Uploaded Python 3

mountaineer-0.1.0-cp312-none-win_amd64.whl (8.6 MB view details)

Uploaded CPython 3.12 Windows x86-64

mountaineer-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.3 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

mountaineer-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (14.8 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

mountaineer-0.1.0-cp312-cp312-macosx_11_0_arm64.whl (10.7 MB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

mountaineer-0.1.0-cp312-cp312-macosx_10_12_x86_64.whl (11.4 MB view details)

Uploaded CPython 3.12 macOS 10.12+ x86-64

mountaineer-0.1.0-cp311-none-win_amd64.whl (8.6 MB view details)

Uploaded CPython 3.11 Windows x86-64

mountaineer-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.3 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

mountaineer-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (14.8 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

mountaineer-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (10.7 MB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

mountaineer-0.1.0-cp311-cp311-macosx_10_12_x86_64.whl (11.4 MB view details)

Uploaded CPython 3.11 macOS 10.12+ x86-64

mountaineer-0.1.0-cp310-none-win_amd64.whl (8.6 MB view details)

Uploaded CPython 3.10 Windows x86-64

mountaineer-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.3 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

mountaineer-0.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (14.8 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

mountaineer-0.1.0-cp310-cp310-macosx_11_0_arm64.whl (10.7 MB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

mountaineer-0.1.0-cp310-cp310-macosx_10_12_x86_64.whl (11.4 MB view details)

Uploaded CPython 3.10 macOS 10.12+ x86-64

mountaineer-0.1.0-cp39-none-win_amd64.whl (8.6 MB view details)

Uploaded CPython 3.9 Windows x86-64

mountaineer-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.3 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

mountaineer-0.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (14.8 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

mountaineer-0.1.0-cp39-cp39-macosx_11_0_arm64.whl (10.7 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

mountaineer-0.1.0-cp39-cp39-macosx_10_12_x86_64.whl (11.4 MB view details)

Uploaded CPython 3.9 macOS 10.12+ x86-64

mountaineer-0.1.0-cp38-none-win_amd64.whl (8.6 MB view details)

Uploaded CPython 3.8 Windows x86-64

mountaineer-0.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.3 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

mountaineer-0.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (14.8 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

mountaineer-0.1.0-cp38-cp38-macosx_11_0_arm64.whl (10.7 MB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

mountaineer-0.1.0-cp38-cp38-macosx_10_12_x86_64.whl (11.4 MB view details)

Uploaded CPython 3.8 macOS 10.12+ x86-64

File details

Details for the file mountaineer-0.1.0.tar.gz.

File metadata

  • Download URL: mountaineer-0.1.0.tar.gz
  • Upload date:
  • Size: 647.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.11.2 Darwin/23.3.0

File hashes

Hashes for mountaineer-0.1.0.tar.gz
Algorithm Hash digest
SHA256 311ad0b1eb1f9ea1af82ac3c659154302ecb92ee8baa8685711e77cae7bc1938
MD5 9790e97f3e37e0e46300dc8a46e6f868
BLAKE2b-256 04fd20864cae2f4d99ba525fa45c75c3cea966402fdd035bd45d8ed8a517c604

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: mountaineer-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 680.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.11.2 Darwin/23.3.0

File hashes

Hashes for mountaineer-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 756823bacab19307bc1d8b596e5c2b2c1aadfc7556af94cfb429d3eaaceace68
MD5 2bcd3238ab32a22ccb673edb98237605
BLAKE2b-256 721be19155b3a76252308bd78a2c324e3d3d05fbdb11853f84de7e759d476e0a

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp312-none-win_amd64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 d016a2147f0e493b1fec780d951095097c98225461b4a29a484209a1ba621bc6
MD5 090aa75c13948c8d105a907e92f066ff
BLAKE2b-256 7b7a5e40765955c42146ee723af5fbe2df2beb921c16dec9fc0a671fe1c2709a

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b587b37ada7f432c0649f93090e1d368eb6a8e1f54b09b0cf6db38b0a0727856
MD5 ccb0e227b385d3bbe6a31b79c1d12226
BLAKE2b-256 b6b4260de4559d39064291a17f26a7905776338712e651988ad4240c4fcf3106

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e28615e322570c2799f0ab0729a196abada4a9bde8a552e7ba4bd8ae4be3a0ab
MD5 c50505ebb4b90713573f824f88668b20
BLAKE2b-256 4f216b94b9182cd1ddb3a5a1a23c79f8aebd5a745b86e450a6315c57515b9582

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3cb9927079ff73ad4b447aea4d6806f0d563b586623d989b2601d3832c9d68ac
MD5 319900c1580ac50d8a8f4ce14a355ed9
BLAKE2b-256 ea7194f8c498db8c4b5acc979e61e6894d93ccf051bfc28e10cde608f2522b29

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f714ea7f1cdc3debe88a14b23038df424d83c2a64b17f1665318b05eaa909a0a
MD5 73606ca0073462da032df5b340fe5301
BLAKE2b-256 bb0a2ad2c18ba9e06ab1c676e7897d03e5cd767f6164fbcbad9cc39a0d73e323

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp311-none-win_amd64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 c075959274d3563d7dc95075cb3739cac25a204151b100ec67a7b2ce7033ccc4
MD5 08ba9eae62908d65e4f32e47957ebf1b
BLAKE2b-256 d997520275a1c1a1c039d03ee6dff30cf3fdd8727307dd73b186740d1fb25a3d

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6e9e75f09e58d1a692d77278cdf2e37b2c4de412de63e8c5403df6e153b78f19
MD5 a6e5035d444cd79a2d26699ddbd66eb6
BLAKE2b-256 7b2ba929d2c95a6317b56ef45117fc5f818b91036e29aad9f10cd59c426d651d

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4ba95d0602fb37825c2fa683cd384fb66450eeb6a19cc8b0ef654afa348ee4aa
MD5 45496bb8b28924101c5cca8fd070be37
BLAKE2b-256 14ac6e071984781d49af84c3e276a1f94a0985e2e2a90b4efee9fe9c44e96381

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1e189be884d0bf9825146e07f7f25b5d4fe1171e31caab50f83e9901508ad78c
MD5 fed95de98a4ab6c17c3a1389b649c7f6
BLAKE2b-256 fa803f18a5434479713562cc11618020030ff492b9240eacff8a644c61d3d84b

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 31f68f0acb3247d45f44daf83788e397d0b3f955ceb26e181ce533f08d3feb1a
MD5 956983166241e6c367f5172541f748f2
BLAKE2b-256 6a7fd04cf6f53712949736d191733dc6c52c92689beaed75f2decc9e596b6d18

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp310-none-win_amd64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 f81fd2916b006eab27bd03cc1c75c7ae7db604fb092b601705ea805f146737bd
MD5 3d92a649849635ab6d1b50e11669f929
BLAKE2b-256 f52253dab82e9fa448d467ff51a35d80605c4ddad332fd66b0c342d27d2255fb

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6e2b5732ea38bdc6aa4ff89f125f6313c13e7ea5a55595206dc3e6847cb0c091
MD5 7bd21b7288aa9387ee1cf900d2197f5b
BLAKE2b-256 57b421c1dde9ed8014f88efa4c6c0a3625c40af6e1a8d216b5dc6bab7e3b20fd

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9f9ff560d581adfa92255cbe5afe6d195df373dfbbb693cc1116cb680f38aaf4
MD5 744fbaa735b90f412450584ca2777706
BLAKE2b-256 260963b4533044fbe1c9b3581aee6c1f3e7e318394cb295c20df5617d9d23e90

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 903244efde8246e22ab8afd0c60df081f181cfb91661dcb68d7d840d9cbeac52
MD5 ad605ec4e20cd9cb25fc08df5b37e9db
BLAKE2b-256 08811c63fe9081072fcfd577cbefe1259c91c2701af77f3c6797e49b63a9f364

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5f1bc095899dc0ec700aeecf338962a17a89ceabc824ed86a00db081cae79378
MD5 4b0a2eeb12701c5536f0ab5b5a3b2771
BLAKE2b-256 4218789ad4697825e81ff08165ce5b79e9e730dfe8af09e047623fecbcb7214f

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp39-none-win_amd64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 40a5630ad2f8e4b7519069e6d21fd574343d54a4cebca97f42fc9839de586f1f
MD5 1d0359a6f945c485ef7fc80c8b3413a6
BLAKE2b-256 a456e778ea9c63481906e5e547d5963fd1ca303fcbdf48f0c34cb51f4e57e1cc

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5ce7693ad971ba2223824be4b09ee9bc0f169fe7ed15d065f3f0fcd467e02552
MD5 c5f519c20946e8ecaac7c62de6950229
BLAKE2b-256 86794b69b92c85345495cb2db26c2d7d8dcca902a9d5f97ef68898f4e55671b3

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f9f5050edf1e99cfa202d7250f974806c9d581e30dd5cc484b776cbf4020d749
MD5 25119d01ea894e7dff46778573f8a58b
BLAKE2b-256 3d88549d4997ca6562b8ee4549475b85b100defeb5ba26ddb72736d1f5bf91dd

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b4eb1fdd8a896b47b8acdd775c65eb718416411603adeeaee14a69d2be31107a
MD5 cc4655729963297f526111c01d454db0
BLAKE2b-256 04285e2b95dea9ac37fe3fca0480707a78619674e6383d66006089bae1f3ef83

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e31d4f67594bcaba489901d0d9c3f7bf5319caa96900aefbb3c01d9daeb72335
MD5 7a90e1dd83aba24b730071bb68c90777
BLAKE2b-256 45b85447de6abc4ee11103244ecd40693508dae6dd1b45448774430345d9253a

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp38-none-win_amd64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 d9d648c3bb182ed7eb8eb7680e6b0196e9abeb4abec5432e27042c8600dff69c
MD5 df247c341d3d8ce5a1fab0527e8161ac
BLAKE2b-256 38ed9bf9a9cc5ec2399462dc3a563115f3aa802fe9af512ad368177c5d05253b

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3d540ac01305d8376c5f956178860418820aad447711baafc02885cfe8197902
MD5 8abd3cc582bc706090a995fce8b10556
BLAKE2b-256 431462d0809f6f9e8568e1741face930a6846738f798ad144b9f179988a58637

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 09efe50145758107c1b3aaf39eb466370bd114f7d280ac75cd1c066289a8dfb5
MD5 2d3a591fdb6e5cb93fc338a67d901a16
BLAKE2b-256 ff577bd0e8cb0c3eb09ddc376024f70e96ac314e5bb0b7cec3abc0ff6e41238b

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5201a85224fbf6e6b885699af4b62b0f91b6393f212d51eeb2e1e339b2d20cd9
MD5 24373ec260987516774514792ee4fa9b
BLAKE2b-256 e06c9be607133da29e7225a910802f4a1110e9080105c8d46da8cb67fc31e8b4

See more details on using hashes here.

File details

Details for the file mountaineer-0.1.0-cp38-cp38-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for mountaineer-0.1.0-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ac320ade87224c6517cd897320ab733c3444d601c04a14771c60ee950466f695
MD5 d2aa7a833b3cf303b8e696a2bf264846
BLAKE2b-256 5748b49c75b65ffe1b85eb7616bd76f194f0693574b3794f359f86ce9afafd19

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page