Metadata-Version: 2.1
Name: atopile
Version: 0.0.22
Summary: A toolchain bringing the best of software development to the real-world!
Project-URL: Homepage, http://gitlab.atopile.io/atopile/atopile
Author-email: Matthew Wildoer <mawildoer@gmail.com>, Timothee Peter <timothee.peter@mac.com>, Narayan Powderly <napowderly@gmail.com>
License-File: LICENSE
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: antlr4-python3-runtime==4.13.0
Requires-Dist: attrs
Requires-Dist: click
Requires-Dist: easyeda2kicad
Requires-Dist: fastapi
Requires-Dist: gitpython
Requires-Dist: igraph
Requires-Dist: jinja2
Requires-Dist: rich
Requires-Dist: ruamel-yaml
Requires-Dist: schema
Requires-Dist: semver
Requires-Dist: uvicorn[standard]
Requires-Dist: watchfiles
Provides-Extra: dev
Requires-Dist: ruff; extra == 'dev'
Provides-Extra: docs
Requires-Dist: mkdocs; extra == 'docs'
Requires-Dist: mkdocs-drawio-file>=1.5.2; extra == 'docs'
Requires-Dist: mkdocs-material; extra == 'docs'
Provides-Extra: test
Requires-Dist: pytest; extra == 'test'
Requires-Dist: pytest-asyncio; extra == 'test'
Requires-Dist: pytest-datafiles; extra == 'test'
Requires-Dist: pytest-html; extra == 'test'
Description-Content-Type: text/markdown

# atopile

Compiler for hardware - starting with PCBs


## Usage

There's not a lot here, because it's over at http://docs.atopile.io/


## Development

### Prerequisites / Installation

You'll need >= `python3.10` and `pip` (Use `brew`).

I'd strongly recommend developing within a `venv`

Since we'll be using this `venv` for both work within this tool directory and whatever projects you're using it on, I'd recommend creating something along the lines of an `atopile-workspace` or `ato-ws` directory somewhere, and then creating a `venv` in there. This means if you do something like a `git clean -xdf` to remove crud, you won't blow away your `venv` with it.

If you decide to follow this, you'll end up with something like this:

```
atopile-workspace
├── .venv --> your virtual environment
├── atopile --> this repo
├── atopile.code-workspace --> vscode workspace file
└── bike-light --> project using atopile
```

Clone this repo.

Wherever you stick the `venv`, you can create the venv with  `python3.11 -m venv .venv` and then `source .venv/bin/activate`

For cli development (so practically all the time) : `pip install -e ."[dev,test,docs]"`

You'll need `npm` for front-end development (`brew install node`).

For any front-end development, you'll also need to install the front-end dependencies: `npm install`


## CLI development

ANTLR (or more specifically Java) was a PITA to get working on my Mac... so, I didn't 🤷‍♂️, I just wrapped up ANTLR in a neat little dockerised bundle and make a script that calls out to it easily.

As of writing, that lives in [mawildoer/antlr4](https://github.com/mawildoer/antlr4/tree/mawildoer/simplified-portable-docker/docker-simplified), but [hopefully we can get it into ANTLR mainline](https://github.com/antlr/antlr4/pull/4244) soon.

For now, clone the branch in the first link (eg. to your "repos" or "projects" directory), and then follow the [instructions](https://github.com/mawildoer/antlr4/tree/mawildoer/simplified-portable-docker/docker-simplified) on how to build it.

You can build the grammer to python source with the following command (modified with the appropriate paths for you).

`cd src/atopile/parser`

`/Users/mattwildoer/Projects/antlr4/docker-simplified/antlr4 -Dlanguage=Python3 -visitor AtopileParser.g4 AtopileLexer.g4`


## Front end development

To check out front-end changes live, run `npm run serve` in one terminal and make sure to run `ato view` on a project in another (to provide API access).

This will start the front-end server at `localhost:1234` and the backend at `localhost:2860`. The front-end's development server (`pracel`) will proxy API requests to the backend.


## Syntax highlighting is pretty nice...

You can download the extension from CI here:

![download-artifacts](docs/images/download-artifacts.png)

Then, from your PC `code --install-extension path/to/atopile-*.vsix`
