> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Gestire gli snapshot

> In questa sezione imparerai a creare, recuperare e ripristinare gli snapshot per le tue applicazioni e i tuoi database utilizzando l'SDK Python.

[Client]: client

[Application]: client#application

Gli snapshot sono backup della tua applicazione o del tuo database in un momento specifico. Ti permettono di ripristinare la tua applicazione o il tuo database a uno stato precedente in caso di necessità. Square Cloud fornisce snapshot illimitati con backup automatici giornalieri.

## Creare uno snapshot di un'applicazione

`client.snapshot` restituisce un oggetto `Snapshot`.

<Tabs>
  <Tab title="Con Client">
    ```python theme={null}
    import squarecloud as square

    client = square.Client(api_key='API_KEY')

    async def example():
        snapshot = await client.snapshot(app_id='application_id')
        
        print(snapshot.url)  # Download URL for the snapshot
        print(snapshot.key)  # Snapshot key identifier
    ```
  </Tab>

  <Tab title="Con Application">
    ```python theme={null}
    import squarecloud as square

    client = square.Client(api_key='API_KEY')

    async def example():
        app = await client.app('application_id')
        snapshot = await app.snapshot()
        
        print(snapshot.url)  # Download URL for the snapshot
        print(snapshot.key)  # Snapshot key identifier
    ```
  </Tab>
</Tabs>

## Scaricare uno snapshot

L'oggetto `Snapshot` fornisce un metodo per scaricare lo snapshot come file zip.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    snapshot = await client.snapshot(app_id='application_id')
    
    # Download snapshot to current directory
    zip_file = await snapshot.download()
    
    # Download snapshot to specific directory
    zip_file = await snapshot.download(path='./backups')
```

## Elencare gli snapshot di un'applicazione

`client.all_app_snapshots` restituisce un elenco di oggetti `SnapshotInfo`.

<Tabs>
  <Tab title="Con Client">
    ```python theme={null}
    import squarecloud as square

    client = square.Client(api_key='API_KEY')

    async def example():
        snapshots = await client.all_app_snapshots(app_id='application_id')
        
        for snapshot in snapshots:
            print(f"Snapshot ID: {snapshot.id}")
            print(f"  Size: {snapshot.size}")
            print(f"  Created at: {snapshot.created_at}")
    ```
  </Tab>

  <Tab title="Con Application">
    ```python theme={null}
    import squarecloud as square

    client = square.Client(api_key='API_KEY')

    async def example():
        app = await client.app('application_id')
        snapshots = await app.all_snapshots()
        
        for snapshot in snapshots:
            print(f"Snapshot ID: {snapshot.id}")
            print(f"  Size: {snapshot.size}")
            print(f"  Created at: {snapshot.created_at}")
    ```
  </Tab>
</Tabs>

## Ripristinare uno snapshot

`client.restore_snapshot` restituisce un oggetto `Response`. Puoi ripristinare gli snapshot sia per le applicazioni che per i database.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    # Restore an application snapshot
    response = await client.restore_snapshot(
        application_type='app',
        app_id='application_id',
        snapshot_id='snapshot_id',
        version_id='version_id'
    )
    
    print(f"Snapshot restored: {response.status}")
    
    # Restore a database snapshot
    response = await client.restore_snapshot(
        application_type='database',
        app_id='database_id',
        snapshot_id='snapshot_id',
        version_id='version_id'
    )
    
    print(f"Database snapshot restored: {response.status}")
```

## Strutture dati degli snapshot

### Snapshot

L'oggetto `Snapshot` rappresenta uno snapshot creato:

| Proprietà | Tipo  | Descrizione                           |
| --------- | ----- | ------------------------------------- |
| `url`     | `str` | URL di download dello snapshot        |
| `key`     | `str` | Identificatore univoco dello snapshot |

### SnapshotInfo

L'oggetto `SnapshotInfo` rappresenta i metadati di uno snapshot:

| Proprietà    | Tipo  | Descrizione                                      |
| ------------ | ----- | ------------------------------------------------ |
| `id`         | `str` | Identificatore univoco dello snapshot            |
| `size`       | `str` | Dimensione dello snapshot                        |
| `created_at` | `str` | Timestamp di creazione dello snapshot (ISO 8601) |

## Best practice

* **Backup automatici**: Square Cloud crea automaticamente snapshot giornalieri per le tue applicazioni e i tuoi database.
* **Snapshot illimitati**: Crea tutti gli snapshot manuali che desideri senza costi aggiuntivi.
* **Periodo di conservazione**: Gli snapshot vengono conservati per 30 giorni.
* **Tempo di ripristino**: Il processo di ripristino richiede circa 60 secondi per garantire che tutti i dati siano stabili.
* **Test**: Prima di ripristinare uno snapshot, valuta la possibilità di creare una nuova applicazione o database per testare prima il processo di ripristino.

## Limiti degli snapshot

* **Snapshot giornalieri per piano**: Ogni piano può generare `(RAM / 256) * 2` snapshot al giorno
  * Esempio: piano Hobby con 2048MB = 16 snapshot giornalieri (480 al mese)
* **Conservazione**: Tutti gli snapshot vengono conservati per gli ultimi 30 giorni
* **Costo**: Nessun costo aggiuntivo per gli snapshot
