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.1.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.1-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: camposcloud_sdk-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 94794ba343c49801e57e9d99517742ce015c1cea8c75631d0afa0db88e2fdaaa
MD5 2fdff232b5a6f1ee65293b89c57ca9b5
BLAKE2b-256 6aa6e838179e8d2d97e09d97fb66f0814f3ec1458035164d7aef2ce245b9367b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for camposcloud_sdk-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0eb5a36674c5fee09e656f061908df8149e98551485c263b4e86e3194cd7ca96
MD5 3835a933668493ce9a6b6e461d0e82b6
BLAKE2b-256 dd733f474f2bee7b76c4a2e365f58368baeb8a02d329dfc247aeb59b3ea86c4e

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