Skip to main content

SDK Campos Cloud

Project description

🚀 Campos Cloud Python SDK

SDK oficial em Python para interagir com a API do Campos Cloud - uma plataforma de hospedagem de aplicações em nuvem.

📦 Instalação

pip install camposcloud-sdk

🔑 Configuração

Para usar o SDK, você precisa de um token de autenticação da Campos Cloud:

from campos_sdk import CamposClient

# Inicializar o cliente
client = CamposClient(token="seu_token_aqui")

👤 Gerenciamento de Usuários

Obter informações do usuário

# Buscar dados do usuário atual
user = client.users.get_me()

print(f"Nome: {user.name}")
print(f"ID: {user._id}")
print(f"2FA Ativo: {user.isEmail2FAEnabled}")
print(f"Plano Gratuito: {user.hasClaimedFreePlan}")

🚀 Gerenciamento de Aplicações

Listar aplicações

# Buscar todas as aplicações
apps = client.applications.getApplications()

for app in apps:
    print(f"App: {app.name} - Status: {app.status}")

Obter aplicação específica

# Buscar uma aplicação específica (retorna wrapper com métodos)
app = client.applications.getApplication("app_id")

print(f"Nome: {app.name}")
print(f"Status: {app.status}")

# Ou buscar apenas os dados (sem wrapper)
app_data = client.applications.getApplicationData("app_id")

Controlar aplicações

# Iniciar aplicação
app = client.applications.startApplication("app_id")

# Parar aplicação
app = client.applications.stopApplication("app_id")

# Reiniciar aplicação
app = client.applications.restartApplication("app_id")

# Ou usar o wrapper
app = client.applications.getApplication("app_id")
app.start()
app.stop()
app.restart()

Criar nova aplicação

# Ler arquivo ZIP da aplicação
with open("minha_app.zip", "rb") as f:
    app_file = f.read()

# Criar aplicação
new_app = client.applications.createApplication(
    appName="Minha Nova App",
    file=app_file,
    mainFile="app.py",
    memoryMB=512,
    runtimeEnvironment="python",
    exposedViaWeb=True,
    autoRestartEnabled=True,
    startupCommand="python app.py",
    teamId="team_id_opcional"
)

print(f"App criada: {new_app.name}")

Atualizar aplicação

updated_app = client.applications.updateApplication(
    app_id="app_id",
    appName="Nome Atualizado",
    memoryMB=1024,
    runtimeEnvironment="python",
    startupCommand="python main.py",
    mainFile="main.py",
    autoRestartEnabled=True,
    exposedViaWeb=False,
    environmentVariables=[
        {"name": "ENV_VAR", "value": "valor"}
    ]
)

Deletar aplicação

# Deletar aplicação
client.applications.deleteApplication("app_id")

# Ou usar o wrapper
app = client.applications.getApplication("app_id")
app.delete()

📁 Gerenciamento de Arquivos

Listar arquivos da aplicação

# Listar arquivos
files = client.applications.getApplicationFiles("app_id")

for file in files:
    print(f"Arquivo: {file.name}")
    print(f"Caminho: {file.path}")
    print(f"É arquivo: {file.isFile}")
    print(f"É diretório: {file.isDirectory}")
    print(f"Tamanho: {file.size} bytes")

# Ou usar o wrapper
app = client.applications.getApplication("app_id")
files = app.getFiles()

Upload de arquivo

# Fazer upload de um arquivo
response = client.applications.uploadApplicationFile("app_id", "/caminho/para/arquivo.py")
print(response.message)

Deletar arquivos

# Deletar múltiplos arquivos
response = client.applications.deleteApplicationFile("app_id", ["arquivo1.py", "arquivo2.py"])

print(f"Sucessos: {response.success}")
print(f"Falhas: {response.failed}")

# Ou usar o wrapper
app = client.applications.getApplication("app_id")
response = app.deleteFiles(["arquivo1.py", "arquivo2.py"])

Download de arquivo

