Name | hassle JSON |
Version |
3.1.10
JSON |
| download |
home_page | None |
Summary | Create, build, test, and publish Python projects and packages. |
upload_time | 2025-07-29 18:25:53 |
maintainer | None |
docs_url | None |
author | None |
requires_python | <3.12,>=3.10 |
license | None |
keywords |
automation
build
devops
packaging
test
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Hassle
Automate creating, building, testing, and publishing Python packages from the command line.
## Installation
Install with:
<pre>
pip install hassle
</pre>
You should be able to type `hassle help` in your terminal and see a list of commands:

### Additional setup:
Install git and add it to your PATH if it isn't already.
Some parts of this tool may require [communicating with Github]((https://docs.github.com/en/get-started/getting-started-with-git/caching-your-github-credentials-in-git)).
You will also need to register a [pypi account](https://pypi.org/account/register/) if you want to publish packages to https://pypi.org with this tool.
Once you've created and validated an account, you will need to follow the directions to generate an [api key](https://pypi.org/help/#apitoken).
Copy the key and in your home directory, create a '.pypirc' file if it doesn't already exist.
Edit the file so it contains the following (don't include the brackets around your api key):

## Configuration
After installation and the above additional setup, it is a good idea to run the 'configure' command.
This isn't required and a blank config will be generated whenever it is needed if it doesn't exist.
This info, if provided, is used to populate a new project's 'pyproject.toml' file.
Typing `hassle help configure`:

You can also view the current contents with the `config` command:

## Generating New Projects
New projects are generated with the `new` command:

Most of these options pertain to prefilling the generated 'pyproject.toml' file.
As a simple example we'll create a new package called 'nyquil':

A new folder in your current working directory called 'nyquil' should now exist.
It should have the following structure:

**Note: By default an MIT License is added to the project. Pass the `-nl/--no_license` flag to prevent this behavior.**
If you open the 'pyproject.toml' file it should look like the following except
for the 'project.authors' and 'project.urls' sections:

The package would do absolutely nothing, but with the generated files we do have the
viable minimum to build an installable python package.
## Running Tests
Hassle uses [Pytest](https://pypi.org/project/pytest/) and [Coverage](https://pypi.org/project/coverage/) to run tests.
When we invoke the `hassle test` command,
we should see something like this (pretending we have added test functions to `tests/test_nyquil.py`):

## Building
Building the package is as simple as using:
<pre>
>hassle build
</pre>
By default, the build command will:
1. Run any tests in the `tests` folder (abandoning the build if any fail).
2. Format source files with isort and black.
3. Scan project import statements and add any missing packages to the pyproject `dependencies` field.
4. Use [pdoc](https://pypi.org/project/pdoc/) to generate documentation (located in a created `docs` folder).
5. Run `python -m build .` to generate the `tar.gz` and `.whl` files (located in a created `dist` folder).
## Publishing
Assuming you've set up a [PyPi](https://pypi.org/) account, generated the api key, and configured the '.pypirc'
file as mentioned earlier, then you can publish the current version of your package by running:
<pre>
>hassle publish
</pre>
## Updating
When the time comes to make changes to your package, the `hassle update` command makes it easy.
This command needs at least one argument according to the type of update: `major`, `minor`, or `patch`.
This argument tells Hassle how to increment the project version.
Hassle uses the [semantic versioning standard](https://semver.org/),
so, for example, if your current version is `1.2.3` then
`>hassle update major` bumps to `2.0.0`,
`>hassle update minor` bumps to `1.3.0`,
and
`>hassle update patch` bumps to `1.2.4`.
By default, the update command will:
1. Run any tests in the `tests` folder (abandoning the update if any fail).
2. Increment the project version.
3. Run the build process as outlined above (minus step 1.).
4. Make a commit with the message `chore: build {project_version}`.
5. Git tag using the tag prefix in your `hassle_config.toml` file and the new project version.
6. Generate/update the `CHANGELOG.md` file using [auto-changelog](https://pypi.org/project/auto-changelog/).
(Normally `auto-changelog` overwrites the changelog file, but Hassle does some extra things so that any manual changes you make to the changelog are preserved).
7. Git commit the changelog.
8. Pull/push the current branch with the remote origin.
9. Publish the updated package if the update command was run with the `-p` flag.
10. Install the updated package if the update command was run with the `-i` flag.
Raw data
{
"_id": null,
"home_page": null,
"name": "hassle",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.12,>=3.10",
"maintainer_email": null,
"keywords": "automation, build, devops, packaging, test",
"author": null,
"author_email": "Matt Manes <mattmanes@pm.me>",
"download_url": "https://files.pythonhosted.org/packages/bb/a4/11ffdae03b087839859571f437024fb1be985b13af27966b2e54cc2b3d30/hassle-3.1.10.tar.gz",
"platform": null,
"description": "# Hassle\n\nAutomate creating, building, testing, and publishing Python packages from the command line. \n\n\n## Installation\n\nInstall with:\n\n<pre>\npip install hassle\n</pre>\n\nYou should be able to type `hassle help` in your terminal and see a list of commands:\n\n\n\n### Additional setup:\n\nInstall git and add it to your PATH if it isn't already. \nSome parts of this tool may require [communicating with Github]((https://docs.github.com/en/get-started/getting-started-with-git/caching-your-github-credentials-in-git)). \nYou will also need to register a [pypi account](https://pypi.org/account/register/) if you want to publish packages to https://pypi.org with this tool. \nOnce you've created and validated an account, you will need to follow the directions to generate an [api key](https://pypi.org/help/#apitoken). \nCopy the key and in your home directory, create a '.pypirc' file if it doesn't already exist. \nEdit the file so it contains the following (don't include the brackets around your api key):\n\n\n\n## Configuration\n\nAfter installation and the above additional setup, it is a good idea to run the 'configure' command.\nThis isn't required and a blank config will be generated whenever it is needed if it doesn't exist.\nThis info, if provided, is used to populate a new project's 'pyproject.toml' file.\nTyping `hassle help configure`:\n\n\nYou can also view the current contents with the `config` command:\n\n\n## Generating New Projects\nNew projects are generated with the `new` command: \n\n\nMost of these options pertain to prefilling the generated 'pyproject.toml' file. \nAs a simple example we'll create a new package called 'nyquil':\n\n\nA new folder in your current working directory called 'nyquil' should now exist. \nIt should have the following structure:\n\n\n\n**Note: By default an MIT License is added to the project. Pass the `-nl/--no_license` flag to prevent this behavior.** \nIf you open the 'pyproject.toml' file it should look like the following except\nfor the 'project.authors' and 'project.urls' sections:\n\n\nThe package would do absolutely nothing, but with the generated files we do have the\nviable minimum to build an installable python package.\n\n\n## Running Tests\n\nHassle uses [Pytest](https://pypi.org/project/pytest/) and [Coverage](https://pypi.org/project/coverage/) to run tests. \nWhen we invoke the `hassle test` command,\nwe should see something like this (pretending we have added test functions to `tests/test_nyquil.py`):\n\n\n\n## Building\n\nBuilding the package is as simple as using:\n\n<pre>\n>hassle build\n</pre>\n\nBy default, the build command will: \n1. Run any tests in the `tests` folder (abandoning the build if any fail). \n2. Format source files with isort and black. \n3. Scan project import statements and add any missing packages to the pyproject `dependencies` field. \n4. Use [pdoc](https://pypi.org/project/pdoc/) to generate documentation (located in a created `docs` folder). \n5. Run `python -m build .` to generate the `tar.gz` and `.whl` files (located in a created `dist` folder). \n\n\n## Publishing\n\nAssuming you've set up a [PyPi](https://pypi.org/) account, generated the api key, and configured the '.pypirc' \nfile as mentioned earlier, then you can publish the current version of your package by running:\n\n<pre>\n>hassle publish\n</pre>\n\n\n## Updating\n\nWhen the time comes to make changes to your package, the `hassle update` command makes it easy. \nThis command needs at least one argument according to the type of update: `major`, `minor`, or `patch`. \nThis argument tells Hassle how to increment the project version. \nHassle uses the [semantic versioning standard](https://semver.org/),\nso, for example, if your current version is `1.2.3` then \n\n`>hassle update major` bumps to `2.0.0`, \n`>hassle update minor` bumps to `1.3.0`, \nand \n`>hassle update patch` bumps to `1.2.4`. \n\nBy default, the update command will: \n1. Run any tests in the `tests` folder (abandoning the update if any fail). \n2. Increment the project version. \n3. Run the build process as outlined above (minus step 1.). \n4. Make a commit with the message `chore: build {project_version}`. \n5. Git tag using the tag prefix in your `hassle_config.toml` file and the new project version. \n6. Generate/update the `CHANGELOG.md` file using [auto-changelog](https://pypi.org/project/auto-changelog/). \n(Normally `auto-changelog` overwrites the changelog file, but Hassle does some extra things so that any manual changes you make to the changelog are preserved). \n7. Git commit the changelog. \n8. Pull/push the current branch with the remote origin. \n9. Publish the updated package if the update command was run with the `-p` flag. \n10. Install the updated package if the update command was run with the `-i` flag. \n\n",
"bugtrack_url": null,
"license": null,
"summary": "Create, build, test, and publish Python projects and packages.",
"version": "3.1.10",
"project_urls": {
"Documentation": "https://github.com/matt-manes/hassle/tree/main/docs",
"Homepage": "https://github.com/matt-manes/hassle",
"Source code": "https://github.com/matt-manes/hassle/tree/main/src/hassle"
},
"split_keywords": [
"automation",
" build",
" devops",
" packaging",
" test"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "daa13ec09cb1e56722cdf20e91d4f66e9d11a5e84f27f83975cf57ced130888e",
"md5": "c142abb4ba5e3cacc1a7c46658d4426b",
"sha256": "4ae98f4fb93c0891772b8920d90ac9d66e3b7f1dd620935faf564bdc717ee276"
},
"downloads": -1,
"filename": "hassle-3.1.10-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c142abb4ba5e3cacc1a7c46658d4426b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.12,>=3.10",
"size": 18321,
"upload_time": "2025-07-29T18:25:53",
"upload_time_iso_8601": "2025-07-29T18:25:53.088577Z",
"url": "https://files.pythonhosted.org/packages/da/a1/3ec09cb1e56722cdf20e91d4f66e9d11a5e84f27f83975cf57ced130888e/hassle-3.1.10-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bba411ffdae03b087839859571f437024fb1be985b13af27966b2e54cc2b3d30",
"md5": "1e2518bb67606e5afc463b41a9a389ad",
"sha256": "bf49bc41ae3d95b45da4e726259ecabee9772f2e1430a953b4cf2f1f11f73455"
},
"downloads": -1,
"filename": "hassle-3.1.10.tar.gz",
"has_sig": false,
"md5_digest": "1e2518bb67606e5afc463b41a9a389ad",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.12,>=3.10",
"size": 16519,
"upload_time": "2025-07-29T18:25:53",
"upload_time_iso_8601": "2025-07-29T18:25:53.902911Z",
"url": "https://files.pythonhosted.org/packages/bb/a4/11ffdae03b087839859571f437024fb1be985b13af27966b2e54cc2b3d30/hassle-3.1.10.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-29 18:25:53",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "matt-manes",
"github_project": "hassle",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "hassle"
}