dsmrreader / dsmr-reader

DSMR-telegram reader & data visualizer for hobbyists. Free for non-commercial use.
https://dsmr-reader.readthedocs.io
Other
463 stars 95 forks source link

Google Drive Backup Support #690

Closed bobveringa closed 4 years ago

bobveringa commented 5 years ago

Ik gebruik DSMR-reader nu zelf al een paar maanden en het is geweldig. Ik zou zelf graag google drive support toevoegen. De afgelopen paar dagen heb ik gewerkt aan een implementatie van google drive API om te kijken of het mogelijk is om toe te voegen. Ik ben nu op het punt waarop ik testen kan gaan schrijven en het kan gaan toevoegen aan DSMR. Is Google Drive support iets waar je interesse in hebt om toe te voegen.

Ik zie ook dat je dropbox een eigen app hebt gemaakt binnen Django, wat zou de beste manier zijn om google drive support toe te voegen.

Ik ben redelijk nieuw met python, dit is voor mij een oefenproject om wat bekender te raken met de taal. Dus het is niet erg als er je er geen interesse in hebt.

dennissiemensma commented 5 years ago

Bedankt voor je voorstel. Ik heb zeker interesse in Google Drive, want meer keuze voor back-up is altijd goed. Als je wilt leren met Python dan kan ik je zeker wel op weg helpen. Ik kan je niet beloven of ik het zo 1-op-1 overneem, maar als je het beschikbaar stelt kan ik het misschien wel deels gebruiken en zet ik je uiteraard bij de credits.

Het is goed om te weten dat ik momenteel bezig ben met het deels herschrijven van dr Dropbox-sync, dus de dev-versie is het betere voorbeeld. Synchronisatie wordt nu bepaald door de bestands-hash en daarnaast heb ik het in een losse app gezet.

Wat betreft je vraag over hoe het toe te voegen. Ik denk dat je er doorgaans een losse app van kan maken. Eigenlijk zijn apps in Django bedoeld om alles los en portable te houden, maar binnen dit project is het meer splitsing van domein. Ik zou beginnen met het maken van een management command waarmee je makkelijk handmatig kan testen. Deze heb ik van de week toegevoegd voor Dropbox. Daarna kun je tests maken. In Python kun je heel makkelijk een hoop dingen mocken, maar dat heeft wel een leer-curve. Of mocken werkt is namelijk afhankelijk van hoe je een module in Python importeert en gebruikt (from x import y of import x.y). Voorbeeld voor dropbox tests hier. Het zijn niet de mooiste tests, maar je kunt een hoop scenario's (tot aan de API-call) testen.

dennissiemensma commented 5 years ago

Los van de code, is het afdoende om OAuth te doen via de webinterface voor Google Drive of moeten we, net als Dropbox, voor elke installatie een eigen App aanvragen bij Google?

bobveringa commented 5 years ago

Omdat ik zelf net erg bekend ben met python had ik de development versie al gebruikt om wat dingen op te doen. Ik ben ook niet bekend met Django, maar het moet denk ik niet al te moeilijk zijn om een app aan te maken.

Met betrekking tot OAuth, bij mijn huidige implementatie is het nodig om een app aan te maken en om Oauth te doen. Tenzij je een application published via google is dat denk ik ook de enige manier.

Daarnaast nog een vraag. Ik maak op dit moment gebruik van "Oauth 2.0 for TV and Limited Input Devices" https://developers.google.com/identity/protocols/OAuth2ForDevices. Omdat de ingebouwde methods in de client library allemaal blocking zijn.

Er moet helaas wel redelijk wat informatie opgeslagen worden, tussen de 7-8 velden met tokens, id’s en secrets enzovoort. Mijn huidige idee is om dit allemaal gewoon in een GoogleDriveSettings object op te slaan, en alleen de velden die nodig zijn aan de gebruiker te laten zien.

Is dat een goed idee, of is het beter om deze informatie ergens anders op te slaan?

dennissiemensma commented 5 years ago

Je kunt die inderdaad het beste in de settings opslaan, zoals je voorstelt. In de admin-interface kun je vrij makkelijk velden naar wens tonen of verbergen.

bobveringa commented 5 years ago

Ik heb zojuist de laatste tests geschreven voor de google drive integratie. Ik zou graag horen wat je er van vindt, en wat er eventueel aangepast zou moeten worden.

dennissiemensma commented 5 years ago

Goed bezig! Ik heb alleen even een diff in de browser bekeken met: https://github.com/dennissiemensma/dsmr-reader/compare/development...bover21:690-googledrive-support

Hier wat dingen die ik kan zien:

Op een later moment kan ik er wat inhoudelijker naar kijken, maar gezien de hoeveelheid code heb ik daar aardig wat tijd voor nodig.

bobveringa commented 5 years ago

Bedankt voor je snelle reactie en de goede verbeter punten.

Setup

dennissiemensma commented 5 years ago

Bedankt voor je toelichting! Ik kijk er op termijn inhoudelijker naar.

dennissiemensma commented 5 years ago

Ik ben hier opnieuw mee bezig geweest. Ik steun je verzoek om ondersteuning te bieden voor Google Drive, alleen ga ik dan via externe tools doen.

De reden is dat een aanzienlijk deel van dit project bestaat uit code voor het backuppen en veiligstellen van de data. Hoewel dat natuurlijk erg belangrijk is, is het niet de kern van het project en ik merk dat ik hier het afgelopen jaar ontzettend veel tijd aan kwijt ben.

Daarom wil ik later dit jaar kijken naar alternatieven. Niet alleen voor GDrive, maar ook voor de Dropbox-support die ik al had.

Voor GDrive lijkt me dit een interessante tool: https://github.com/gdrive-org/gdrive

Concreet zou dat betekenen dat DSMR-reader alleen de backups maakt (of misschien verander ik dat ook nog naar een crontab-variant), en dat het sycnen van data naar een derde partij niet meer afhankelijk is van een implementatie binnen dit project.

dennissiemensma commented 5 years ago

Hetzelfde geldt voor MS OneDrive, waar ook al langere tijd een ticket (#528) is binnen dit project.

bobveringa commented 5 years ago

Dat is best een goed idee. Ik had zelf ook kort gekeken naar een implementatie voor OneDrive, maar in tegenstelling tot google heeft de API alleen blocking calls daarom heb ik daarvan af gezien. Met een externe service zou het niet uitmaken dat het opzetten van een backup service blocking is omdat het de belangrijke services dan niet stopt.

Is het eventueel een idee om in de API een call toe te voegen waarmee het backup path opgevraagd kan worden. Op deze manier is alleen maar een reference naar de API nodig om het path te vinden en maakt het voor de exterene service niet uit als de locatie veranderd.

dennissiemensma commented 5 years ago

Ik denk dat het backup-pad gewoon standaard blijft. Maar het kan ook zo zijn dat die buiten de applicatie-map gaat, als ik backuppen ook via de crontab wil doen.

Deze wijzigingen zullen sowieso pas in een DSMR-reader v3.x komen, omdat ze backwards incompatible zijn en ik dan ook grote wijzigingen kan doorvoeren. Als er dan de noodzaak is om het pad op te vragen, komt dat er wel in.

dennissiemensma commented 4 years ago

Ik heb besloten dit verder niet op te pakken of te integreren binnen dit project. Wat meer uitleg staat in: https://github.com/dennissiemensma/dsmr-reader/issues/528#issuecomment-592174552