# Fazer download de arquivo
client.applications.downloadApplicationFile(
    app_id="app_id",
    file_id="file_id",
    file_path="/caminho/local/arquivo.py"
)

🎯 Wrapper de Aplicação

O SDK oferece um wrapper conveniente que combina dados e métodos:

# Obter wrapper da aplicação
app = client.applications.getApplication("app_id")

# Acessar dados
print(app.name)
print(app.status)
print(app.id)

# Executar ações
app.start()
app.stop()
app.restart()

# Gerenciar arquivos
files = app.getFiles()
app.deleteFiles(["arquivo.py"])

# Atualizar aplicação
app.update(
    appName="Novo Nome",
    memoryMB=1024
)

# Deletar aplicação
app.delete()

🚨 Tratamento de Erros

O SDK define exceções específicas para diferentes tipos de erro:

from campos_sdk.errors import (
    ApiError,
    AuthenticationError,
    NotFoundError,
    ValidationError,
    ServerError,
    NetworkError
)

try:
    user = client.users.get_me()
except AuthenticationError:
    print("Token inválido ou expirado")
except NotFoundError:
    print("Recurso não encontrado")
except ValidationError:
    print("Dados inválidos")
except NetworkError:
    print("Erro de conexão")
except ServerError:
    print("Erro interno do servidor")
except ApiError as e:
    print(f"Erro da API: {e.message} (Status: {e.status_code})")

📊 Modelos de Dados

User

user.name                  # Nome do usuário
user._id                   # ID único
user.isEmail2FAEnabled     # 2FA ativo
user.hasClaimedFreePlan    # Plano gratuito reclamado
user.activeSessions        # Lista de sessões ativas

Session

session.id           # ID da sessão
session.device       # Dispositivo
session.ip           # Endereço IP
session.browser      # Navegador
session.lastActive   # Última atividade (datetime)

Application

app.id        # ID da aplicação
app.name      # Nome
app.status    # Status atual

AppFile

file.name         # Nome do arquivo
file.path         # Caminho completo
file.isFile       # É arquivo
file.isDirectory  # É diretório
file.size         # Tamanho em bytes
file.createdAt    # Data de criação
file.modifiedAt   # Data de modificação

🧪 Testando

# Instalar dependências de teste
pip install pytest

# Executar todos os testes
pytest

# Executar testes específicos
pytest tests/test_real_integration.py -v

# Executar apenas testes de usuário
pytest -m user

# Executar apenas testes de aplicações
pytest -m apps

⚙️ Configurações Avançadas

Timeout customizado

client = CamposClient(token="token", timeout=60)  # 60 segundos

URL base customizada

client = CamposClient(
    token="token",
    base_url="https://api-dev.camposcloud.com/v1/"
)

Headers customizados

client = CamposClient(token="token")
client.session.headers.update({
    "User-Agent": "Minha-App/1.0",
    "X-Custom-Header": "valor"
})

📄 Licença

Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.

🤝 Contribuindo

  1. Faça um fork do projeto
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'Add some AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

📞 Suporte


Feito com ❤️ pela equipe Campos Cloud

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

camposcloud_sdk-0.1.0.tar.gz (11.6 kB view details)

Uploaded Source

Built Distribution

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

camposcloud_sdk-0.1.0-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: camposcloud_sdk-0.1.0.tar.gz
  • Upload date:
  • Size: 11.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for camposcloud_sdk-0.1.0.tar.gz
Algorithm Hash digest
SHA256 214916c39f4d418d843cb3c628806c23bea5a7573a543d9186eb9b47acf7bb21
MD5 70f32e53affdde3c091546cc6626d789
BLAKE2b-256 50edc2c2787f107e4983a9b14746c9e139842adc17bbaa20adc90fbd36f3ba20

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for camposcloud_sdk-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 32c8eab2d165fa67c3325a2acb72d5e256ca5f01430d558f026fd9116836facd
MD5 c7c3e0bf59ac85d95ec856679ce613dc
BLAKE2b-256 bc538f7505908a9d7f2efe6c9fad106d323882ea1236e4dba781d4ffeca97c1d

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