[Feature] Programmatically create collab


#1

For the March release, Brain Simulation and Neuromorphic get in touch with us in order to know how they can programatically create a Collab. @andrew_davison presented the feature as being able to create a collab from a template while Felix Schürmann and @courcol were more thinking about cloning a current collab.

Both idea have strength and weakness that can be discussed here but for the next release, we agreed to found a solution about a scripted way to create a collab with application instantiation as we already have the necessary tool to do so. One of the remaining question is how to do it at the cheapest cost for maximum effectiveness.

After discussion with @brukau, we see three possible ways that needs to be discussed further:

  1. create a collab from the client side using javascript
  2. extends the collab template mechanism already present in the collab service (python)
  3. provides python examples (in a notebook) on how to script collab creation and let anyone interested add this code to their backend

The javascript client (1) is basically working today and can offer the best UX experience. As the creation process can be quite long, being able to code a UI that display the progress can be a nice to have. On the other hands, most team don’t have strong javascript expertise and that might put most of the complexity in the hand of the app owner.

The solution about having python example is almost similar (3), but it might easier to integrate for other teams in their own server.

The collab server is probably cleaner from an architecture standpoint but is hard to test for implementer (python 2.6, nginx for auth, …) and needs to be reviewed by the collab service maintainers as it impact the central code. Another way would be to create a new dedicated backend for this.


#2

This is initial email from @andrew_davison

Hi Olivier,

At the Manchester CodeJam I was talking to someone (I think it was you!) about creating new Collabs with a customized set of pre-installed Apps (in addition to the standard “Overview”, “Team”, “Storage”, “Settings”).

You suggested copying the existing “Create a New Collab” app and modifying it for our needs.

Please could you point me to/give me access to the code for this app?

Cheers,

Andrew

And the initial mail from Felix

Dear Olivier,

As per our discussion, here the context in which we would like to clone a collab (I.e. Create a new collab for the user from an already existing (read-only) collab).

Thanks,
Felix


#3

From my perspective, the ideal solution would be to generalise the “Create a New Collab” app so it can be added to any existing collab, and to have an edit mode allowing collab owners to specify which apps should be pre-installed.

If there is a faster solution which could be used in the short-term and which requires development effort on our part, I’d be happy with that, but longer-term I think this is core functionality which should not require platform-specific development effort.


#4

This is an interesting view. So the screen shot below, from Felix might in fact be implemented using this app. One of the open issue I can see is how to auto-configure each app. As I understood your use case, you don’t need to configure the application. But @courcol for example needs to add a Jupyter notebook, and link it to an uploaded file.


#5

we need the example input data to be in the collab storage and the example notebooks to be in the storage too.


#6

but why do you need example data in the cloned collab?
if your original example collab is public everybody can access the data


#7

yes, reference data can be accessible from another collab.
configuration files that are taken as input should be copied if I want to let user modify it.


#8

@courcol, @andrew_davison,

I created an angularJS service called hbpCollaboratoryAutomator that let you script some of those stuff. You can read about it here, then here.

The source code is on GitHub

I also added an edit view to the Collab Creation Form so that when you add the app to a Collab you can provide a JSON object that will be given to hbpCollaboratoryAutomator service. I plan to deploy the new Create Collab app to production tomorrow because friday.

At this point, your use case should be implemented Andrew.


#9

It is on prod! You can know add the Create Collab app to your own Collab and edit it.

The editing form is a bit minimalistic but it should be sufficient. I use this content to test your use case:

 {
  "description": "Use the Neuromorphic Computing Platform Job Manager v2"
  "after": [{
      "nav": {
        "app": "Neuromorphic Computing Platform Job Manager v2",
        "name": "NMC Job Manager"
      }
  }]
}

Best,
Olivier


#10

That’s great! Many thanks for the quick implementation of this.

Is there a way to add text to the “Overview” page within the JSON config?

Alternatively, could the nav links to the apps specified in the config be placed above the default nav links (Overview, Team, Storage, Settings) - this way I can add a custom page as the default landing page for the collab.

The general idea, with either approach, is to have a landing page which explains to the user what they can do next.

Cheers,

Andrew


#11

Hi Andrew,

Not at this time but Axel von Armin also asked for it. I plan to add the possibility to load the overview content from an HTML file stored somewhere in storage next week.

The whole HTML content will be cleaned up so only a limited amount of HTML are authorized ; the same as in Rich Text Editor.

I like your other proposal as well but in this case I would prefer to remove the notion of default collab. That is a change on the server side and I would prefer doing it after the release.

As a side note, the copy feature will be deployed a bit later today, but you don’t not need it in your use case.

Best,
Olivier


#12

From now on, you can customise the overview page with a HTML snippet provided by a file from a storage. Examples can be found in the documentation or in the Create Collab From settings page.

Documentation: https://developer.humanbrainproject.eu/docs/projects/HBP%20Collaboratory%20Documentation/1.7/app-developer-manual/angular-hbp-collaboratory/hbpCollaboratory.hbpCollaboratoryAutomator.html

I hope this feature will help you do crazy things with the Collaboratory. Please let me know what you did with it.

Best,
Olivier