Nice work, Staś!

I'm playing with the API and like it a lot.

What are the next steps here?

There's already a new possible use case around the corner:
https://addons.mozilla.org/sl/firefox/addon/pontoon-tools/
https://github.com/MikkCZ/pontoon-tools/

-Matjaž

On Mon, Aug 28, 2017 at 5:57 PM, Staś Małolepszy <[email protected]> wrote:
> flod pointed out a number of troubles he ran into when testing my branch. 
> Here's the summary of the fixes:
>
> I added Project.slug and also changed the arguments to the project(slug) and 
> locale(code) queries.
>
> For getting a JSON response something like this should work:
>
>   curl -X POST -d 'query={ project(slug: "amo") { name } }'
> http://localhost:8000/graphql
>
> I removed pagination for now to make it easier to support the main
> goal of this API experiment which is programmatically getting data out
> of Pontoon.  If we need pagination in the future we can add new fields
> like project_pages and locale_pages.
>
> Pagination helps prevent getting flooded with data from the API. I
> guess that's useful when building UIs, but not very useful when doing
> data mining.  It also helps prevent DOS attacks but I already
> mitigated that to a large extent by doing introspection on the query
> and forbidding cyclic relations.
>
> I renamed Project.locales to Locale.localizations and
> Locale.projects to Locale.localizations to make it clearer that those are the 
> "ProjectLocale" objects in Pontoon's DB.
>
> I also added missingStrings where possible. missingStrings are not stored in 
> the DB, so I had to add them explicitly by computing them:
>
> https://github.com/stasm/pontoon/commit/f16c1eeb94b65d9f9fff1c112bf6f424983fd5d2
>
> The query structure was rather verbose with a lot of intermediate "items" 
> objects.  The goal of those was to make it possible to provide 
> meta-information about the results, like the total count of items (which 
> isn't an item on its
> own). I removed "items" for now and flattened the query structure. The main 
> use-case for now is the data itself rather than the counts.
>
> We could also establish a convention in the future that for any Foo, "foos" 
> is a simple list of Foos and foo_pages is a paginated result with 
> meta-information.
>
> To illustrate the changes, here are a few example queries that you can try 
> running on my branch:
>
> query sumo {
>   project(slug: "sumo") {
>     missingStrings,
>     localizations {
>       locale {
>         name
>       }
>       missingStrings
>     }
>   }
> }
>
> query french {
>   locale(code: "fr") {
>     missingStrings,
>     localizations {
>       project {
>         name
>       }
>       missingStrings
>     }
>   }
> }
>
> query amo {
>   project(slug: "amo") {
>     name
>   }
> }
>
> query allProjects {
>   projects {
>     name
>     localizations {
>       locale {
>         name
>       }
>     }
>   }
> }
>
> Also interesting to note is that last night a big PR was merged to graphene 
> and it looks like version 2.0 is in the works:
>
> https://github.com/graphql-python/graphene/pull/500
>
> This might answer some of our worries about graphene not being maintained.  
> And introduce new ones about it being not stable enough :)
>
> Staś
> _______________________________________________
> tools-l10n mailing list
> [email protected]
> https://lists.mozilla.org/listinfo/tools-l10n
_______________________________________________
tools-l10n mailing list
[email protected]
https://lists.mozilla.org/listinfo/tools-l10n

Reply via email to