Re: [Freepto] migration tool: newborn

Delete this message

Reply to this message
Autor: paskao
Data:  
A: freepto
Assumpte: Re: [Freepto] migration tool: newborn
El 08/05/15 a las 10:04, boyska escribió:
> I started working on the "migration tool". In this thread I'd like to
> share ideas about defining its goals, its implementation design and
> maybe even a roadmap.


Below I paste for you some implementation details that we have discussed
today. Sorry for the Italian language! :P


* dead_newborn.explore(from_root_dir, from_home_dir, explorers=None) ->
lista di memorabilia

cosi' fai for memo in newborn.explore:
    gtk.qualcosa(memo.boh)


Se explorers e' None, sceglie in automatico usando get_default_explorers()

from_home_dir e' un percorso assoluto nel sistema host, NON il percorso
a partire da from_root_dir. Quindi tipo
dead_newborn.explore('/mnt/pennina/', '/mnt/pennina/home/paranoid')

* dead_newborn.retrieve(memo, to_root_dir, to_home_dir)
to_root_dir e to_home_dir sono tipicamente '/' e os.environ['HOME']

* dead_newborn.get_avail_explorers()
ritorna un dizionario nome:funzione

* dead_newborn.get_default_explorers() questi explorer sono usati se
explorers=None

class Memorabilia:
    * kind: un "tipo", deve corrispondere al nome di un retriever
disponibile.
    * display: stringa da mostrare all'utente
    * display_details: stringa da mostrare all'utente con dettagli
aggiuntivi
    * data: dizionario di dati da passare al retriever; tipicamente puo'
contenere i filename da importare


I retriever sono funzioni fatte cosi': retriever_custom(memo, to_root,
to_home). Devono loggare tutti su getLogger("retriever.loronome"), in
modo che l'interfaccia possa mettere un handler su "retriever.*" per
visualizzarlo. Quando un retriever fallisce, deve lanciare un'eccezione.
Un retriever dovrebbe fallire solo per errori non recuperabili, non per
errori minori. Questo e' perche' il retriever non puo' interagire con
l'utente (ad esempio non puo' chiedere conferma per sovrascrivere file)
e quindi e' meglio se scrive con un file nuovo.

Ogni retriever, in caso di successo, deve scrivere in
~/.config/newborn/imports/timestamp-suonome-versione.json le
informazioni su che cosa ha importato, dove, eccetera.
{
    'paths': [{i, path, che, ha, senso, aprire: {import info opzionali
(errori di copia ecc)}],
    'date_start': xx,
    'date_end': xxx,
    'status': OK,
}


* dead_newborn.log.get_logs() -> generatore ordinato temporalmente di
tutti gli oggetti loggati
Ogni oggetto e' fatto cosi':
    { 'kind': 'suonome', #estratto dal nome del file
      'date': datetime(asdasd), #estratto dal nome del file
      'status': True/False,
      'error': None oppure 'blablabla'
      }


* dead_newborn.log.write_log(kind, data={})
Esempio di utilizzo:
found_memos = dead_newborn.explore('/mnt/usbpen',
'/mnt/usbpen/home/paranoid')
for memo in found_memos:
    add_gtk_line_somewhere("{} ({})".format(memo.display,
memo.display_details))


quando l'utente clicca su "OK"
for memo in selected_memos:
    dead_newborn.retrieve(memo, '/', '/home/paranoid')