Skip to main content

CLI para inicialização rápida de extensões pyRevit

Project description

fdmep — CLI para scaffolding de extensões pyRevit

PyPI version Python versions License

Sobre o Projeto

fdmep é uma aplicação CLI para facilitar inicializações de extensões pyRevit.

1) Como usar

Instale via pip:

pip install fdmep

Inicialize um projeto:

fdmep install

Requisitos: Python 3.9+, permissões de escrita no diretório atual. (pyRevit não é necessário para rodar o scaffolding, apenas para usar a extensão criada.)


Sobre este Tutorial: Criando uma CLI Python publicável (ex.: fdmep)

Este guia mostra o passo a passo para criar uma aplicação CLI instalável via pip e que expõe um comando de terminal (por ex., fdmep com subcomando install). O fluxo usa setuptools e pyproject.toml com o layout moderno src/.


1) Estrutura mínima do projeto

fdmep/
├─ src/
│  └─ fdmep/
│     ├─ __init__.py
│     ├─ cli.py
│     └─ scaffolder.py      # sua lógica (criar pastas/arquivos etc.)
├─ pyproject.toml
├─ README.md
├─ LICENSE
└─ .gitignore

Dica: o nome do pacote (fdmep) deve ser igual ao nome da pasta dentro de src/.


2) pyproject.toml (configuração do pacote)

Crie o arquivo pyproject.toml na raiz com o conteúdo abaixo:

[build-system]
requires = ["setuptools>=68", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "fdmep"
version = "0.1.0"
description = "CLI para inicialização rápida de extensões pyRevit"
readme = "README.md"
authors = [{ name = "Seu Nome", email = "seuemail@example.com" }]
license = { text = "MIT" }
requires-python = ">=3.9"
dependencies = [
  "colorama>=0.4.6"
]

[project.urls]
Homepage = "https://github.com/seuuser/fdmep"
Issues = "https://github.com/seuuser/fdmep/issues"

# cria o executável de terminal `fdmep`
[project.scripts]
fdmep = "fdmep.cli:main"

[tool.setuptools]
package-dir = {"" = "src"}

[tool.setuptools.packages.find]
where = ["src"]
  • project.scripts → mapeia fdmep para a função main no módulo fdmep.cli.
  • package-dir e packages.find → dizem ao setuptools para procurar o pacote dentro de src/.

3) Código da CLI

3.1 src/fdmep/__init__.py

__version__ = "0.1.0"

3.2 src/fdmep/scaffolder.py (sua lógica de negócio)

# -*- coding: utf-8 -*-
import os

try:
    from colorama import init, Fore, Style
    init(autoreset=True)
except Exception:
    class _NoColor:
        def __getattr__(self, _): return ''
    Fore = Style = _NoColor()

def info(m): print(f"{Fore.CYAN}{m}{Style.RESET_ALL}")
def ok(m):   print(f"{Fore.GREEN}{m}{Style.RESET_ALL}")
def warn(m): print(f"{Fore.YELLOW}{m}{Style.RESET_ALL}")
def err(m):  print(f"{Fore.RED}{m}{Style.RESET_ALL}")

def _ensure_dir(path):
    if not os.path.isdir(path):
        os.mkdir(path)
        ok(f"Criada pasta: {path}")
    else:
        info(f"Pasta já existe: {path}")

def run_create():
    \"\"\"Fluxo simples de demonstração para validar a CLI.\"\"\"
    info("Iniciando scaffolding da extensão pyRevit (demo).")
    _ensure_dir("MyExtension.extension")
    os.chdir("MyExtension.extension")
    _ensure_dir("MyPanel.panel")
    os.chdir("MyPanel.panel")
    _ensure_dir("MyCommand.pushbutton")
    ok("Extensão criada/atualizada! (demo)")

3.3 src/fdmep/cli.py (ponto de entrada da CLI)

# -*- coding: utf-8 -*-
import argparse
from importlib.metadata import version, PackageNotFoundError

from fdmep.scaffolder import run_create
from fdmep import __version__

def main():
    parser = argparse.ArgumentParser(
        prog="fdmep",
        description="CLI para inicializar extensões pyRevit rapidamente."
    )
    parser.add_argument("--version", action="store_true", help="Mostra a versão e sai.")

    sub = parser.add_subparsers(dest="command")
    sub.add_parser("create", help="Executa o scaffolding/instalação da extensão.")

    args = parser.parse_args()

    if args.version:
        try:
            print(version("fdmep"))
        except PackageNotFoundError:
            print(__version__)
        return

    if args.command == "create":
        run_create()
        return

    parser.print_help()

4) Desenvolvimento local

4.1 Instalar em modo editable

No diretório raiz do projeto (onde está o pyproject.toml):

# Windows (com Python Launcher)
py -3.11 -m pip install -e .

# ou Linux/macOS
python -m pip install -e .

Agora você já tem o comando disponível no PATH:

fdmep --version
fdmep install

4.2 Rodar sem o wrapper (útil para debug)

py -3.11 -m fdmep.cli --version
py -3.11 -m fdmep.cli install

5) Empacotar e publicar

5.1 Gerar os artefatos

python -m pip install build
python -m build
# sairão arquivos em dist/*.whl e dist/*.tar.gz

5.2 Publicar (PyPI)

python -m pip install twine
twine upload dist/*
# será solicitado usuário/senha do PyPI

Alternativa moderna com uv:

uv build
uv publish

6) TL;DR

  1. Estrutura com layout src/
  2. pyproject.toml usando setuptools e project.scripts
  3. cli.py com main() + scaffolder.py com run_create()
  4. pip install -e . para testar localmente
  5. python -m build e twine upload dist/* para publicar

Pronto! Sua CLI estará instalável via pip install fdmep e executável como fdmep create. 🚀

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

fdmep-0.2.0.tar.gz (5.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fdmep-0.2.0-py3-none-any.whl (6.9 kB view details)

Uploaded Python 3

File details

Details for the file fdmep-0.2.0.tar.gz.

File metadata

  • Download URL: fdmep-0.2.0.tar.gz
  • Upload date:
  • Size: 5.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for fdmep-0.2.0.tar.gz
Algorithm Hash digest
SHA256 a4168626a7914d9bc65d7b347bb2ee93eb117780f2444a58fbd7fa03f75314ac
MD5 64cba6271a81c15638c996f8c37c0be3
BLAKE2b-256 f3464a2dd138f6a4265d82a1e412c84174ba721ea6554b5abb442f6e08d8ed6e

See more details on using hashes here.

File details

Details for the file fdmep-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: fdmep-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 6.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for fdmep-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d5ac7190f2d366c8912b99cf845d54ca343bd1bc63248142a68c2a59007e0a30
MD5 e8ec1550c7e44e54aac29bdc813e85cd
BLAKE2b-256 cbe9244d5a996e90be39a3d84d1067e23f2ed033565337dbba10c6ea3bb6d77c

See more details on using hashes here.

Supported by

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