From e21aa6799de7ec53def4a2c28654f0d4199b7af9 Mon Sep 17 00:00:00 2001 From: Swen Vermeul <swen@ethz.ch> Date: Fri, 27 Jan 2017 09:49:39 +0100 Subject: [PATCH] new pybis demo notebook to show the new features --- src/python/pybis/notebooks/pybis demo.ipynb | 6780 ++++++++++++------- 1 file changed, 4433 insertions(+), 2347 deletions(-) diff --git a/src/python/pybis/notebooks/pybis demo.ipynb b/src/python/pybis/notebooks/pybis demo.ipynb index 2fce041b236..1fa84df24be 100644 --- a/src/python/pybis/notebooks/pybis demo.ipynb +++ b/src/python/pybis/notebooks/pybis demo.ipynb @@ -17,7 +17,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": { "collapsed": false }, @@ -25,10 +25,10 @@ { "data": { "text/plain": [ - "'vermeul-170105170439098x34CD40C052CDA7A12E34AFFDB14FB134'" + "'vermeul-170126143455586x8A10E9354784B7ED77C8901A15079664'" ] }, - "execution_count": 3, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -39,9 +39,16 @@ "o.token" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "check if session is still active:" + ] + }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 5, "metadata": { "collapsed": false }, @@ -52,7 +59,7 @@ "True" ] }, - "execution_count": 26, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -65,12 +72,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Manually connect to an instance using your username/password and storing the token for later use" + "login with a password if the token is no longer valid - and store the token" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": { "collapsed": false }, @@ -85,10 +92,10 @@ { "data": { "text/plain": [ - "'vermeul-170105170439098x34CD40C052CDA7A12E34AFFDB14FB134'" + "'vermeul-170126143455586x8A10E9354784B7ED77C8901A15079664'" ] }, - "execution_count": 2, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -112,7 +119,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 3, "metadata": { "collapsed": false }, @@ -125,14 +132,16 @@ ] }, { - "data": { - "text/plain": [ - "'vermeul-161213095820805x4BD32D0691A016963A62966F872D0D65'" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" + "ename": "ValueError", + "evalue": "login to openBIS failed", + "output_type": "error", + "traceback": [ + "\u001b[1;31m\u001b[0m", + "\u001b[1;31mValueError\u001b[0mTraceback (most recent call last)", + "\u001b[1;32m<ipython-input-3-1d417cc1b72e>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mo2\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mOpenbis\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'https://sprint-openbis.ethz.ch:8443'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mverify_certificates\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mpassword\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgetpass\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgetpass\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m \u001b[0mo2\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlogin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'vermeul'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mpassword\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 6\u001b[0m \u001b[0mo2\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtoken\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m/vagrant_python/PyBis/pybis/pybis.py\u001b[0m in \u001b[0;36mlogin\u001b[1;34m(self, username, password, save_token)\u001b[0m\n\u001b[0;32m 636\u001b[0m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_post_request\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mas_v3\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlogin_request\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 637\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mresult\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 638\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"login to openBIS failed\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 639\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 640\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtoken\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mValueError\u001b[0m: login to openBIS failed" + ] } ], "source": [ @@ -148,29 +157,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Check wether our session is still valid" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "o2.is_session_active()" + "disconnnect (or rather: make the session key invalid):" ] }, { @@ -191,9 +178,16 @@ "## get general information about openBIS" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Data Store Servers (DSS)" + ] + }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": { "collapsed": false }, @@ -227,7 +221,7 @@ "0 DSS1 https://localhost:8444/datastore_server https://localhost:8444" ] }, - "execution_count": 4, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -237,41 +231,15 @@ ] }, { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "sp = o.get_space('VERMEUL')" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'@id': 3, '@type': 'as.dto.space.id.SpacePermId', 'permId': 'VERMEUL'}" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "cell_type": "markdown", + "metadata": {}, "source": [ - "sp.permId" + "list all available spaces:" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": { "collapsed": false }, @@ -331,22 +299,69 @@ "</div>" ], "text/plain": [ - "<pybis.pybis.Things at 0x7f75484a1320>" + "<pybis.pybis.Things at 0x7f7ff39e4fd0>" ] }, - "execution_count": 7, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "o.get_spaces()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>MY_NEW_SPACE</td> </tr><tr> <td>permId</td> <td>MY_NEW_SPACE</td> </tr><tr> <td>description</td> <td>this is yet another space</td> </tr><tr> <td>registrator</td> <td>vermeul</td> </tr><tr> <td>registrationDate</td> <td>2016-07-15 03:02:14</td> </tr><tr> <td>modificationDate</td> <td>2016-07-15 03:02:14</td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Space at 0x7f7ff5194898>" + ] + }, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "sp=o.get_spaces()\n", + "sp = o.get_space('my_new_space')\n", + "# another way: get space number 3 from the list above.\n", + "# sp = o.get_spaces()[3]\n", + "# sp = o.get_spaces()['MY_NEW_SPACE']\n", "sp" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "list all the projects within that space" + ] + }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 10, "metadata": { "collapsed": false }, @@ -359,121 +374,53 @@ " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", - " <th>code</th>\n", - " <th>space</th>\n", + " <th>identifier</th>\n", + " <th>permId</th>\n", + " <th>leader</th>\n", " <th>registrator</th>\n", " <th>registrationDate</th>\n", " <th>modifier</th>\n", " <th>modificationDate</th>\n", - " <th>permid</th>\n", - " <th>identifier</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", - " <td>BACTERIA</td>\n", - " <td>MATERIALS</td>\n", - " <td></td>\n", - " <td>2016-06-24 11:47:52</td>\n", - " <td></td>\n", - " <td>2016-06-24 11:47:52</td>\n", - " <td>20160624054751885-33</td>\n", - " <td>/MATERIALS/BACTERIA</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>CELL_LINES</td>\n", - " <td>MATERIALS</td>\n", - " <td></td>\n", - " <td>2016-06-24 11:47:52</td>\n", - " <td></td>\n", - " <td>2016-06-24 11:47:52</td>\n", - " <td>20160624054751885-34</td>\n", - " <td>/MATERIALS/CELL_LINES</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>FLIES</td>\n", - " <td>MATERIALS</td>\n", - " <td></td>\n", - " <td>2016-06-24 11:47:52</td>\n", - " <td></td>\n", - " <td>2016-06-24 11:47:52</td>\n", - " <td>20160624054751885-35</td>\n", - " <td>/MATERIALS/FLIES</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>PLASMIDS</td>\n", - " <td>MATERIALS</td>\n", - " <td></td>\n", - " <td>2016-06-24 11:47:52</td>\n", - " <td></td>\n", - " <td>2016-06-24 11:47:52</td>\n", - " <td>20160624054751885-37</td>\n", - " <td>/MATERIALS/PLASMIDS</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>POLYNUCLEOTIDES</td>\n", - " <td>MATERIALS</td>\n", - " <td></td>\n", - " <td>2016-06-24 11:47:52</td>\n", - " <td></td>\n", - " <td>2016-06-24 11:47:52</td>\n", - " <td>20160624054751885-38</td>\n", - " <td>/MATERIALS/POLYNUCLEOTIDES</td>\n", - " </tr>\n", - " <tr>\n", - " <th>5</th>\n", - " <td>REAGENTS</td>\n", - " <td>MATERIALS</td>\n", - " <td></td>\n", - " <td>2016-06-24 11:47:52</td>\n", - " <td></td>\n", - " <td>2016-06-24 11:47:52</td>\n", - " <td>20160624054751885-32</td>\n", - " <td>/MATERIALS/REAGENTS</td>\n", - " </tr>\n", - " <tr>\n", - " <th>6</th>\n", - " <td>YEASTS</td>\n", - " <td>MATERIALS</td>\n", - " <td></td>\n", - " <td>2016-06-24 11:47:52</td>\n", - " <td></td>\n", - " <td>2016-10-04 22:04:57</td>\n", - " <td>20160624054751885-36</td>\n", - " <td>/MATERIALS/YEASTS</td>\n", + " <td>/MY_NEW_SPACE/VERMEUL_PROJECT</td>\n", + " <td>20160926234755430-363</td>\n", + " <td>None</td>\n", + " <td>vermeul</td>\n", + " <td>2016-09-26 23:47:55</td>\n", + " <td>admin</td>\n", + " <td>2017-01-20 23:57:45</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ - "<pybis.pybis.Things at 0x7f7548264470>" + "<pybis.pybis.Things at 0x7f7ff39e8940>" ] }, - "execution_count": 15, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "o.get_projects(space='MATERIALS')" + "sp.get_projects()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**get vocabulary terms**" + "get details of the first project in this list" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 4, "metadata": { "collapsed": false }, @@ -485,49 +432,49 @@ " <table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", - " <th>vocabulary term</th>\n", - " <th>label</th>\n", - " <th>description</th>\n", - " <th>vocabulary</th>\n", + " <th>attribute</th>\n", + " <th>value</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", - " <tr> <td>PBLUESCRIPT_II_KS_PLUS</td> <td>pBluescript II KS +</td> <td>Commercial vector for cloning in bacteria (Stratagene)</td> <td>BACKBONE</td> </tr><tr> <td>PSPPOLY_A</td> <td>pSPpoly(A)</td> <td>Standard cloning vector. It can be used for in vitro trascription from SP6 promoter. It contains a poly(A) to generate poly(A)+ transcripts in vitro (Promega)</td> <td>BACKBONE</td> </tr><tr> <td>PRS30Y</td> <td>pRS30y</td> <td>Integrative yeast shuttle vector from Sikorski et al, 1989</td> <td>BACKBONE</td> </tr><tr> <td>PRS31Y</td> <td>pRS31y</td> <td>Centromeric yeast shuttle vector from Sikorski et al, 1989</td> <td>BACKBONE</td> </tr><tr> <td>PRS40Y</td> <td>pRS40y</td> <td>Integrative yeast shuttle vector from Sikorski et al, 1992</td> <td>BACKBONE</td> </tr><tr> <td>PRS41Y</td> <td>pRS41y</td> <td>Centromeric yeast shuttle vector from Sikorski et al, 1992</td> <td>BACKBONE</td> </tr><tr> <td>PRS42Y</td> <td>pRS42y</td> <td>2-micron-based yeast shuttle vector from Sikorski et al, 1992</td> <td>BACKBONE</td> </tr><tr> <td>UNKNOWN</td> <td>unknown</td> <td>unknown vector</td> <td>BACKBONE</td> </tr><tr> <td>PGEX4T1</td> <td>pGEX4T1</td> <td>Vector for bacterial expression</td> <td>BACKBONE</td> </tr>\n", + " <tr> <td>code</td> <td>VERMEUL_PROJECT</td> </tr><tr> <td>description</td> <td>my first project in my space...</td> </tr><tr> <td>permId</td> <td>20160926234755430-363</td> </tr><tr> <td>identifier</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT</td> </tr><tr> <td>space</td> <td>MY_NEW_SPACE</td> </tr><tr> <td>leader</td> <td></td> </tr><tr> <td>registrator</td> <td>vermeul</td> </tr><tr> <td>registrationDate</td> <td>2016-09-26 23:47:55</td> </tr><tr> <td>modifier</td> <td>admin</td> </tr><tr> <td>modificationDate</td> <td>2017-01-20 23:57:45</td> </tr><tr><td>attachments</td><td>pybis.pdf</td></tr>\n", " </tbody>\n", " </table>\n", " " ], "text/plain": [ - "<pybis.pybis.Vocabulary at 0x7f75482525c0>" + "<pybis.pybis.Project at 0x7f6a2776dbe0>" ] }, - "execution_count": 17, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "x = o.get_terms('BACKBONE')\n", - "x" + "pr = sp.get_projects()[0]\n", + "# this works too:\n", + "# pr = sp.get_projects()['/MY_NEW_SPACE/VERMEUL_PROJECT']\n", + "pr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## get information about general types" + "list all possible attributes and methods by using TAB completition" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 5, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ - "from pybis import Openbis\n", - "o = Openbis(url='https://localhost:8443', verify_certificates=False)" + "# try it: put the cursor after the dot and press TAB\n", + "pr." ] }, { @@ -539,54 +486,8 @@ "outputs": [ { "data": { - "text/html": [ - "<div>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>code</th>\n", - " <th>description</th>\n", - " <th>modificationDate</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>DEFAULT_EXPERIMENT</td>\n", - " <td>Default Experiment</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>MATERIALS</td>\n", - " <td>Folder used to organize samples in the Invento...</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>METHODS</td>\n", - " <td>Folder used to organize samples in the Invento...</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>BOARDS</td>\n", - " <td>Folder used to organize boards</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>UNKNOWN</td>\n", - " <td>Unknown</td>\n", - " <td>2016-06-24 10:47:01</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], "text/plain": [ - "<pybis.pybis.Things at 0x7f7548252438>" + "'vermeul-170124150556968xD89B56E418C00C50087A3B6D282B996F'" ] }, "execution_count": 12, @@ -595,7 +496,9 @@ } ], "source": [ - "o.get_experiment_types()" + "from pybis import Openbis\n", + "o = Openbis(url='https://localhost:8443', verify_certificates=False)\n", + "o.token" ] }, { @@ -604,6 +507,17 @@ "metadata": { "collapsed": false }, + "outputs": [], + "source": [ + "pr = o.get_project('/MY_NEW_SPACE/VERMEUL_PROJECT')" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -613,159 +527,59 @@ " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", - " <th>code</th>\n", - " <th>description</th>\n", - " <th>generatedCodePrefix</th>\n", + " <th>identifier</th>\n", + " <th>permId</th>\n", + " <th>project</th>\n", + " <th>type</th>\n", + " <th>registrator</th>\n", + " <th>registrationDate</th>\n", + " <th>modifier</th>\n", " <th>modificationDate</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", - " <td>ANTIBODY</td>\n", - " <td></td>\n", - " <td>ANT</td>\n", - " <td>2016-06-24 10:48:02</td>\n", + " <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4</td>\n", + " <td>20160924020719018-358</td>\n", + " <td>VERMEUL_PROJECT</td>\n", + " <td>None</td>\n", + " <td>vermeul</td>\n", + " <td>2016-09-24 02:07:19</td>\n", + " <td>vermeul</td>\n", + " <td>2017-01-09 00:05:43</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", - " <td>CHEMICAL</td>\n", - " <td></td>\n", - " <td>CHE</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>ENZYME</td>\n", - " <td></td>\n", - " <td>ENZ</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>MEDIA</td>\n", - " <td></td>\n", - " <td>MED</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>SOLUTION_BUFFER</td>\n", - " <td></td>\n", - " <td>SOL</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>5</th>\n", - " <td>OLIGO</td>\n", - " <td></td>\n", - " <td>OLI</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>6</th>\n", - " <td>RNA</td>\n", - " <td></td>\n", - " <td>RNA</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>7</th>\n", - " <td>PLASMID</td>\n", - " <td></td>\n", - " <td>PLA</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>8</th>\n", - " <td>BACTERIA</td>\n", - " <td></td>\n", - " <td>BAC</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>9</th>\n", - " <td>YEAST</td>\n", - " <td></td>\n", - " <td>YEA</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>10</th>\n", - " <td>CELL_LINE</td>\n", - " <td></td>\n", - " <td>CEL</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>11</th>\n", - " <td>FLY</td>\n", - " <td></td>\n", - " <td>FLY</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>12</th>\n", - " <td>EXPERIMENTAL_STEP</td>\n", - " <td></td>\n", - " <td>EXP</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>13</th>\n", - " <td>GENERAL_PROTOCOL</td>\n", - " <td></td>\n", - " <td>GEN</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>14</th>\n", - " <td>PCR_PROTOCOL</td>\n", - " <td></td>\n", - " <td>PCR</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>15</th>\n", - " <td>WESTERN_BLOTTING_PROTOCOL</td>\n", - " <td></td>\n", - " <td>WES</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>16</th>\n", - " <td>DRAWING_BOARD</td>\n", - " <td></td>\n", - " <td>DRA</td>\n", - " <td>2016-06-24 10:48:02</td>\n", - " </tr>\n", - " <tr>\n", - " <th>17</th>\n", - " <td>UNKNOWN</td>\n", - " <td>Unknown</td>\n", - " <td>S</td>\n", - " <td>2016-06-24 10:47:01</td>\n", + " <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_SPECIAL_EXPER...</td>\n", + " <td>20161121013609807-402</td>\n", + " <td>VERMEUL_PROJECT</td>\n", + " <td>None</td>\n", + " <td>vermeul</td>\n", + " <td>2016-11-21 01:36:10</td>\n", + " <td>vermeul</td>\n", + " <td>2017-01-20 23:41:42</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ - "<pybis.pybis.Things at 0x7f7548261ef0>" + "<pybis.pybis.Things at 0x7fe9324b8e10>" ] }, - "execution_count": 13, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "o.get_sample_types()" + "pr.get_experiments()" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 15, "metadata": { "collapsed": false }, @@ -778,42 +592,118 @@ " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", - " <th>code</th>\n", - " <th>description</th>\n", + " <th>identifier</th>\n", + " <th>permId</th>\n", + " <th>experiment</th>\n", + " <th>sample_type</th>\n", + " <th>registrator</th>\n", + " <th>registrationDate</th>\n", + " <th>modifier</th>\n", " <th>modificationDate</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", - " <td>MY_VERY_EXCITING_MATERIAL</td>\n", - " <td>looks like dirt and probably is dirt</td>\n", - " <td>2016-09-24 00:46:19</td>\n", + " <td>/MY_NEW_SPACE/CHILD_OF_SAMPLE1</td>\n", + " <td>20160705234504004-206</td>\n", + " <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4</td>\n", + " <td>UNKNOWN</td>\n", + " <td>vermeul</td>\n", + " <td>2016-07-05 23:45:04</td>\n", + " <td>vermeul</td>\n", + " <td>2016-10-07 01:05:46</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>20160630105304285-81</td>\n", + " <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4</td>\n", + " <td>UNKNOWN</td>\n", + " <td>vermeul</td>\n", + " <td>2016-06-30 16:53:04</td>\n", + " <td>vermeul</td>\n", + " <td>2016-11-21 00:53:59</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>/MY_NEW_SPACE/YEA21</td>\n", + " <td>20161025010638912-382</td>\n", + " <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_SPECIAL_EXPER...</td>\n", + " <td>YEAST</td>\n", + " <td>vermeul</td>\n", + " <td>2016-10-25 01:06:39</td>\n", + " <td>vermeul</td>\n", + " <td>2017-01-19 00:02:53</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>/MY_NEW_SPACE/YEA34</td>\n", + " <td>20161108230958839-384</td>\n", + " <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_SPECIAL_EXPER...</td>\n", + " <td>YEAST</td>\n", + " <td>vermeul</td>\n", + " <td>2016-11-08 23:09:59</td>\n", + " <td>vermeul</td>\n", + " <td>2017-01-20 23:41:42</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ - " code description \\\n", - "0 MY_VERY_EXCITING_MATERIAL looks like dirt and probably is dirt \n", + "<pybis.pybis.Things at 0x7fe9324b8668>" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pr.get_samples()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ "\n", - " modificationDate \n", - "0 2016-09-24 00:46:19 " + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>20160929145446460-367</td> </tr><tr> <td>permId</td> <td>20160929145446460-367</td> </tr><tr> <td>type</td> <td>JUPYTER_CONTAINER</td> </tr><tr> <td>experiment</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4</td> </tr><tr> <td>sample</td> <td>/MY_NEW_SPACE/HOW_WONDERFUL</td> </tr><tr> <td>parents</td> <td>[]</td> </tr><tr> <td>children</td> <td>[]</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>[]</td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.DataSet at 0x7fe9329712e8>" ] }, - "execution_count": 5, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "o.get_material_types()" + "pr.get_datasets()[13]" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": { "collapsed": false }, @@ -821,118 +711,194 @@ { "data": { "text/html": [ - "<div>\n", - "<table border=\"1\" class=\"dataframe\">\n", + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>VERMEUL</td> </tr><tr> <td>description</td> <td>Space for user vermeul</td> </tr><tr> <td>registrator</td> <td>admin</td> </tr><tr> <td>registrationDate</td> <td>2016-06-24 11:50:48</td> </tr><tr> <td>modificationDate</td> <td>2016-06-24 11:50:48</td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Space at 0x7fdf746a6080>" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "o.get_space('vermeul')" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>FLIES</td> </tr><tr> <td>description</td> <td></td> </tr><tr> <td>permId</td> <td>20160624054751885-35</td> </tr><tr> <td>identifier</td> <td>/MATERIALS/FLIES</td> </tr><tr> <td>space</td> <td>MATERIALS</td> </tr><tr><td>attachments</td><td></td></tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Project at 0x7f3140f7ac50>" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "o.get_project('/Materials/FLIES')" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>code</th>\n", - " <th>description</th>\n", - " <th>kind</th>\n", + " <th>space</th>\n", + " <th>registrator</th>\n", + " <th>registrationDate</th>\n", + " <th>modifier</th>\n", " <th>modificationDate</th>\n", + " <th>permid</th>\n", + " <th>identifier</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", - " <td>ELN_PREVIEW</td>\n", - " <td>ELN Preview image</td>\n", - " <td>PHYSICAL</td>\n", - " <td>2016-06-24 10:48:02</td>\n", + " <td>BACTERIA</td>\n", + " <td>MATERIALS</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td>20160624054751885-33</td>\n", + " <td>/MATERIALS/BACTERIA</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", - " <td>SEQ_FILE</td>\n", + " <td>CELL_LINES</td>\n", + " <td>MATERIALS</td>\n", " <td></td>\n", - " <td>PHYSICAL</td>\n", - " <td>2016-06-24 10:48:02</td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td>20160624054751885-34</td>\n", + " <td>/MATERIALS/CELL_LINES</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", - " <td>RAW_DATA</td>\n", + " <td>FLIES</td>\n", + " <td>MATERIALS</td>\n", " <td></td>\n", - " <td>PHYSICAL</td>\n", - " <td>2016-06-24 10:48:02</td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td>20160624054751885-35</td>\n", + " <td>/MATERIALS/FLIES</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", - " <td>ANALYZED_DATA</td>\n", + " <td>PLASMIDS</td>\n", + " <td>MATERIALS</td>\n", " <td></td>\n", - " <td>PHYSICAL</td>\n", - " <td>2016-06-24 10:48:02</td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td>20160624054751885-37</td>\n", + " <td>/MATERIALS/PLASMIDS</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", - " <td>ATTACHMENT</td>\n", + " <td>POLYNUCLEOTIDES</td>\n", + " <td>MATERIALS</td>\n", " <td></td>\n", - " <td>PHYSICAL</td>\n", - " <td>2016-06-24 10:48:02</td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td>20160624054751885-38</td>\n", + " <td>/MATERIALS/POLYNUCLEOTIDES</td>\n", " </tr>\n", " <tr>\n", " <th>5</th>\n", - " <td>DRAWING_BOARD</td>\n", + " <td>REAGENTS</td>\n", + " <td>MATERIALS</td>\n", " <td></td>\n", - " <td>PHYSICAL</td>\n", - " <td>2016-06-24 10:48:02</td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td>20160624054751885-32</td>\n", + " <td>/MATERIALS/REAGENTS</td>\n", " </tr>\n", " <tr>\n", " <th>6</th>\n", - " <td>JUPYTER_CONTAINER</td>\n", - " <td>Jupyter Analysis Results</td>\n", - " <td>CONTAINER</td>\n", - " <td>2016-06-29 15:29:06</td>\n", - " </tr>\n", - " <tr>\n", - " <th>7</th>\n", - " <td>JUPYTER_NOTEBOOK</td>\n", - " <td>Analysis Notebook Files</td>\n", - " <td>PHYSICAL</td>\n", - " <td>2016-06-29 15:29:07</td>\n", - " </tr>\n", - " <tr>\n", - " <th>8</th>\n", - " <td>UNKNOWN</td>\n", - " <td>Unknown</td>\n", - " <td>PHYSICAL</td>\n", - " <td>2016-06-24 10:47:01</td>\n", - " </tr>\n", - " <tr>\n", - " <th>9</th>\n", - " <td>JUPYTER_RESULT</td>\n", - " <td>Analysis Results Files</td>\n", - " <td>PHYSICAL</td>\n", - " <td>2016-06-29 15:29:06</td>\n", + " <td>YEASTS</td>\n", + " <td>MATERIALS</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td></td>\n", + " <td>2016-10-04 22:04:57</td>\n", + " <td>20160624054751885-36</td>\n", + " <td>/MATERIALS/YEASTS</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ - " code description kind modificationDate\n", - "0 ELN_PREVIEW ELN Preview image PHYSICAL 2016-06-24 10:48:02\n", - "1 SEQ_FILE PHYSICAL 2016-06-24 10:48:02\n", - "2 RAW_DATA PHYSICAL 2016-06-24 10:48:02\n", - "3 ANALYZED_DATA PHYSICAL 2016-06-24 10:48:02\n", - "4 ATTACHMENT PHYSICAL 2016-06-24 10:48:02\n", - "5 DRAWING_BOARD PHYSICAL 2016-06-24 10:48:02\n", - "6 JUPYTER_CONTAINER Jupyter Analysis Results CONTAINER 2016-06-29 15:29:06\n", - "7 JUPYTER_NOTEBOOK Analysis Notebook Files PHYSICAL 2016-06-29 15:29:07\n", - "8 UNKNOWN Unknown PHYSICAL 2016-06-24 10:47:01\n", - "9 JUPYTER_RESULT Analysis Results Files PHYSICAL 2016-06-29 15:29:06" + "<pybis.pybis.Things at 0x7f3140faf710>" ] }, - "execution_count": 4, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "o.get_dataset_types()" + "ps = o.get_projects(space='materials')\n", + "ps" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": { "collapsed": false }, @@ -941,41 +907,42 @@ "data": { "text/html": [ "\n", - "<p>DataSetType: <b>ELN_PREVIEW</b>\n", - "<p>description: ELN Preview image</p>\n", - " \n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>property</th>\n", - " <th>label</th>\n", - " <th>description</th>\n", - " <th>dataType</th>\n", - " <th>mandatory</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr> <th>name</th> <td>Name</td> <td>Name</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>notes</th> <td>Notes</td> <td>Notes regarding the dataset</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>xmlcomments</th> <td>Comments List</td> <td>Several comments can be added by different users</td> <td>XML</td> <td>False</td> </tr>\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>YEASTS</td> </tr><tr> <td>description</td> <td></td> </tr><tr> <td>permId</td> <td>20160624054751885-36</td> </tr><tr> <td>identifier</td> <td>/MATERIALS/YEASTS</td> </tr><tr> <td>space</td> <td>MATERIALS</td> </tr><tr><td>attachments</td><td></td></tr>\n", " </tbody>\n", " </table>\n", " " ], "text/plain": [ - "<pybis.pybis.PropertyAssignments at 0x7eff71169b38>" + "<pybis.pybis.Project at 0x7f81504f8630>" ] }, - "execution_count": 8, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "o.get_dataset_types()[0]" + "ps[6]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**get vocabulary terms**" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 24, "metadata": { "collapsed": false }, @@ -984,94 +951,127 @@ "data": { "text/html": [ "\n", - "<p>DataSetType: <b>ELN_PREVIEW</b>\n", - "<p>description: ELN Preview image</p>\n", - " \n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>property</th>\n", - " <th>label</th>\n", - " <th>description</th>\n", - " <th>dataType</th>\n", - " <th>mandatory</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr> <th>name</th> <td>Name</td> <td>Name</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>notes</th> <td>Notes</td> <td>Notes regarding the dataset</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>xmlcomments</th> <td>Comments List</td> <td>Several comments can be added by different users</td> <td>XML</td> <td>False</td> </tr>\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>vocabulary term</th>\n", + " <th>label</th>\n", + " <th>description</th>\n", + " <th>vocabulary</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>PBLUESCRIPT_II_KS_PLUS</td> <td>pBluescript II KS +</td> <td>Commercial vector for cloning in bacteria (Stratagene)</td> <td>BACKBONE</td> </tr><tr> <td>PSPPOLY_A</td> <td>pSPpoly(A)</td> <td>Standard cloning vector. It can be used for in vitro trascription from SP6 promoter. It contains a poly(A) to generate poly(A)+ transcripts in vitro (Promega)</td> <td>BACKBONE</td> </tr><tr> <td>PRS30Y</td> <td>pRS30y</td> <td>Integrative yeast shuttle vector from Sikorski et al, 1989</td> <td>BACKBONE</td> </tr><tr> <td>PRS31Y</td> <td>pRS31y</td> <td>Centromeric yeast shuttle vector from Sikorski et al, 1989</td> <td>BACKBONE</td> </tr><tr> <td>PRS40Y</td> <td>pRS40y</td> <td>Integrative yeast shuttle vector from Sikorski et al, 1992</td> <td>BACKBONE</td> </tr><tr> <td>PRS41Y</td> <td>pRS41y</td> <td>Centromeric yeast shuttle vector from Sikorski et al, 1992</td> <td>BACKBONE</td> </tr><tr> <td>PRS42Y</td> <td>pRS42y</td> <td>2-micron-based yeast shuttle vector from Sikorski et al, 1992</td> <td>BACKBONE</td> </tr><tr> <td>UNKNOWN</td> <td>unknown</td> <td>unknown vector</td> <td>BACKBONE</td> </tr><tr> <td>PGEX4T1</td> <td>pGEX4T1</td> <td>Vector for bacterial expression</td> <td>BACKBONE</td> </tr>\n", " </tbody>\n", " </table>\n", " " ], "text/plain": [ - "<pybis.pybis.PropertyAssignments at 0x7f908e8c9ba8>" + "<pybis.masterdata.Vocabulary at 0x7f3140fafeb8>" ] }, - "execution_count": 6, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "o.get_dataset_type('ELN_PREVIEW')" + "x = o.get_terms('Backbone')\n", + "x" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## get information about general types" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 11, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "<p>SampleType: <b>YEAST</b>\n", - "<p>description: </p>\n", - " <p>Code autogenerated: True</p>\n", + "outputs": [], + "source": [ + "from pybis import Openbis\n", + "o = Openbis(url='https://localhost:8443', verify_certificates=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", - " <th>property</th>\n", - " <th>label</th>\n", + " <th></th>\n", + " <th>code</th>\n", " <th>description</th>\n", - " <th>dataType</th>\n", - " <th>mandatory</th>\n", + " <th>modificationDate</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", - " <tr> <th>name</th> <td>Name</td> <td>Name</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>show_in_project_overview</th> <td>Show in project overview</td> <td>Show in project overview</td> <td>BOOLEAN</td> <td>False</td> </tr><tr> <th>owner</th> <td>Owner</td> <td>Who produced/owned the sample</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>owner_number</th> <td>Owner number</td> <td>Owner number</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>genetic_modification</th> <td>Genetic modifications</td> <td>Genetic modifications composed by the Plasmid ancestors</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>genetic_background</th> <td>Genetic Background</td> <td>Genetic background of the yeast strain</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>mating_type</th> <td>Mating Type</td> <td>Mating type or ploidy of the yeast strain</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>background-specific_markers</th> <td>Background-specific markers</td> <td>Background-specific markers available in the strain for further genetic modifications</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>common_markers</th> <td>Common markers</td> <td>Common markers available in the strain for further genetic modifications</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>endogenous_plasmid</th> <td>Endogenous 2micron plasmid in yeast</td> <td>Presence of an endogenous cir 2micron plasmid</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>origin</th> <td>Origin</td> <td>How the strain/cell line was produced</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>strain_check</th> <td>Strain Check</td> <td>Check done to verify the modifications introduced in the strain</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>source</th> <td>Source</td> <td>Source from where the construct/strain/cell line obtained or purchased, if it was not produced in the lab</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>publication</th> <td>Publication</td> <td>Publication from where the information was first found OR technical sheet given by the manufacturer</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>notes</th> <td>Notes</td> <td>Notes regarding the dataset</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>xmlcomments</th> <td>Comments List</td> <td>Several comments can be added by different users</td> <td>XML</td> <td>False</td> </tr><tr> <th>annotations_state</th> <td>Annotations State</td> <td>Annotations State</td> <td>XML</td> <td>False</td> </tr><tr> <th>storage_names</th> <td>Storage Name</td> <td>Storage Name</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>storage_row</th> <td>Storage Row</td> <td>Storage Row</td> <td>INTEGER</td> <td>False</td> </tr><tr> <th>storage_column</th> <td>Storage Column</td> <td>Storage Column</td> <td>INTEGER</td> <td>False</td> </tr><tr> <th>storage_box_name</th> <td>Storage Box Name</td> <td>Storage Box Name</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>storage_box_size</th> <td>Storage Box Size</td> <td>Storage Box Size</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>storage_user</th> <td>Storage User Id</td> <td>Storage User Id</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>storage_position</th> <td>Storage Position</td> <td>Storage Position</td> <td>VARCHAR</td> <td>False</td> </tr>\n", - " </tbody>\n", - " </table>\n", - " " + " <tr>\n", + " <th>0</th>\n", + " <td>DEFAULT_EXPERIMENT</td>\n", + " <td>Default Experiment</td>\n", + " <td>2016-06-24 10:48:02</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>MATERIALS</td>\n", + " <td>Folder used to organize samples in the Invento...</td>\n", + " <td>2016-06-24 10:48:02</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>METHODS</td>\n", + " <td>Folder used to organize samples in the Invento...</td>\n", + " <td>2016-06-24 10:48:02</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>BOARDS</td>\n", + " <td>Folder used to organize boards</td>\n", + " <td>2016-06-24 10:48:02</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>UNKNOWN</td>\n", + " <td>Unknown</td>\n", + " <td>2016-06-24 10:47:01</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" ], "text/plain": [ - "<pybis.pybis.PropertyAssignments at 0x7fdc8120d828>" + "<pybis.pybis.Things at 0x7f7ff3996a20>" ] }, - "execution_count": 3, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "o.get_sample_type('YEAST')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "almost all entities in openBIS can be tagged:" + "o.get_experiment_types()" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 13, "metadata": { - "collapsed": false, - "scrolled": false + "collapsed": false }, "outputs": [ { @@ -1083,201 +1083,158 @@ " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>code</th>\n", - " <th>registrationDate</th>\n", + " <th>description</th>\n", + " <th>generatedCodePrefix</th>\n", + " <th>modificationDate</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", - " <td>A_tag</td>\n", - " <td>2016-07-05 23:45:04</td>\n", + " <td>ANTIBODY</td>\n", + " <td></td>\n", + " <td>ANT</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", - " <td>CREATE_JSON_TAG</td>\n", - " <td>2016-06-30 00:36:50</td>\n", + " <td>CHEMICAL</td>\n", + " <td></td>\n", + " <td>CHE</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", - " <td>CREATE_JSON_TAG_2</td>\n", - " <td>2016-07-06 00:07:07</td>\n", + " <td>ENZYME</td>\n", + " <td></td>\n", + " <td>ENZ</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", - " <td>CREATE_JSON_TAG_3</td>\n", - " <td>2016-07-06 00:07:07</td>\n", + " <td>MEDIA</td>\n", + " <td></td>\n", + " <td>MED</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", - " <td>CREATE_JSON_TAG_blalbal</td>\n", - " <td>2016-11-08 10:24:18</td>\n", + " <td>SOLUTION_BUFFER</td>\n", + " <td></td>\n", + " <td>SOL</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>5</th>\n", - " <td>another_nice_tag</td>\n", - " <td>2016-10-06 14:43:21</td>\n", + " <td>OLIGO</td>\n", + " <td></td>\n", + " <td>OLI</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>6</th>\n", - " <td>another_tag</td>\n", - " <td>2016-10-04 11:29:02</td>\n", + " <td>RNA</td>\n", + " <td></td>\n", + " <td>RNA</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>7</th>\n", - " <td>blblblblblb</td>\n", - " <td>2016-10-06 14:47:45</td>\n", + " <td>PLASMID</td>\n", + " <td></td>\n", + " <td>PLA</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>8</th>\n", - " <td>clue</td>\n", - " <td>2016-09-26 23:48:08</td>\n", + " <td>BACTERIA</td>\n", + " <td></td>\n", + " <td>BAC</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>9</th>\n", - " <td>do</td>\n", - " <td>2016-09-12 23:57:14</td>\n", + " <td>YEAST</td>\n", + " <td></td>\n", + " <td>YEA</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>10</th>\n", - " <td>due</td>\n", - " <td>2016-06-30 17:18:11</td>\n", + " <td>CELL_LINE</td>\n", + " <td></td>\n", + " <td>CEL</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>11</th>\n", - " <td>fa</td>\n", - " <td>2016-09-12 23:57:29</td>\n", + " <td>FLY</td>\n", + " <td></td>\n", + " <td>FLY</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>12</th>\n", - " <td>gimme_a_tag</td>\n", - " <td>2016-11-18 15:20:10</td>\n", + " <td>EXPERIMENTAL_STEP</td>\n", + " <td></td>\n", + " <td>EXP</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>13</th>\n", - " <td>gimme_one_more</td>\n", - " <td>2016-10-27 02:03:25</td>\n", + " <td>GENERAL_PROTOCOL</td>\n", + " <td></td>\n", + " <td>GEN</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>14</th>\n", - " <td>la</td>\n", - " <td>2016-09-12 23:57:29</td>\n", + " <td>PCR_PROTOCOL</td>\n", + " <td></td>\n", + " <td>PCR</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>15</th>\n", - " <td>mi</td>\n", - " <td>2016-09-12 23:57:29</td>\n", + " <td>WESTERN_BLOTTING_PROTOCOL</td>\n", + " <td></td>\n", + " <td>WES</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>16</th>\n", - " <td>new_tag</td>\n", - " <td>2016-10-06 10:49:15</td>\n", + " <td>DRAWING_BOARD</td>\n", + " <td></td>\n", + " <td>DRA</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>17</th>\n", - " <td>no</td>\n", - " <td>2016-09-26 23:48:08</td>\n", - " </tr>\n", - " <tr>\n", - " <th>18</th>\n", - " <td>one</td>\n", - " <td>2016-11-09 14:27:58</td>\n", - " </tr>\n", - " <tr>\n", - " <th>19</th>\n", - " <td>re</td>\n", - " <td>2016-09-12 23:57:29</td>\n", - " </tr>\n", - " <tr>\n", - " <th>20</th>\n", - " <td>so</td>\n", - " <td>2016-09-12 23:57:29</td>\n", - " </tr>\n", - " <tr>\n", - " <th>21</th>\n", - " <td>three</td>\n", - " <td>2016-11-09 14:27:58</td>\n", - " </tr>\n", - " <tr>\n", - " <th>22</th>\n", - " <td>ti</td>\n", - " <td>2016-09-12 23:57:29</td>\n", - " </tr>\n", - " <tr>\n", - " <th>23</th>\n", - " <td>too_late</td>\n", - " <td>2016-10-06 10:56:07</td>\n", - " </tr>\n", - " <tr>\n", - " <th>24</th>\n", - " <td>tre</td>\n", - " <td>2016-06-30 17:18:11</td>\n", - " </tr>\n", - " <tr>\n", - " <th>25</th>\n", - " <td>two</td>\n", - " <td>2016-11-09 14:27:58</td>\n", - " </tr>\n", - " <tr>\n", - " <th>26</th>\n", - " <td>uno</td>\n", - " <td>2016-06-30 17:18:11</td>\n", + " <td>UNKNOWN</td>\n", + " <td>Unknown</td>\n", + " <td>S</td>\n", + " <td>2016-06-24 10:47:01</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ - " code registrationDate\n", - "0 A_tag 2016-07-05 23:45:04\n", - "1 CREATE_JSON_TAG 2016-06-30 00:36:50\n", - "2 CREATE_JSON_TAG_2 2016-07-06 00:07:07\n", - "3 CREATE_JSON_TAG_3 2016-07-06 00:07:07\n", - "4 CREATE_JSON_TAG_blalbal 2016-11-08 10:24:18\n", - "5 another_nice_tag 2016-10-06 14:43:21\n", - "6 another_tag 2016-10-04 11:29:02\n", - "7 blblblblblb 2016-10-06 14:47:45\n", - "8 clue 2016-09-26 23:48:08\n", - "9 do 2016-09-12 23:57:14\n", - "10 due 2016-06-30 17:18:11\n", - "11 fa 2016-09-12 23:57:29\n", - "12 gimme_a_tag 2016-11-18 15:20:10\n", - "13 gimme_one_more 2016-10-27 02:03:25\n", - "14 la 2016-09-12 23:57:29\n", - "15 mi 2016-09-12 23:57:29\n", - "16 new_tag 2016-10-06 10:49:15\n", - "17 no 2016-09-26 23:48:08\n", - "18 one 2016-11-09 14:27:58\n", - "19 re 2016-09-12 23:57:29\n", - "20 so 2016-09-12 23:57:29\n", - "21 three 2016-11-09 14:27:58\n", - "22 ti 2016-09-12 23:57:29\n", - "23 too_late 2016-10-06 10:56:07\n", - "24 tre 2016-06-30 17:18:11\n", - "25 two 2016-11-09 14:27:58\n", - "26 uno 2016-06-30 17:18:11" + "<pybis.pybis.Things at 0x7f7ff399dbe0>" ] }, - "execution_count": 9, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "o.get_tags()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**get the terms of a (controlled) vocabulary.**\n", - "\n", - "Some assigned properties have a controlled vocabulary, which means you can not enter anything you want." + "o.get_sample_types()" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 14, "metadata": { "collapsed": false }, @@ -1285,47 +1242,43 @@ { "data": { "text/html": [ - "\n", - " <table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>vocabulary term</th>\n", - " <th>label</th>\n", - " <th>description</th>\n", - " <th>vocabulary</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr> <td>A</td> <td>a</td> <td>None</td> <td>MATING_TYPE</td> </tr><tr> <td>ALPHA</td> <td>alpha</td> <td>None</td> <td>MATING_TYPE</td> </tr><tr> <td>DIPLOID</td> <td>diploid</td> <td>None</td> <td>MATING_TYPE</td> </tr><tr> <td>UNKNOWN</td> <td>unknown</td> <td>None</td> <td>MATING_TYPE</td> </tr>\n", - " </tbody>\n", - " </table>\n", - " " + "<div>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>code</th>\n", + " <th>description</th>\n", + " <th>modificationDate</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>MY_VERY_EXCITING_MATERIAL</td>\n", + " <td>looks like dirt and probably is dirt</td>\n", + " <td>2016-09-24 00:46:19</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" ], "text/plain": [ - "<pybis.pybis.Vocabulary at 0x7f75480e2f98>" + "<pybis.pybis.Things at 0x7f7ff399d518>" ] }, - "execution_count": 19, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "o.get_terms('MATING_TYPE')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**list all the deleted items in openBIS.**\n", - "\n", - "*TODO*: fetch the deletion date" + "o.get_material_types()" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 15, "metadata": { "collapsed": false }, @@ -1338,170 +1291,146 @@ " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", - " <th>permId</th>\n", - " <th>reason</th>\n", - " <th>type</th>\n", + " <th>code</th>\n", + " <th>description</th>\n", + " <th>kind</th>\n", + " <th>modificationDate</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", - " <td>20160629183649792-77</td>\n", - " <td>no jolly good reason</td>\n", - " <td>as.dto.sample.id.SamplePermId</td>\n", + " <td>ELN_PREVIEW</td>\n", + " <td>ELN Preview image</td>\n", + " <td>PHYSICAL</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", - " <td>20160629185740101-79</td>\n", - " <td>no jolly good reason</td>\n", - " <td>as.dto.sample.id.SamplePermId</td>\n", + " <td>SEQ_FILE</td>\n", + " <td></td>\n", + " <td>PHYSICAL</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", - " <td>20160705234127476-205</td>\n", - " <td>jjj</td>\n", - " <td>as.dto.sample.id.SamplePermId</td>\n", + " <td>RAW_DATA</td>\n", + " <td></td>\n", + " <td>PHYSICAL</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", - " <td>20160630111810821-87</td>\n", - " <td>no specific reason</td>\n", - " <td>as.dto.sample.id.SamplePermId</td>\n", + " <td>ANALYZED_DATA</td>\n", + " <td></td>\n", + " <td>PHYSICAL</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", - " <td>20160926234807546-364</td>\n", - " <td>no longer needed</td>\n", - " <td>as.dto.experiment.id.ExperimentPermId</td>\n", + " <td>ATTACHMENT</td>\n", + " <td></td>\n", + " <td>PHYSICAL</td>\n", + " <td>2016-06-24 10:48:02</td>\n", " </tr>\n", " <tr>\n", " <th>5</th>\n", - " <td>20161004215320704-370</td>\n", - " <td>it was just an experiment</td>\n", - " <td>as.dto.experiment.id.ExperimentPermId</td>\n", + " <td>DRAWING_BOARD</td>\n", + " <td></td>\n", + " <td>PHYSICAL</td>\n", + " <td>2016-06-24 10:48:02</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6</th>\n", + " <td>JUPYTER_CONTAINER</td>\n", + " <td>Jupyter Analysis Results</td>\n", + " <td>CONTAINER</td>\n", + " <td>2016-06-29 15:29:06</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7</th>\n", + " <td>JUPYTER_NOTEBOOK</td>\n", + " <td>Analysis Notebook Files</td>\n", + " <td>PHYSICAL</td>\n", + " <td>2016-06-29 15:29:07</td>\n", + " </tr>\n", + " <tr>\n", + " <th>8</th>\n", + " <td>UNKNOWN</td>\n", + " <td>Unknown</td>\n", + " <td>PHYSICAL</td>\n", + " <td>2016-06-24 10:47:01</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9</th>\n", + " <td>JUPYTER_RESULT</td>\n", + " <td>Analysis Results Files</td>\n", + " <td>PHYSICAL</td>\n", + " <td>2016-06-29 15:29:06</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ - " permId reason \\\n", - "0 20160629183649792-77 no jolly good reason \n", - "1 20160629185740101-79 no jolly good reason \n", - "2 20160705234127476-205 jjj \n", - "3 20160630111810821-87 no specific reason \n", - "4 20160926234807546-364 no longer needed \n", - "5 20161004215320704-370 it was just an experiment \n", - "\n", - " type \n", - "0 as.dto.sample.id.SamplePermId \n", - "1 as.dto.sample.id.SamplePermId \n", - "2 as.dto.sample.id.SamplePermId \n", - "3 as.dto.sample.id.SamplePermId \n", - "4 as.dto.experiment.id.ExperimentPermId \n", - "5 as.dto.experiment.id.ExperimentPermId " + "<pybis.pybis.Things at 0x7f7ff399d588>" ] }, - "execution_count": 20, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "o.get_deletions()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## working with experiments" + "o.get_dataset_types()" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 16, "metadata": { "collapsed": false }, - "outputs": [], - "source": [ - "from pybis import Openbis\n", - "o = Openbis(url='https://localhost:8443', verify_certificates=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**fetching experiments of a specific type containing tags**" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false, - "scrolled": true - }, "outputs": [ { "data": { "text/html": [ - "<div>\n", + "\n", + "<p>DataSetType: <b>ELN_PREVIEW</b>\n", + "<p>description: ELN Preview image</p>\n", + " \n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>code</th>\n", - " <th>identifier</th>\n", - " <th>project</th>\n", - " <th>type</th>\n", - " <th>registrator</th>\n", - " <th>registrationDate</th>\n", - " <th>modifier</th>\n", - " <th>modificationDate</th>\n", + " <th>property</th>\n", + " <th>label</th>\n", + " <th>description</th>\n", + " <th>dataType</th>\n", + " <th>mandatory</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>MY_FIRST_EXPERIMENT_WITH_PROPERTY</td>\n", - " <td>/MATERIALS/YEASTS/MY_FIRST_EXPERIMENT_WITH_PRO...</td>\n", - " <td>YEASTS</td>\n", - " <td>DEFAULT_EXPERIMENT</td>\n", - " <td></td>\n", - " <td>2016-09-24 01:51:55</td>\n", - " <td></td>\n", - " <td>2017-01-06 00:36:54</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" + " <tr> <th>name</th> <td>Name</td> <td>Name</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>notes</th> <td>Notes</td> <td>Notes regarding the dataset</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>xmlcomments</th> <td>Comments List</td> <td>Several comments can be added by different users</td> <td>XML</td> <td>False</td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " ], "text/plain": [ - "<pybis.pybis.Things at 0x7ff35ecfbe80>" + "<pybis.property.PropertyAssignments at 0x7f7ff39e41d0>" ] }, - "execution_count": 2, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "exps = o.get_experiments(\n", - " project='YEASTS', \n", - " space='MATERIALS', \n", - " type='DEFAULT_EXPERIMENT',\n", - " tags='*', \n", - " is_finished=True\n", - ")\n", - "exps" + "o.get_dataset_types()[0]" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -1510,153 +1439,41 @@ "data": { "text/html": [ "\n", - " <table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>attribute</th>\n", - " <th>value</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr> <td>code</td> <td>MY_FIRST_EXPERIMENT_WITH_PROPERTY</td> </tr><tr> <td>permId</td> <td>20160924015154859-355</td> </tr><tr> <td>identifier</td> <td>/MATERIALS/YEASTS/MY_FIRST_EXPERIMENT_WITH_PROPERTY</td> </tr><tr> <td>type</td> <td>DEFAULT_EXPERIMENT</td> </tr><tr> <td>space</td> <td></td> </tr><tr> <td>project</td> <td>/MATERIALS/YEASTS</td> </tr><tr> <td>tags</td> <td>['too_late']</td> </tr><tr><td>attachments</td><td></td></tr>\n", - " </tbody>\n", - " </table>\n", - " " - ], - "text/plain": [ - "<pybis.pybis.Experiment at 0x7ff35ed18f60>" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "e0 = exps[0]\n", - "e0" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", + "<p>DataSetType: <b>ELN_PREVIEW</b>\n", + "<p>description: ELN Preview image</p>\n", + " \n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>code</th>\n", - " <th>properties</th>\n", - " <th>type</th>\n", - " <th>sample</th>\n", - " <th>registrationDate</th>\n", - " <th>modificationDate</th>\n", + " <th>property</th>\n", + " <th>label</th>\n", + " <th>description</th>\n", + " <th>dataType</th>\n", + " <th>mandatory</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>20170106004736870-407</td>\n", - " <td>{'NAME': 'dunno'}</td>\n", - " <td>ANALYZED_DATA</td>\n", - " <td>None</td>\n", - " <td>2017-01-06 00:47:37</td>\n", - " <td>2017-01-06 00:47:37</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - "<pybis.pybis.Things at 0x7ff35e93a828>" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "e0.get_datasets()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " <table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>property</th>\n", - " <th>value</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr> <td>name</td> <td>blast</td> </tr><tr> <td>show_in_project_overview</td> <td>True</td> </tr><tr> <td>finished_flag</td> <td>True</td> </tr><tr> <td>experimental_goals</td> <td></td> </tr><tr> <td>grant</td> <td></td> </tr><tr> <td>start_date</td> <td></td> </tr><tr> <td>end_date</td> <td></td> </tr><tr> <td>experimental_results</td> <td></td> </tr><tr> <td>xmlcomments</td> <td></td> </tr>\n", + " <tr> <th>name</th> <td>Name</td> <td>Name</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>notes</th> <td>Notes</td> <td>Notes regarding the dataset</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>xmlcomments</th> <td>Comments List</td> <td>Several comments can be added by different users</td> <td>XML</td> <td>False</td> </tr>\n", " </tbody>\n", " </table>\n", " " ], "text/plain": [ - "<pybis.pybis.PropertyHolder at 0x7ff35ed18cc0>" + "<pybis.property.PropertyAssignments at 0x7f7ff39e4898>" ] }, - "execution_count": 6, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "e0.p" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "e0.p.show_in_project_overview = False" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Experiment successfully updated\n" - ] - } - ], - "source": [ - "e0.save()" + "o.get_dataset_type('ELN_PREVIEW')" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -1665,75 +1482,51 @@ "data": { "text/html": [ "\n", - " <table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>attribute</th>\n", - " <th>value</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr> <td>code</td> <td>MY_EXPERIMENT007</td> </tr><tr> <td>permId</td> <td>20161004220718730-373</td> </tr><tr> <td>identifier</td> <td>/MATERIALS/YEASTS/MY_EXPERIMENT007</td> </tr><tr> <td>type</td> <td>DEFAULT_EXPERIMENT</td> </tr><tr> <td>space</td> <td></td> </tr><tr> <td>project</td> <td>/MATERIALS/YEASTS</td> </tr><tr> <td>tags</td> <td>[]</td> </tr><tr><td>attachments</td><td>Bildschirmfoto 2016-12-20 um 10.47.26.png<br/>Ein Saurier.txt</td></tr>\n", + "<p>SampleType: <b>YEAST</b>\n", + "<p>description: </p>\n", + " <p>Code autogenerated: True</p>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>property</th>\n", + " <th>label</th>\n", + " <th>description</th>\n", + " <th>dataType</th>\n", + " <th>mandatory</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <th>name</th> <td>Name</td> <td>Name</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>show_in_project_overview</th> <td>Show in project overview</td> <td>Show in project overview</td> <td>BOOLEAN</td> <td>False</td> </tr><tr> <th>owner</th> <td>Owner</td> <td>Who produced/owned the sample</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>owner_number</th> <td>Owner number</td> <td>Owner number</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>genetic_modification</th> <td>Genetic modifications</td> <td>Genetic modifications composed by the Plasmid ancestors</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>genetic_background</th> <td>Genetic Background</td> <td>Genetic background of the yeast strain</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>mating_type</th> <td>Mating Type</td> <td>Mating type or ploidy of the yeast strain</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>background-specific_markers</th> <td>Background-specific markers</td> <td>Background-specific markers available in the strain for further genetic modifications</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>common_markers</th> <td>Common markers</td> <td>Common markers available in the strain for further genetic modifications</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>endogenous_plasmid</th> <td>Endogenous 2micron plasmid in yeast</td> <td>Presence of an endogenous cir 2micron plasmid</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>origin</th> <td>Origin</td> <td>How the strain/cell line was produced</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>strain_check</th> <td>Strain Check</td> <td>Check done to verify the modifications introduced in the strain</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>source</th> <td>Source</td> <td>Source from where the construct/strain/cell line obtained or purchased, if it was not produced in the lab</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>publication</th> <td>Publication</td> <td>Publication from where the information was first found OR technical sheet given by the manufacturer</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>notes</th> <td>Notes</td> <td>Notes regarding the dataset</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>xmlcomments</th> <td>Comments List</td> <td>Several comments can be added by different users</td> <td>XML</td> <td>False</td> </tr><tr> <th>annotations_state</th> <td>Annotations State</td> <td>Annotations State</td> <td>XML</td> <td>False</td> </tr><tr> <th>storage_names</th> <td>Storage Name</td> <td>Storage Name</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>storage_row</th> <td>Storage Row</td> <td>Storage Row</td> <td>INTEGER</td> <td>False</td> </tr><tr> <th>storage_column</th> <td>Storage Column</td> <td>Storage Column</td> <td>INTEGER</td> <td>False</td> </tr><tr> <th>storage_box_name</th> <td>Storage Box Name</td> <td>Storage Box Name</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>storage_box_size</th> <td>Storage Box Size</td> <td>Storage Box Size</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>storage_user</th> <td>Storage User Id</td> <td>Storage User Id</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>storage_position</th> <td>Storage Position</td> <td>Storage Position</td> <td>VARCHAR</td> <td>False</td> </tr>\n", " </tbody>\n", " </table>\n", " " ], "text/plain": [ - "<pybis.pybis.Experiment at 0x7fd2241efcf8>" + "<pybis.property.PropertyAssignments at 0x7f72f022c9b0>" ] }, - "execution_count": 9, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "e = o.get_experiment('/MATERIALS/YEASTS/MY_EXPERIMENT007')\n", - "e" + "o.get_sample_type('YEAST')" ] }, { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " <table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>attribute</th>\n", - " <th>value</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr> <td>code</td> <td>MY_EXPERIMENT007</td> </tr><tr> <td>permId</td> <td>20161004220718730-373</td> </tr><tr> <td>identifier</td> <td>/MATERIALS/YEASTS/MY_EXPERIMENT007</td> </tr><tr> <td>type</td> <td>DEFAULT_EXPERIMENT</td> </tr><tr> <td>space</td> <td></td> </tr><tr> <td>project</td> <td>/MATERIALS/YEASTS</td> </tr><tr> <td>tags</td> <td>[]</td> </tr><tr><td>attachments</td><td>Bildschirmfoto 2016-12-20 um 10.47.26.png<br/>Ein Saurier.txt</td></tr>\n", - " </tbody>\n", - " </table>\n", - " " - ], - "text/plain": [ - "<pybis.pybis.Experiment at 0x7fd2241efc18>" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "cell_type": "markdown", + "metadata": {}, "source": [ - "o.get_experiment('20161004220718730-373')" + "almost all entities in openBIS can be tagged:" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 2, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": false }, "outputs": [ { @@ -1744,195 +1537,204 @@ " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", - " <th>identifier</th>\n", - " <th>permId</th>\n", - " <th>experiment</th>\n", - " <th>sample_type</th>\n", - " <th>registrator</th>\n", + " <th>code</th>\n", " <th>registrationDate</th>\n", - " <th>modifier</th>\n", - " <th>modificationDate</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", - " <td>/MATERIALS/FLY43</td>\n", - " <td>20170104000802333-404</td>\n", - " <td>/MATERIALS/YEASTS/MY_EXPERIMENT007</td>\n", - " <td>FLY</td>\n", - " <td></td>\n", - " <td>2017-01-04 00:08:02</td>\n", - " <td></td>\n", - " <td>2017-01-04 00:08:47</td>\n", + " <td>A_tag</td>\n", + " <td>2016-07-05 23:45:04</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", - " <td>/MATERIALS/FLY45</td>\n", - " <td>20170104000847172-405</td>\n", - " <td>/MATERIALS/YEASTS/MY_EXPERIMENT007</td>\n", - " <td>FLY</td>\n", - " <td></td>\n", - " <td>2017-01-04 00:08:47</td>\n", - " <td></td>\n", - " <td>2017-01-04 00:36:09</td>\n", + " <td>CREATE_JSON_TAG</td>\n", + " <td>2016-06-30 00:36:50</td>\n", " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - "<pybis.pybis.Things at 0x7fd223f3f208>" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "e.get_samples()" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>identifier</th>\n", - " <th>permId</th>\n", - " <th>experiment</th>\n", - " <th>sample_type</th>\n", - " <th>registrator</th>\n", - " <th>registrationDate</th>\n", - " <th>modifier</th>\n", - " <th>modificationDate</th>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>CREATE_JSON_TAG_2</td>\n", + " <td>2016-07-06 00:07:07</td>\n", " </tr>\n", - " </thead>\n", - " <tbody>\n", " <tr>\n", - " <th>0</th>\n", - " <td>/MATERIALS/FLY43</td>\n", - " <td>20170104000802333-404</td>\n", - " <td>/MATERIALS/YEASTS/MY_EXPERIMENT007</td>\n", - " <td>FLY</td>\n", - " <td></td>\n", - " <td>2017-01-04 00:08:02</td>\n", - " <td></td>\n", - " <td>2017-01-04 00:08:47</td>\n", + " <th>3</th>\n", + " <td>CREATE_JSON_TAG_3</td>\n", + " <td>2016-07-06 00:07:07</td>\n", " </tr>\n", " <tr>\n", - " <th>1</th>\n", - " <td>/MATERIALS/FLY45</td>\n", - " <td>20170104000847172-405</td>\n", - " <td>/MATERIALS/YEASTS/MY_EXPERIMENT007</td>\n", - " <td>FLY</td>\n", - " <td></td>\n", - " <td>2017-01-04 00:08:47</td>\n", - " <td></td>\n", - " <td>2017-01-04 00:36:09</td>\n", + " <th>4</th>\n", + " <td>CREATE_JSON_TAG_blalbal</td>\n", + " <td>2016-11-08 10:24:18</td>\n", " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - "<pybis.pybis.Things at 0x7fd223f3f8d0>" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "o.get_samples(experiment='20161004220718730-373')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "get all experiment with a given property" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>code</th>\n", - " <th>identifier</th>\n", - " <th>project</th>\n", - " <th>type</th>\n", - " <th>registrator</th>\n", - " <th>registrationDate</th>\n", - " <th>modifier</th>\n", - " <th>modificationDate</th>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>another_nice_tag</td>\n", + " <td>2016-10-06 14:43:21</td>\n", " </tr>\n", - " </thead>\n", - " <tbody>\n", " <tr>\n", - " <th>0</th>\n", - " <td>MY_EXPERIMENT013</td>\n", - " <td>/MATERIALS/YEASTS/MY_EXPERIMENT013</td>\n", - " <td>YEASTS</td>\n", - " <td>DEFAULT_EXPERIMENT</td>\n", - " <td></td>\n", - " <td>2016-10-04 22:09:15</td>\n", - " <td></td>\n", - " <td>2016-12-23 16:58:43</td>\n", + " <th>6</th>\n", + " <td>another_tag</td>\n", + " <td>2016-10-04 11:29:02</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7</th>\n", + " <td>blblblblblb</td>\n", + " <td>2016-10-06 14:47:45</td>\n", + " </tr>\n", + " <tr>\n", + " <th>8</th>\n", + " <td>clue</td>\n", + " <td>2016-09-26 23:48:08</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9</th>\n", + " <td>do</td>\n", + " <td>2016-09-12 23:57:14</td>\n", + " </tr>\n", + " <tr>\n", + " <th>10</th>\n", + " <td>due</td>\n", + " <td>2016-06-30 17:18:11</td>\n", + " </tr>\n", + " <tr>\n", + " <th>11</th>\n", + " <td>fa</td>\n", + " <td>2016-09-12 23:57:29</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12</th>\n", + " <td>gimme_a_tag</td>\n", + " <td>2016-11-18 15:20:10</td>\n", + " </tr>\n", + " <tr>\n", + " <th>13</th>\n", + " <td>gimme_one_more</td>\n", + " <td>2016-10-27 02:03:25</td>\n", + " </tr>\n", + " <tr>\n", + " <th>14</th>\n", + " <td>la</td>\n", + " <td>2016-09-12 23:57:29</td>\n", + " </tr>\n", + " <tr>\n", + " <th>15</th>\n", + " <td>mi</td>\n", + " <td>2016-09-12 23:57:29</td>\n", + " </tr>\n", + " <tr>\n", + " <th>16</th>\n", + " <td>new_tag</td>\n", + " <td>2016-10-06 10:49:15</td>\n", + " </tr>\n", + " <tr>\n", + " <th>17</th>\n", + " <td>no</td>\n", + " <td>2016-09-26 23:48:08</td>\n", + " </tr>\n", + " <tr>\n", + " <th>18</th>\n", + " <td>one</td>\n", + " <td>2016-11-09 14:27:58</td>\n", + " </tr>\n", + " <tr>\n", + " <th>19</th>\n", + " <td>re</td>\n", + " <td>2016-09-12 23:57:29</td>\n", + " </tr>\n", + " <tr>\n", + " <th>20</th>\n", + " <td>so</td>\n", + " <td>2016-09-12 23:57:29</td>\n", + " </tr>\n", + " <tr>\n", + " <th>21</th>\n", + " <td>three</td>\n", + " <td>2016-11-09 14:27:58</td>\n", + " </tr>\n", + " <tr>\n", + " <th>22</th>\n", + " <td>ti</td>\n", + " <td>2016-09-12 23:57:29</td>\n", + " </tr>\n", + " <tr>\n", + " <th>23</th>\n", + " <td>too_late</td>\n", + " <td>2016-10-06 10:56:07</td>\n", + " </tr>\n", + " <tr>\n", + " <th>24</th>\n", + " <td>tre</td>\n", + " <td>2016-06-30 17:18:11</td>\n", + " </tr>\n", + " <tr>\n", + " <th>25</th>\n", + " <td>two</td>\n", + " <td>2016-11-09 14:27:58</td>\n", + " </tr>\n", + " <tr>\n", + " <th>26</th>\n", + " <td>uno</td>\n", + " <td>2016-06-30 17:18:11</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ - "<pybis.pybis.Things at 0x7fd223f4c860>" + " code registrationDate\n", + "0 A_tag 2016-07-05 23:45:04\n", + "1 CREATE_JSON_TAG 2016-06-30 00:36:50\n", + "2 CREATE_JSON_TAG_2 2016-07-06 00:07:07\n", + "3 CREATE_JSON_TAG_3 2016-07-06 00:07:07\n", + "4 CREATE_JSON_TAG_blalbal 2016-11-08 10:24:18\n", + "5 another_nice_tag 2016-10-06 14:43:21\n", + "6 another_tag 2016-10-04 11:29:02\n", + "7 blblblblblb 2016-10-06 14:47:45\n", + "8 clue 2016-09-26 23:48:08\n", + "9 do 2016-09-12 23:57:14\n", + "10 due 2016-06-30 17:18:11\n", + "11 fa 2016-09-12 23:57:29\n", + "12 gimme_a_tag 2016-11-18 15:20:10\n", + "13 gimme_one_more 2016-10-27 02:03:25\n", + "14 la 2016-09-12 23:57:29\n", + "15 mi 2016-09-12 23:57:29\n", + "16 new_tag 2016-10-06 10:49:15\n", + "17 no 2016-09-26 23:48:08\n", + "18 one 2016-11-09 14:27:58\n", + "19 re 2016-09-12 23:57:29\n", + "20 so 2016-09-12 23:57:29\n", + "21 three 2016-11-09 14:27:58\n", + "22 ti 2016-09-12 23:57:29\n", + "23 too_late 2016-10-06 10:56:07\n", + "24 tre 2016-06-30 17:18:11\n", + "25 two 2016-11-09 14:27:58\n", + "26 uno 2016-06-30 17:18:11" ] }, - "execution_count": 15, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "o.get_experiments(is_finished=False, name='blast')" + "o.get_tags()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### updating an experiment." + "**get the terms of a (controlled) vocabulary.**\n", + "\n", + "Some assigned properties have a controlled vocabulary, which means you can not enter anything you want." ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 7, "metadata": { - "collapsed": false, - "scrolled": true + "collapsed": false }, "outputs": [ { @@ -1942,74 +1744,43 @@ " <table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", - " <th>attribute</th>\n", - " <th>value</th>\n", + " <th>vocabulary term</th>\n", + " <th>label</th>\n", + " <th>description</th>\n", + " <th>vocabulary</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", - " <tr> <td>code</td> <td>MY_EXPERIMENT3</td> </tr><tr> <td>permId</td> <td>20160924015723360-356</td> </tr><tr> <td>identifier</td> <td>/MATERIALS/YEASTS/MY_EXPERIMENT3</td> </tr><tr> <td>type</td> <td>DEFAULT_EXPERIMENT</td> </tr><tr> <td>space</td> <td></td> </tr><tr> <td>project</td> <td>/MATERIALS/YEASTS</td> </tr><tr> <td>tags</td> <td>[]</td> </tr><tr> <td>samples</td> <td></td> </tr><tr> <td>datasets</td> <td></td> </tr><tr><td>attachments</td><td></td></tr>\n", + " <tr> <td>A</td> <td>a</td> <td>None</td> <td>MATING_TYPE</td> </tr><tr> <td>ALPHA</td> <td>alpha</td> <td>None</td> <td>MATING_TYPE</td> </tr><tr> <td>DIPLOID</td> <td>diploid</td> <td>None</td> <td>MATING_TYPE</td> </tr><tr> <td>UNKNOWN</td> <td>unknown</td> <td>None</td> <td>MATING_TYPE</td> </tr>\n", " </tbody>\n", " </table>\n", " " ], "text/plain": [ - "<pybis.pybis.Experiment at 0x7fdbc7570748>" + "<pybis.masterdata.Vocabulary at 0x7fca603910f0>" ] }, - "execution_count": 3, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "o.get_experiments(type='DEFAULT_EXPERIMENT')[0]" + "o.get_terms('MATING_TYPE')" ] }, { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": false - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "e3.set_properties({'FINISHED_FLAG': True})" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "e3.add_tags(['too_late'])" - ] - }, - { - "cell_type": "raw", - "metadata": { - "collapsed": false - }, - "source": [ - "e = o.new_experiment('/MATERIALS/YEASTS', 'my_experiment0815', 'DEFAULT_EXPERIMENT', properties={\"Name\":\"blast\"})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "e2 = o.new_experiment()" + "**list all the deleted items in openBIS.**\n", + "\n", + "*TODO*: fetch the deletion date" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 20, "metadata": { "collapsed": false }, @@ -2017,78 +1788,136 @@ { "data": { "text/html": [ - "\n", - " <table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>attribute</th>\n", - " <th>value</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr> <td>code</td> <td>MY_EXPERIMENT04</td> </tr><tr> <td>permId</td> <td>20161006121402181-379</td> </tr><tr> <td>identifier</td> <td>/MATERIALS/YEASTS/MY_EXPERIMENT04</td> </tr><tr> <td>type</td> <td>DEFAULT_EXPERIMENT</td> </tr><tr> <td>space</td> <td></td> </tr><tr> <td>project</td> <td>/MATERIALS/YEASTS</td> </tr><tr> <td>tags</td> <td>['another_nice_tag', 'too_late']</td> </tr><tr> <td>samples</td> <td></td> </tr><tr> <td>datasets</td> <td></td> </tr><tr><td>attachments</td><td></td></tr>\n", - " </tbody>\n", - " </table>\n", - " " + "<div>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>permId</th>\n", + " <th>reason</th>\n", + " <th>type</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>20160629183649792-77</td>\n", + " <td>no jolly good reason</td>\n", + " <td>as.dto.sample.id.SamplePermId</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>20160629185740101-79</td>\n", + " <td>no jolly good reason</td>\n", + " <td>as.dto.sample.id.SamplePermId</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>20160705234127476-205</td>\n", + " <td>jjj</td>\n", + " <td>as.dto.sample.id.SamplePermId</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>20160630111810821-87</td>\n", + " <td>no specific reason</td>\n", + " <td>as.dto.sample.id.SamplePermId</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>20160926234807546-364</td>\n", + " <td>no longer needed</td>\n", + " <td>as.dto.experiment.id.ExperimentPermId</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>20161004215320704-370</td>\n", + " <td>it was just an experiment</td>\n", + " <td>as.dto.experiment.id.ExperimentPermId</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" ], "text/plain": [ - "<pybis.pybis.Experiment at 0x7fdbc73485f8>" + " permId reason \\\n", + "0 20160629183649792-77 no jolly good reason \n", + "1 20160629185740101-79 no jolly good reason \n", + "2 20160705234127476-205 jjj \n", + "3 20160630111810821-87 no specific reason \n", + "4 20160926234807546-364 no longer needed \n", + "5 20161004215320704-370 it was just an experiment \n", + "\n", + " type \n", + "0 as.dto.sample.id.SamplePermId \n", + "1 as.dto.sample.id.SamplePermId \n", + "2 as.dto.sample.id.SamplePermId \n", + "3 as.dto.sample.id.SamplePermId \n", + "4 as.dto.experiment.id.ExperimentPermId \n", + "5 as.dto.experiment.id.ExperimentPermId " ] }, - "execution_count": 4, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "e=o.get_experiment('20161006121402181-379')\n", - "e" + "o.get_deletions()" ] }, { - "cell_type": "code", - "execution_count": 119, - "metadata": { - "collapsed": false - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "e.add_tags('blblblblblb')" + "## working with projects" ] }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 1, "metadata": { - "collapsed": true + "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'vermeul-170126143455586x8A10E9354784B7ED77C8901A15079664'" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "e3.delete(reason='it was just an experiment')" + "from pybis import Openbis\n", + "o = Openbis(url='https://localhost:8443', verify_certificates=False)\n", + "o.token" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## working with samples" + "list all projects in a given space." ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "from pybis import Openbis\n", - "o = Openbis(url='https://localhost:8443', verify_certificates=False)" + "sp = o.get_space('VERMEUL')" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 6, "metadata": { "collapsed": false }, @@ -2103,8 +1932,7 @@ " <th></th>\n", " <th>identifier</th>\n", " <th>permId</th>\n", - " <th>experiment</th>\n", - " <th>sample_type</th>\n", + " <th>leader</th>\n", " <th>registrator</th>\n", " <th>registrationDate</th>\n", " <th>modifier</th>\n", @@ -2114,141 +1942,44 @@ " <tbody>\n", " <tr>\n", " <th>0</th>\n", - " <td>/VERMEUL/ANOTHER_SAMPLE1</td>\n", - " <td>20160706001644827-208</td>\n", + " <td>/VERMEUL/PROJECT_ONE</td>\n", + " <td>20170115220158336-410</td>\n", " <td>None</td>\n", - " <td>UNKNOWN</td>\n", - " <td></td>\n", - " <td>2016-07-06 00:16:45</td>\n", - " <td></td>\n", - " <td>2016-11-09 10:18:18</td>\n", + " <td>vermeul</td>\n", + " <td>2017-01-15 22:01:58</td>\n", + " <td>vermeul</td>\n", + " <td>2017-01-26 23:36:43</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", - " <td>/VERMEUL/BLAJLSD</td>\n", - " <td>20160630111949369-89</td>\n", - " <td>None</td>\n", - " <td>UNKNOWN</td>\n", - " <td></td>\n", - " <td>2016-06-30 17:19:49</td>\n", - " <td></td>\n", - " <td>2016-06-30 17:19:49</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>/VERMEUL/CHILD_OF_SAMPLE1</td>\n", - " <td>20160705234504004-206</td>\n", - " <td>/VERMEUL/VERMEUL_PROJECT/MY_EXPERIMENT4</td>\n", - " <td>UNKNOWN</td>\n", - " <td></td>\n", - " <td>2016-07-05 23:45:04</td>\n", - " <td></td>\n", - " <td>2016-10-07 01:05:46</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>20160630105304285-81</td>\n", - " <td>/VERMEUL/VERMEUL_PROJECT/MY_EXPERIMENT4</td>\n", - " <td>UNKNOWN</td>\n", - " <td></td>\n", - " <td>2016-06-30 16:53:04</td>\n", - " <td></td>\n", - " <td>2016-11-21 00:53:59</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>/VERMEUL/MY_WONDERFUL_SAMPLE_NAME</td>\n", - " <td>20160720225637704-262</td>\n", - " <td>None</td>\n", - " <td>UNKNOWN</td>\n", - " <td></td>\n", - " <td>2016-07-20 22:56:38</td>\n", - " <td></td>\n", - " <td>2016-07-20 22:56:38</td>\n", - " </tr>\n", - " <tr>\n", - " <th>5</th>\n", - " <td>/VERMEUL/OH_WIE_SCHOEN_IST_PANAMA</td>\n", - " <td>20160630110733527-86</td>\n", - " <td>None</td>\n", - " <td>UNKNOWN</td>\n", - " <td></td>\n", - " <td>2016-06-30 17:07:34</td>\n", - " <td></td>\n", - " <td>2016-07-06 00:11:45</td>\n", - " </tr>\n", - " <tr>\n", - " <th>6</th>\n", - " <td>/VERMEUL/OH_WIE_SCHOEN_IST_PANAMA3</td>\n", - " <td>20160630112720553-90</td>\n", - " <td>None</td>\n", - " <td>UNKNOWN</td>\n", - " <td></td>\n", - " <td>2016-06-30 17:27:21</td>\n", - " <td></td>\n", - " <td>2016-06-30 17:27:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>7</th>\n", - " <td>/VERMEUL/OH_WIE_SCHOEN_IST_PANAMA5</td>\n", - " <td>20160706231053756-211</td>\n", - " <td>None</td>\n", - " <td>UNKNOWN</td>\n", - " <td></td>\n", - " <td>2016-07-06 23:10:54</td>\n", - " <td></td>\n", - " <td>2016-07-06 23:10:54</td>\n", - " </tr>\n", - " <tr>\n", - " <th>8</th>\n", - " <td>/VERMEUL/YEA21</td>\n", - " <td>20161025010638912-382</td>\n", - " <td>/VERMEUL/VERMEUL_PROJECT/MY_SPECIAL_EXPERIMENT</td>\n", - " <td>YEAST</td>\n", - " <td></td>\n", - " <td>2016-10-25 01:06:39</td>\n", - " <td></td>\n", - " <td>2016-12-01 22:44:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>9</th>\n", - " <td>/VERMEUL/YET_ANOTHER_SAMPLE1</td>\n", - " <td>20160706002555747-209</td>\n", + " <td>/VERMEUL/READY_TO_DELETE</td>\n", + " <td>20170122214024061-421</td>\n", " <td>None</td>\n", - " <td>UNKNOWN</td>\n", - " <td></td>\n", - " <td>2016-07-06 00:25:56</td>\n", - " <td></td>\n", - " <td>2016-11-09 10:18:18</td>\n", + " <td>vermeul</td>\n", + " <td>2017-01-22 21:40:24</td>\n", + " <td>vermeul</td>\n", + " <td>2017-01-22 21:40:24</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ - "<pybis.pybis.Things at 0x7efe60bb8978>" + "<pybis.pybis.Things at 0x7f882ed7bcf8>" ] }, - "execution_count": 2, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "o.get_samples(space='VERMEUL', tags=['*'])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "get the first sample of the above list and just display the basic attributes" + "sp.get_projects()" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 7, "metadata": { "collapsed": false }, @@ -2265,28 +1996,50 @@ " </tr>\n", " </thead>\n", " <tbody>\n", - " <tr> <td>code</td> <td>YEA21</td> </tr><tr> <td>permId</td> <td>20161025010638912-382</td> </tr><tr> <td>identifier</td> <td>/VERMEUL/YEA21</td> </tr><tr> <td>type</td> <td>YEAST</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>space</td> <td>VERMEUL</td> </tr><tr> <td>project</td> <td></td> </tr><tr> <td>experiment</td> <td>/VERMEUL/VERMEUL_PROJECT/MY_SPECIAL_EXPERIMENT</td> </tr><tr> <td>parents</td> <td>[]</td> </tr><tr> <td>children</td> <td>[]</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>['do', 'fa', 're']</td> </tr><tr><td>attachments</td><td></td></tr>\n", + " <tr> <td>code</td> <td>PROJECT_ONE</td> </tr><tr> <td>description</td> <td></td> </tr><tr> <td>permId</td> <td>20170115220158336-410</td> </tr><tr> <td>identifier</td> <td>/VERMEUL/PROJECT_ONE</td> </tr><tr> <td>space</td> <td>VERMEUL</td> </tr><tr> <td>leader</td> <td></td> </tr><tr> <td>registrator</td> <td>vermeul</td> </tr><tr> <td>registrationDate</td> <td>2017-01-15 22:01:58</td> </tr><tr> <td>modifier</td> <td></td> </tr><tr> <td>modificationDate</td> <td>2017-01-26 23:36:43</td> </tr><tr><td>attachments</td><td>IMG_3587.JPG</td></tr>\n", " </tbody>\n", " </table>\n", " " ], "text/plain": [ - "<pybis.pybis.Sample at 0x7ff35e95d198>" + "<pybis.pybis.Project at 0x7f882ed87080>" ] }, - "execution_count": 10, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "s = o.get_sample('/VERMEUL/YEA21')\n", - "s" + "p = sp.get_projects()[0]\n", + "p" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'description': None, 'fileName': 'IMG_3587.JPG', 'title': 'just a big mess'}]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p.attachments" + ] + }, + { + "cell_type": "code", + "execution_count": 6, "metadata": { "collapsed": false }, @@ -2294,53 +2047,68 @@ { "data": { "text/html": [ - "\n", + "<div>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", - " <th>attribute</th>\n", - " <th>value</th>\n", + " <th></th>\n", + " <th>fileName</th>\n", + " <th>title</th>\n", + " <th>description</th>\n", + " <th>version</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", - " <tr> <th>permId</th> <td>20161121013609807-402</td> </tr>\n", - " <tr> <th>identifier</th> <td>/VERMEUL/VERMEUL_PROJECT/MY_SPECIAL_EXPERIMENT</td> </tr>\n", - " <tr> <th>project</th> <td>VERMEUL_PROJECT</td> </tr>\n", - " <tr> <th>properties</th> <td>{}</td> </tr>\n", - " <tr> <th>tags</th> <td>[]</td> </tr>\n", - " <tr> <th>attachments</th> <td>[]</td> </tr>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>IMG_3587.JPG</td>\n", + " <td>just a big mess</td>\n", + " <td>None</td>\n", + " <td>1</td>\n", + " </tr>\n", " </tbody>\n", "</table>\n", - " " + "</div>" ], "text/plain": [ - "{'properties': {}, 'tags': [], 'permId': '20161121013609807-402', 'identifier': '/VERMEUL/VERMEUL_PROJECT/MY_SPECIAL_EXPERIMENT'}" + " fileName title description version\n", + "0 IMG_3587.JPG just a big mess None 1" ] }, - "execution_count": 4, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ex = s.get_experiment()\n", - "ex" + "p.get_attachments()" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "['localhost/20170115220158336-410/IMG_3587.JPG']" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "s.a.tags = ['fa', 'do','re']" + "p.download_attachments()" ] }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 8, "metadata": { "collapsed": false }, @@ -2349,39 +2117,29 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample successfully updated\n" + "localhost/20170115220158336-410\r\n", + "localhost/20170115220158336-410/IMG_3587.JPG\r\n" ] } ], "source": [ - "s.save()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "s = o.get_sample('/VERMEUL/YEA21')" + "!find localhost/20170115220158336-410" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "s.p.mating_type = 'A'" + "p.add_attachment(fileName='testfile', description= 'another file', title= 'one more attachment')" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 10, "metadata": { "collapsed": false }, @@ -2390,151 +2148,142 @@ "data": { "text/html": [ "\n", - "<p>SampleType: <b>YEAST</b>\n", - "<p>description: </p>\n", - "<p>Code autogenerated: True</p>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>property</th>\n", - " <th>label</th>\n", - " <th>description</th>\n", - " <th>dataType</th>\n", - " <th>mandatory</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr> <th>name</th> <td>Name</td> <td>Name</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>show_in_project_overview</th> <td>Show in project overview</td> <td>Show in project overview</td> <td>BOOLEAN</td> <td>False</td> </tr><tr> <th>owner</th> <td>Owner</td> <td>Who produced/owned the sample</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>owner_number</th> <td>Owner number</td> <td>Owner number</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>genetic_modification</th> <td>Genetic modifications</td> <td>Genetic modifications composed by the Plasmid ancestors</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>genetic_background</th> <td>Genetic Background</td> <td>Genetic background of the yeast strain</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>mating_type</th> <td>Mating Type</td> <td>Mating type or ploidy of the yeast strain</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>background-specific_markers</th> <td>Background-specific markers</td> <td>Background-specific markers available in the strain for further genetic modifications</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>common_markers</th> <td>Common markers</td> <td>Common markers available in the strain for further genetic modifications</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>endogenous_plasmid</th> <td>Endogenous 2micron plasmid in yeast</td> <td>Presence of an endogenous cir 2micron plasmid</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>origin</th> <td>Origin</td> <td>How the strain/cell line was produced</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>strain_check</th> <td>Strain Check</td> <td>Check done to verify the modifications introduced in the strain</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>source</th> <td>Source</td> <td>Source from where the construct/strain/cell line obtained or purchased, if it was not produced in the lab</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>publication</th> <td>Publication</td> <td>Publication from where the information was first found OR technical sheet given by the manufacturer</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>notes</th> <td>Notes</td> <td>Notes regarding the dataset</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>xmlcomments</th> <td>Comments List</td> <td>Several comments can be added by different users</td> <td>XML</td> <td>False</td> </tr><tr> <th>annotations_state</th> <td>Annotations State</td> <td>Annotations State</td> <td>XML</td> <td>False</td> </tr><tr> <th>storage_names</th> <td>Storage Name</td> <td>Storage Name</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>storage_row</th> <td>Storage Row</td> <td>Storage Row</td> <td>INTEGER</td> <td>False</td> </tr><tr> <th>storage_column</th> <td>Storage Column</td> <td>Storage Column</td> <td>INTEGER</td> <td>False</td> </tr><tr> <th>storage_box_name</th> <td>Storage Box Name</td> <td>Storage Box Name</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>storage_box_size</th> <td>Storage Box Size</td> <td>Storage Box Size</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>storage_user</th> <td>Storage User Id</td> <td>Storage User Id</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>storage_position</th> <td>Storage Position</td> <td>Storage Position</td> <td>VARCHAR</td> <td>False</td> </tr>\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>PROJECT_ONE</td> </tr><tr> <td>description</td> <td></td> </tr><tr> <td>permId</td> <td>20170115220158336-410</td> </tr><tr> <td>identifier</td> <td>/VERMEUL/PROJECT_ONE</td> </tr><tr> <td>space</td> <td>VERMEUL</td> </tr><tr> <td>leader</td> <td></td> </tr><tr> <td>registrator</td> <td>vermeul</td> </tr><tr> <td>registrationDate</td> <td>2017-01-15 22:01:58</td> </tr><tr> <td>modifier</td> <td></td> </tr><tr> <td>modificationDate</td> <td>2017-01-24 15:13:08</td> </tr><tr><td>attachments</td><td>IMG_3587.JPG<br/>testfile</td></tr>\n", " </tbody>\n", " </table>\n", " " ], "text/plain": [ - "<pybis.pybis.PropertyAssignments at 0x7efe6097a198>" + "<pybis.pybis.Project at 0x7fc53d9cd780>" ] }, - "execution_count": 12, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "s.get_type()" + "p" ] }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "Project successfully updated.\n" + ] } ], "source": [ - "s.identifier\n", - "s.code\n", - "s.type\n", - "s.space\n", - "s.tags" + "p.save()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "list all the properties (p) of a given sample" + "## working with experiments" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 1, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " <table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>vocabulary term</th>\n", - " <th>label</th>\n", - " <th>description</th>\n", - " <th>vocabulary</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr> <td>URA3_HIS3_LEU2</td> <td>ura3- his3- leu2-</td> <td>The strain is a uracil, histidine, and leucine auxotroph</td> <td>COMMON_MARKERS</td> </tr><tr> <td>URA3_HIS3</td> <td>ura3- his3-</td> <td>The strain is a uracil and histidine auxotroph</td> <td>COMMON_MARKERS</td> </tr><tr> <td>URA3_LEU2</td> <td>ura3- leu2-</td> <td>The strain is a uracil and leucine auxotroph</td> <td>COMMON_MARKERS</td> </tr><tr> <td>URA3</td> <td>ura3-</td> <td>The strain is a uracil auxotroph</td> <td>COMMON_MARKERS</td> </tr><tr> <td>HIS3_LEU2</td> <td>his3- leu2-</td> <td>The strain is a histidine and leucine auxotroph</td> <td>COMMON_MARKERS</td> </tr><tr> <td>HIS3</td> <td>his3-</td> <td>The strain is a histidine auxotroph</td> <td>COMMON_MARKERS</td> </tr><tr> <td>LEU2</td> <td>leu2-</td> <td>The strain is a leucine auxotroph</td> <td>COMMON_MARKERS</td> </tr><tr> <td>NONE</td> <td>none</td> <td>The strain does not have any background-specific auxotrophies</td> <td>COMMON_MARKERS</td> </tr><tr> <td>UNKNOWN</td> <td>unknown</td> <td>No information about the auxotrophy</td> <td>COMMON_MARKERS</td> </tr>\n", - " </tbody>\n", - " </table>\n", - " " - ], - "text/plain": [ - "<pybis.pybis.Vocabulary at 0x7efe6097feb8>" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "s.p.common_markers_" + "from pybis import Openbis\n", + "o = Openbis(url='https://localhost:8443', verify_certificates=False)" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ - "fetch just a single property: sample.p.«property_name»" + "**fetching experiments of a specific type containing tags**" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 2, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true }, "outputs": [ { "data": { + "text/html": [ + "<div>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>identifier</th>\n", + " <th>permId</th>\n", + " <th>project</th>\n", + " <th>type</th>\n", + " <th>registrator</th>\n", + " <th>registrationDate</th>\n", + " <th>modifier</th>\n", + " <th>modificationDate</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>/MATERIALS/YEASTS/MY_FIRST_EXPERIMENT_WITH_PRO...</td>\n", + " <td>20160924015154859-355</td>\n", + " <td>YEASTS</td>\n", + " <td>None</td>\n", + " <td>vermeul</td>\n", + " <td>2016-09-24 01:51:55</td>\n", + " <td>vermeul</td>\n", + " <td>2017-01-27 00:12:25</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], "text/plain": [ - "'comments: publication in my office'" + "<pybis.pybis.Things at 0x7f21b2d65898>" ] }, - "execution_count": 14, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "s.p.publication" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "if you don't know the controlled vocabulary of a property, just add an underscore and press shift-enter:" + "exps = o.get_experiments(\n", + " project='YEASTS',\n", + " space='MATERIALS', \n", + " type='DEFAULT_EXPERIMENT',\n", + " tags='*', \n", + " is_finished=True\n", + ")\n", + "exps" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 3, "metadata": { "collapsed": false }, @@ -2546,193 +2295,74 @@ " <table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", - " <th>vocabulary term</th>\n", - " <th>label</th>\n", - " <th>description</th>\n", - " <th>vocabulary</th>\n", + " <th>attribute</th>\n", + " <th>value</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", - " <tr> <td>A</td> <td>a</td> <td>None</td> <td>MATING_TYPE</td> </tr><tr> <td>ALPHA</td> <td>alpha</td> <td>None</td> <td>MATING_TYPE</td> </tr><tr> <td>DIPLOID</td> <td>diploid</td> <td>None</td> <td>MATING_TYPE</td> </tr><tr> <td>UNKNOWN</td> <td>unknown</td> <td>None</td> <td>MATING_TYPE</td> </tr>\n", + " <tr> <td>code</td> <td>MY_FIRST_EXPERIMENT_WITH_PROPERTY</td> </tr><tr> <td>permId</td> <td>20160924015154859-355</td> </tr><tr> <td>identifier</td> <td>/MATERIALS/YEASTS/MY_FIRST_EXPERIMENT_WITH_PROPERTY</td> </tr><tr> <td>type</td> <td>DEFAULT_EXPERIMENT</td> </tr><tr> <td>project</td> <td>/MATERIALS/YEASTS</td> </tr><tr> <td>tags</td> <td>['too_late', 'uno']</td> </tr><tr><td>attachments</td><td>testfile</td></tr>\n", " </tbody>\n", " </table>\n", " " ], "text/plain": [ - "<pybis.pybis.Vocabulary at 0x7efe6097d828>" + "<pybis.pybis.Experiment at 0x7fbe86a64748>" ] }, - "execution_count": 15, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "s.p.mating_type_" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "pybis will automatically check the controlled vocabulary when you assign a value to it:" + "e0 = exps[0]\n", + "e0" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 9, "metadata": { "collapsed": false }, - "outputs": [ - { - "ename": "ValueError", - "evalue": "Value must be one of these terms: A, ALPHA, DIPLOID, UNKNOWN", - "output_type": "error", - "traceback": [ - "\u001b[1;31m\u001b[0m", - "\u001b[1;31mValueError\u001b[0mTraceback (most recent call last)", - "\u001b[1;32m<ipython-input-24-d4d5f6a664c5>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ms\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmating_type\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'invalid content'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[1;32m/vagrant_python/PyBis/pybis/pybis.py\u001b[0m in \u001b[0;36m__setattr__\u001b[1;34m(self, name, value)\u001b[0m\n\u001b[0;32m 2122\u001b[0m \u001b[0mvoc\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_openbis\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_terms\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2123\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mvalue\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mvoc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mterms\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2124\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Value must be one of these terms: \"\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;34m\", \"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvoc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mterms\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2125\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0mdata_type\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;34m'INTEGER'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'BOOLEAN'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'VARCHAR'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2126\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mcheck_datatype\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata_type\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mValueError\u001b[0m: Value must be one of these terms: A, ALPHA, DIPLOID, UNKNOWN" - ] - } - ], + "outputs": [], "source": [ - "s.p.mating_type = 'invalid content'" + "e0.project = p" ] }, { - "cell_type": "markdown", - "metadata": {}, + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ - "some properties are of a general type. Again, you can list it by adding an underscore _ :" + "e0.add_tags('uno')" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { - "data": { - "text/plain": [ - "{'Storage Column': 'INTEGER'}" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s.p.storage_column_" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "### alter a sample and its properties" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "from pybis import Openbis\n", - "o = Openbis(url='https://localhost:8443', verify_certificates=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " <table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>attribute</th>\n", - " <th>value</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr> <td>code</td> <td>FLY45</td> </tr><tr> <td>permId</td> <td>20170104000847172-405</td> </tr><tr> <td>identifier</td> <td>/MATERIALS/FLY45</td> </tr><tr> <td>type</td> <td>FLY</td> </tr><tr> <td>parents</td> <td>['/MATERIALS/FLY43']</td> </tr><tr> <td>children</td> <td>[]</td> </tr><tr> <td>space</td> <td>MATERIALS</td> </tr><tr> <td>project</td> <td></td> </tr><tr> <td>experiment</td> <td>/MATERIALS/YEASTS/MY_EXPERIMENT007</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>[]</td> </tr><tr><td>attachments</td><td>openBIS JSON-RPC.md</td></tr>\n", - " </tbody>\n", - " </table>\n", - " " - ], - "text/plain": [ - "<pybis.pybis.Sample at 0x7fd4d7f4b7b8>" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sample = o.get_sample('/MATERIALS/FLY45')\n", - "sample" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " <table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>property</th>\n", - " <th>value</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr> <td>name</td> <td>a fly45 which is the child of fly43</td> </tr><tr> <td>show_in_project_overview</td> <td>False</td> </tr><tr> <td>owner</td> <td></td> </tr><tr> <td>owner_number</td> <td></td> </tr><tr> <td>genetic_modification</td> <td></td> </tr><tr> <td>fly_genotype</td> <td></td> </tr><tr> <td>associated_gene</td> <td></td> </tr><tr> <td>markers</td> <td></td> </tr><tr> <td>origin</td> <td></td> </tr><tr> <td>strain_check</td> <td></td> </tr><tr> <td>source</td> <td></td> </tr><tr> <td>mating_partners</td> <td></td> </tr><tr> <td>publication</td> <td></td> </tr><tr> <td>notes</td> <td></td> </tr><tr> <td>xmlcomments</td> <td><root>\n", - " <commentEntry date=\"1483484927350\" person=\"vermeul\"/>\n", - "</root>\n", - "</td> </tr><tr> <td>annotations_state</td> <td>�(undefined)</td> </tr><tr> <td>storage_names</td> <td></td> </tr><tr> <td>storage_row</td> <td></td> </tr><tr> <td>storage_column</td> <td></td> </tr><tr> <td>storage_box_name</td> <td></td> </tr><tr> <td>storage_box_size</td> <td></td> </tr><tr> <td>storage_user</td> <td></td> </tr><tr> <td>storage_position</td> <td></td> </tr>\n", - " </tbody>\n", - " </table>\n", - " " - ], - "text/plain": [ - "<pybis.pybis.PropertyHolder at 0x7fd4d7f4bf98>" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "Experiment successfully updated.\n" + ] } ], "source": [ - "sample.props" + "e0.save()" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 13, "metadata": { "collapsed": false }, @@ -2745,50 +2375,49 @@ " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", - " <th>identifier</th>\n", " <th>permId</th>\n", + " <th>properties</th>\n", + " <th>type</th>\n", " <th>experiment</th>\n", - " <th>sample_type</th>\n", - " <th>registrator</th>\n", + " <th>sample</th>\n", " <th>registrationDate</th>\n", - " <th>modifier</th>\n", " <th>modificationDate</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", - " <td>/MATERIALS/FLY43</td>\n", - " <td>20170104000802333-404</td>\n", - " <td>/MATERIALS/YEASTS/MY_EXPERIMENT007</td>\n", - " <td>FLY</td>\n", - " <td></td>\n", - " <td>2017-01-04 00:08:02</td>\n", - " <td></td>\n", - " <td>2017-01-04 00:08:47</td>\n", + " <td>20170106004736870-407</td>\n", + " <td>{'NAME': 'dunno'}</td>\n", + " <td>ANALYZED_DATA</td>\n", + " <td>/MATERIALS/YEASTS/MY_FIRST_EXPERIMENT_WITH_PRO...</td>\n", + " <td>None</td>\n", + " <td>2017-01-06 00:47:37</td>\n", + " <td>2017-01-06 00:47:37</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ - "<pybis.pybis.Things at 0x7fd4d7f66358>" + "<pybis.pybis.Things at 0x7fbb3966a4e0>" ] }, - "execution_count": 4, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "sample.get_parents()" + "e0.get_datasets()" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 19, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": true }, "outputs": [ { @@ -2803,148 +2432,112 @@ " </tr>\n", " </thead>\n", " <tbody>\n", - " <tr> <td>code</td> <td>FLY45</td> </tr><tr> <td>permId</td> <td>20170104000847172-405</td> </tr><tr> <td>identifier</td> <td>/MATERIALS/FLY45</td> </tr><tr> <td>type</td> <td>FLY</td> </tr><tr> <td>parents</td> <td>['/MATERIALS/FLY43']</td> </tr><tr> <td>children</td> <td>[]</td> </tr><tr> <td>space</td> <td>MATERIALS</td> </tr><tr> <td>project</td> <td></td> </tr><tr> <td>experiment</td> <td>/MATERIALS/YEASTS/MY_EXPERIMENT007</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>[]</td> </tr><tr><td>attachments</td><td>openBIS JSON-RPC.md</td></tr>\n", + " <tr> <td>code</td> <td>MY_FIRST_EXPERIMENT_WITH_PROPERTY</td> </tr><tr> <td>permId</td> <td>20160924015154859-355</td> </tr><tr> <td>identifier</td> <td>/MATERIALS/YEASTS/MY_FIRST_EXPERIMENT_WITH_PROPERTY</td> </tr><tr> <td>type</td> <td>DEFAULT_EXPERIMENT</td> </tr><tr> <td>project</td> <td>/MATERIALS/YEASTS</td> </tr><tr> <td>tags</td> <td>['too_late', 'uno']</td> </tr><tr><td>attachments</td><td>testfile</td></tr>\n", " </tbody>\n", " </table>\n", " " ], "text/plain": [ - "<pybis.pybis.Sample at 0x7fd4d7f4b7b8>" + "<pybis.pybis.Experiment at 0x7fbb39647eb8>" ] }, - "execution_count": 5, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "sample" + "e0" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "text/html": [ - "<div>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>code</th>\n", - " <th>properties</th>\n", - " <th>type</th>\n", - " <th>sample</th>\n", - " <th>registrationDate</th>\n", - " <th>modificationDate</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>20170104003608559-406</td>\n", - " <td>{'NAME': 'some analyzed data'}</td>\n", - " <td>ANALYZED_DATA</td>\n", - " <td>/MATERIALS/FLY45</td>\n", - " <td>2017-01-04 00:36:09</td>\n", - " <td>2017-01-04 00:36:09</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], "text/plain": [ - "<pybis.pybis.Things at 0x7fd4d7d04dd8>" + "{'End Date': 'TIMESTAMP', 'syntax': 'YYYY-MM-DD HH:MIN:SS'}" ] }, - "execution_count": 6, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "sample.get_datasets()" + "e0.p.end_date_" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 3, "metadata": { - "collapsed": false + "collapsed": true }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Files downloaded to: localhost/20170104003608559-406\n" - ] - } - ], + "outputs": [], "source": [ - "sample.get_datasets()[0].download()" + "e_new = o.new_experiment('DEFAULT_EXPERIMENT')" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 4, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "jupyter_useage_lab.zip\r\n" - ] - } - ], + "outputs": [], "source": [ - "ls localhost/20170104003608559-406/original" + "e_new.project ='VERMEUL_PROJECT'" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 5, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ - "s_up = o.get_sample('/VERMEUL/MY_WONDERFUL_SAMPLE_NAME')" + "e_new.tags = 'too_late'" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 6, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ - "s_up.space = 'ANOTHER_SPACE_NAME'" + "e_new.code = 'exp_new'" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 8, "metadata": { - "collapsed": true + "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Experiment successfully created.\n" + ] + } + ], "source": [ - "s_up.tags = ['one', 'two', 'three']" + "e_new.save()" ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 45, "metadata": { "collapsed": false }, @@ -2961,90 +2554,28 @@ " </tr>\n", " </thead>\n", " <tbody>\n", - " <tr> <td>identifier</td> <td>/VERMEUL/MY_WONDERFUL_SAMPLE_NAME</td> </tr><tr> <td>permId</td> <td>20160720225637704-262</td> </tr><tr> <td>code</td> <td>MY_WONDERFUL_SAMPLE_NAME</td> </tr><tr> <td>type</td> <td>UNKNOWN</td> </tr><tr> <td>space</td> <td>ANOTHER_SPACE_NAME</td> </tr><tr> <td>project</td> <td>None</td> </tr><tr> <td>experiment</td> <td></td> </tr><tr> <td>parents</td> <td>[]</td> </tr><tr> <td>children</td> <td>[]</td> </tr><tr> <td>tags</td> <td>['one', 'two', 'three']</td> </tr>\n", + " <tr> <td>code</td> <td>MY_EXPERIMENT007</td> </tr><tr> <td>permId</td> <td>20161004220718730-373</td> </tr><tr> <td>identifier</td> <td>/MATERIALS/YEASTS/MY_EXPERIMENT007</td> </tr><tr> <td>type</td> <td>DEFAULT_EXPERIMENT</td> </tr><tr> <td>space</td> <td></td> </tr><tr> <td>project</td> <td>/MATERIALS/YEASTS</td> </tr><tr> <td>tags</td> <td>[]</td> </tr><tr><td>attachments</td><td>Bildschirmfoto 2016-12-20 um 10.47.26.png<br/>Ein Saurier.txt</td></tr>\n", " </tbody>\n", " </table>\n", " " ], "text/plain": [ - "<pybis.pybis.Sample at 0x7efe60915668>" + "<pybis.pybis.Experiment at 0x7f3140f55400>" ] }, - "execution_count": 22, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "s_up" + "e = o.get_experiment('/MATERIALS/YEASTS/MY_EXPERIMENT007')\n", + "e" ] }, { "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sample successfully updated\n" - ] - } - ], - "source": [ - "s_up.save()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### create a new sample" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "from pybis import Openbis\n", - "o = Openbis(url='https://localhost:8443', verify_certificates=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "to create a new sample, the sampletype must be specified" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "s_new = o.new_sample(type='YEAST', space='VERMEUL')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "controlled vocabulary: find out which terms are allowed by adding an underscore to the property." - ] - }, - { - "cell_type": "code", - "execution_count": 10, + "execution_count": 10, "metadata": { "collapsed": false }, @@ -3056,20 +2587,18 @@ " <table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", - " <th>vocabulary term</th>\n", - " <th>label</th>\n", - " <th>description</th>\n", - " <th>vocabulary</th>\n", + " <th>attribute</th>\n", + " <th>value</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", - " <tr> <td>CROSS</td> <td>cross</td> <td>The strain was produced by crossing two parent strains</td> <td>ORIGIN</td> </tr><tr> <td>TRANSFORMATION</td> <td>transformation</td> <td>The strain/ cell line was obtained by transformation</td> <td>ORIGIN</td> </tr><tr> <td>SPORULATION</td> <td>transformation sporulation</td> <td>The strain was obtained by sporulating a parent diploid strain</td> <td>ORIGIN</td> </tr><tr> <td>NEGATIVE_SELECTION</td> <td>negative selection</td> <td>The strain/cell line was obtained by negative selection</td> <td>ORIGIN</td> </tr><tr> <td>TRANSFECTION</td> <td>transfection</td> <td>The strain/cell line was obtained by transfection</td> <td>ORIGIN</td> </tr>\n", + " <tr> <td>code</td> <td>MY_EXPERIMENT007</td> </tr><tr> <td>permId</td> <td>20161004220718730-373</td> </tr><tr> <td>identifier</td> <td>/MATERIALS/YEASTS/MY_EXPERIMENT007</td> </tr><tr> <td>type</td> <td>DEFAULT_EXPERIMENT</td> </tr><tr> <td>space</td> <td></td> </tr><tr> <td>project</td> <td>/MATERIALS/YEASTS</td> </tr><tr> <td>tags</td> <td>[]</td> </tr><tr><td>attachments</td><td>Bildschirmfoto 2016-12-20 um 10.47.26.png<br/>Ein Saurier.txt</td></tr>\n", " </tbody>\n", " </table>\n", " " ], "text/plain": [ - "<pybis.pybis.Vocabulary at 0x7fbfcacd5a58>" + "<pybis.pybis.Experiment at 0x7fd2241efc18>" ] }, "execution_count": 10, @@ -3078,14 +2607,72 @@ } ], "source": [ - "s_new.p.origin_" + "o.get_experiment('20161004220718730-373')" ] }, { - "cell_type": "markdown", - "metadata": {}, + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>identifier</th>\n", + " <th>permId</th>\n", + " <th>experiment</th>\n", + " <th>sample_type</th>\n", + " <th>registrator</th>\n", + " <th>registrationDate</th>\n", + " <th>modifier</th>\n", + " <th>modificationDate</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>/MATERIALS/FLY43</td>\n", + " <td>20170104000802333-404</td>\n", + " <td>/MATERIALS/YEASTS/MY_EXPERIMENT007</td>\n", + " <td>FLY</td>\n", + " <td></td>\n", + " <td>2017-01-04 00:08:02</td>\n", + " <td></td>\n", + " <td>2017-01-04 00:08:47</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>/MATERIALS/FLY45</td>\n", + " <td>20170104000847172-405</td>\n", + " <td>/MATERIALS/YEASTS/MY_EXPERIMENT007</td>\n", + " <td>FLY</td>\n", + " <td></td>\n", + " <td>2017-01-04 00:08:47</td>\n", + " <td></td>\n", + " <td>2017-01-04 00:36:09</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + "<pybis.pybis.Things at 0x7fd223f3f208>" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "assigning a wrong value to a property will lead to an error:" + "e.get_samples()" ] }, { @@ -3096,43 +2683,134 @@ }, "outputs": [ { - "ename": "ValueError", - "evalue": "Value must be one of these terms: CROSS, TRANSFORMATION, SPORULATION, NEGATIVE_SELECTION, TRANSFECTION", - "output_type": "error", - "traceback": [ - "\u001b[1;31m\u001b[0m", - "\u001b[1;31mValueError\u001b[0mTraceback (most recent call last)", - "\u001b[1;32m<ipython-input-12-d9539d489991>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ms_new\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0morigin\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'crozz'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[1;32m/vagrant_python/PyBis/pybis/pybis.py\u001b[0m in \u001b[0;36m__setattr__\u001b[1;34m(self, name, value)\u001b[0m\n\u001b[0;32m 2099\u001b[0m \u001b[0mvoc\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_openbis\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_terms\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2100\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mvalue\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mvoc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mterms\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2101\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Value must be one of these terms: \"\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;34m\", \"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvoc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mterms\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2102\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0mdata_type\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;34m'INTEGER'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'BOOLEAN'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'VARCHAR'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2103\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mcheck_datatype\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata_type\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mValueError\u001b[0m: Value must be one of these terms: CROSS, TRANSFORMATION, SPORULATION, NEGATIVE_SELECTION, TRANSFECTION" - ] + "data": { + "text/html": [ + "<div>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>identifier</th>\n", + " <th>permId</th>\n", + " <th>experiment</th>\n", + " <th>sample_type</th>\n", + " <th>registrator</th>\n", + " <th>registrationDate</th>\n", + " <th>modifier</th>\n", + " <th>modificationDate</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>/MATERIALS/FLY43</td>\n", + " <td>20170104000802333-404</td>\n", + " <td>/MATERIALS/YEASTS/MY_EXPERIMENT007</td>\n", + " <td>FLY</td>\n", + " <td></td>\n", + " <td>2017-01-04 00:08:02</td>\n", + " <td></td>\n", + " <td>2017-01-04 00:08:47</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>/MATERIALS/FLY45</td>\n", + " <td>20170104000847172-405</td>\n", + " <td>/MATERIALS/YEASTS/MY_EXPERIMENT007</td>\n", + " <td>FLY</td>\n", + " <td></td>\n", + " <td>2017-01-04 00:08:47</td>\n", + " <td></td>\n", + " <td>2017-01-04 00:36:09</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + "<pybis.pybis.Things at 0x7fd223f3f8d0>" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "s_new.p.origin = 'crozz'" + "o.get_samples(experiment='20161004220718730-373')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "s_new.p. + TAB autocompletes all available properties for that given sample type. To show the current attributes of our new sample just use this:" + "get all experiment with a given property" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 15, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>code</th>\n", + " <th>identifier</th>\n", + " <th>project</th>\n", + " <th>type</th>\n", + " <th>registrator</th>\n", + " <th>registrationDate</th>\n", + " <th>modifier</th>\n", + " <th>modificationDate</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>MY_EXPERIMENT013</td>\n", + " <td>/MATERIALS/YEASTS/MY_EXPERIMENT013</td>\n", + " <td>YEASTS</td>\n", + " <td>DEFAULT_EXPERIMENT</td>\n", + " <td></td>\n", + " <td>2016-10-04 22:09:15</td>\n", + " <td></td>\n", + " <td>2016-12-23 16:58:43</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + "<pybis.pybis.Things at 0x7fd223f4c860>" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "s_new.p.mating_type = 'ALPHA'" + "o.get_experiments(is_finished=False, name='blast')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### updating an experiment." ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 27, "metadata": { "collapsed": false }, @@ -3144,43 +2822,75 @@ " <table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", - " <th>attribute</th>\n", + " <th>property</th>\n", " <th>value</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", - " <tr> <td>identifier</td> <td>None</td> </tr><tr> <td>permId</td> <td>None</td> </tr><tr> <td>code</td> <td>None</td> </tr><tr> <td>type</td> <td>None</td> </tr><tr> <td>space</td> <td>VERMEUL</td> </tr><tr> <td>project</td> <td>None</td> </tr><tr> <td>experiment</td> <td>None</td> </tr><tr> <td>parents</td> <td>None</td> </tr><tr> <td>children</td> <td>None</td> </tr><tr> <td>tags</td> <td>None</td> </tr>\n", + " <tr> <td>name</td> <td>blast</td> </tr><tr> <td>show_in_project_overview</td> <td></td> </tr><tr> <td>finished_flag</td> <td>False</td> </tr><tr> <td>experimental_goals</td> <td></td> </tr><tr> <td>grant</td> <td></td> </tr><tr> <td>start_date</td> <td></td> </tr><tr> <td>end_date</td> <td></td> </tr><tr> <td>experimental_results</td> <td></td> </tr><tr> <td>xmlcomments</td> <td></td> </tr>\n", " </tbody>\n", " </table>\n", " " ], "text/plain": [ - "<pybis.pybis.Sample at 0x7f52d7cfb630>" + "<pybis.property.PropertyHolder at 0x7f768c61a748>" ] }, - "execution_count": 11, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "s_new" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## working with datasets" + "ex = o.get_experiments(type='DEFAULT_EXPERIMENT')[0]\n", + "ex.p" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ex.set_properties({'FINISHED_FLAG': False})" + ] + }, + { + "cell_type": "raw", + "metadata": { + "collapsed": false + }, + "source": [ + "e = o.new_experiment('/MATERIALS/YEASTS', 'my_experiment0815', 'DEFAULT_EXPERIMENT', properties={\"Name\":\"blast\"})" + ] + }, + { + "cell_type": "code", + "execution_count": 44, "metadata": { "collapsed": true }, "outputs": [], + "source": [ + "e3.delete(reason='it was just an experiment')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## working with samples" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "from pybis import Openbis\n", "o = Openbis(url='https://localhost:8443', verify_certificates=False)" @@ -3188,10 +2898,9 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": { - "collapsed": false, - "scrolled": true + "collapsed": false }, "outputs": [ { @@ -3206,28 +2915,28 @@ " </tr>\n", " </thead>\n", " <tbody>\n", - " <tr> <td>code</td> <td>HOW_WONDERFUL</td> </tr><tr> <td>permId</td> <td>20160630105304285-81</td> </tr><tr> <td>identifier</td> <td>/VERMEUL/HOW_WONDERFUL</td> </tr><tr> <td>type</td> <td>UNKNOWN</td> </tr><tr> <td>parents</td> <td>[]</td> </tr><tr> <td>children</td> <td>[]</td> </tr><tr> <td>space</td> <td>VERMEUL</td> </tr><tr> <td>project</td> <td></td> </tr><tr> <td>experiment</td> <td>/VERMEUL/VERMEUL_PROJECT/MY_EXPERIMENT4</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>['CREATE_JSON_TAG']</td> </tr><tr><td>attachments</td><td>Bildschirmfoto 2016-10-14 um 23.01.06.png</td></tr>\n", + " <tr> <td>code</td> <td>YEA34</td> </tr><tr> <td>permId</td> <td>20161108230958839-384</td> </tr><tr> <td>identifier</td> <td>/MY_NEW_SPACE/YEA34</td> </tr><tr> <td>type</td> <td>YEAST</td> </tr><tr> <td>space</td> <td>MY_NEW_SPACE</td> </tr><tr> <td>experiment</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_SPECIAL_EXPERIMENT</td> </tr><tr> <td>tags</td> <td>['uno']</td> </tr><tr><td>attachments</td><td>Bildschirmfoto 2016-12-20 um 10.47.26.png<br/>testfile</td></tr>\n", " </tbody>\n", " </table>\n", " " ], "text/plain": [ - "<pybis.pybis.Sample at 0x7fd4d7b3e5f8>" + "<pybis.pybis.Sample at 0x7f768c77d080>" ] }, - "execution_count": 17, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "s = o.get_sample('/VERMEUL/HOW_WONDERFUL')\n", - "s" + "sa = o.get_sample('/MY_NEW_SPACE/YEA34')\n", + "sa" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 5, "metadata": { "collapsed": false }, @@ -3240,199 +2949,99 @@ " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", - " <th>code</th>\n", - " <th>properties</th>\n", - " <th>type</th>\n", - " <th>sample</th>\n", - " <th>registrationDate</th>\n", - " <th>modificationDate</th>\n", + " <th>fileName</th>\n", + " <th>title</th>\n", + " <th>description</th>\n", + " <th>version</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", - " <td>20160721002154012-269</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_NOTEBOOK</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-07-21 00:22:11</td>\n", - " <td>2016-11-06 22:59:21</td>\n", + " <td>Bildschirmfoto 2016-12-20 um 10.47.26.png</td>\n", + " <td>nocheinfoto</td>\n", + " <td>None</td>\n", + " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", - " <td>20160721002157457-270</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_RESULT</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-07-21 00:22:11</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>20160721002157457-271</td>\n", - " <td>{'DESCRIPTION': 'ave, some!', 'NAME': 'my_deli...</td>\n", - " <td>JUPYTER_CONTAINER</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-07-21 00:22:11</td>\n", - " <td>2016-11-21 00:51:47</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>20160721005440169-272</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_NOTEBOOK</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-07-21 00:54:51</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>20160721005441238-273</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_RESULT</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-07-21 00:54:51</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>5</th>\n", - " <td>20160818092513667-332</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_NOTEBOOK</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-08-18 09:25:15</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>6</th>\n", - " <td>20160818092513706-333</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_RESULT</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-08-18 09:25:15</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>7</th>\n", - " <td>20160826103944978-335</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_NOTEBOOK</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-08-26 10:39:46</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>8</th>\n", - " <td>20160826103945007-336</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_RESULT</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-08-26 10:39:46</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>9</th>\n", - " <td>20160929145446441-365</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_NOTEBOOK</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-09-29 14:54:47</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>10</th>\n", - " <td>20160929145446460-366</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_RESULT</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-09-29 14:54:47</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>11</th>\n", - " <td>20160929145446460-367</td>\n", - " <td>{'DESCRIPTION': 'should be aa4da9f7', 'NAME': ...</td>\n", - " <td>JUPYTER_CONTAINER</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-09-29 14:54:47</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>12</th>\n", - " <td>20161121005146312-396</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_NOTEBOOK</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-11-21 00:51:47</td>\n", - " <td>2016-11-21 00:53:59</td>\n", - " </tr>\n", - " <tr>\n", - " <th>13</th>\n", - " <td>20161121005146338-397</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_RESULT</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-11-21 00:51:47</td>\n", - " <td>2016-11-21 00:53:59</td>\n", - " </tr>\n", - " <tr>\n", - " <th>14</th>\n", - " <td>20161121005146338-398</td>\n", - " <td>{'DESCRIPTION': 'some meaningful description',...</td>\n", - " <td>JUPYTER_CONTAINER</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-11-21 00:51:47</td>\n", - " <td>2016-11-21 00:53:59</td>\n", - " </tr>\n", - " <tr>\n", - " <th>15</th>\n", - " <td>20161121005357966-399</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_NOTEBOOK</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-11-21 00:53:59</td>\n", - " <td>2016-11-21 00:53:59</td>\n", - " </tr>\n", - " <tr>\n", - " <th>16</th>\n", - " <td>20161121005357983-400</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_RESULT</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-11-21 00:53:59</td>\n", - " <td>2016-11-21 00:53:59</td>\n", + " <td>testfile</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>1</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ - "<pybis.pybis.Things at 0x7fd4d7b5e0f0>" + " fileName title description version\n", + "0 Bildschirmfoto 2016-12-20 um 10.47.26.png nocheinfoto None 1\n", + "1 testfile None None 1" ] }, - "execution_count": 21, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "s.get_datasets()" + "sa.get_attachments()" ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "ds = s.get_datasets()[11]" + "sa.add_attachment('testfile')" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample successfully updated\n" + ] + } + ], + "source": [ + "sa.save()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "localhost/20161108230958839-384/Bildschirmfoto 2016-12-20 um 10.47.26.png\n", + "localhost/20161108230958839-384/testfile\n" + ] + } + ], + "source": [ + "sa.download_attachments()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, "metadata": { "collapsed": false }, @@ -3445,249 +3054,177 @@ " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", - " <th>isDirectory</th>\n", - " <th>pathInDataSet</th>\n", - " <th>fileSize</th>\n", - " <th>crc32Checksum</th>\n", + " <th>identifier</th>\n", + " <th>permId</th>\n", + " <th>experiment</th>\n", + " <th>sample_type</th>\n", + " <th>registrator</th>\n", + " <th>registrationDate</th>\n", + " <th>modifier</th>\n", + " <th>modificationDate</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", - " <td>True</td>\n", - " <td>original</td>\n", - " <td>-1</td>\n", - " <td>0</td>\n", + " <td>/VERMEUL/ANOTHER_SAMPLE1</td>\n", + " <td>20160706001644827-208</td>\n", + " <td>None</td>\n", + " <td>UNKNOWN</td>\n", + " <td></td>\n", + " <td>2016-07-06 00:16:45</td>\n", + " <td></td>\n", + " <td>2016-11-09 10:18:18</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", - " <td>True</td>\n", - " <td>original/JUPYTER_NOTEBOOk</td>\n", - " <td>-1</td>\n", - " <td>0</td>\n", - " </tr>\n", - " <tr>\n", + " <td>/VERMEUL/BLAJLSD</td>\n", + " <td>20160630111949369-89</td>\n", + " <td>None</td>\n", + " <td>UNKNOWN</td>\n", + " <td></td>\n", + " <td>2016-06-30 17:19:49</td>\n", + " <td></td>\n", + " <td>2016-06-30 17:19:49</td>\n", + " </tr>\n", + " <tr>\n", " <th>2</th>\n", - " <td>False</td>\n", - " <td>original/JUPYTER_NOTEBOOk/pybis demo.ipynb</td>\n", - " <td>77667</td>\n", - " <td>1fae7b5a</td>\n", + " <td>/MY_NEW_SPACE/CHILD_OF_SAMPLE1</td>\n", + " <td>20160705234504004-206</td>\n", + " <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4</td>\n", + " <td>UNKNOWN</td>\n", + " <td></td>\n", + " <td>2016-07-05 23:45:04</td>\n", + " <td></td>\n", + " <td>2016-10-07 01:05:46</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", - " <td>True</td>\n", - " <td>original/JUPYTER_RESULT</td>\n", - " <td>-1</td>\n", - " <td>0</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>20160630105304285-81</td>\n", + " <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4</td>\n", + " <td>UNKNOWN</td>\n", + " <td></td>\n", + " <td>2016-06-30 16:53:04</td>\n", + " <td></td>\n", + " <td>2016-11-21 00:53:59</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", - " <td>False</td>\n", - " <td>original/JUPYTER_RESULT/PLATE1_A01_06_GFP.jpg</td>\n", - " <td>426229</td>\n", - " <td>aa4da9f7</td>\n", + " <td>/VERMEUL/OH_WIE_SCHOEN_IST_PANAMA</td>\n", + " <td>20160630110733527-86</td>\n", + " <td>None</td>\n", + " <td>UNKNOWN</td>\n", + " <td></td>\n", + " <td>2016-06-30 17:07:34</td>\n", + " <td></td>\n", + " <td>2016-07-06 00:11:45</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>/VERMEUL/OH_WIE_SCHOEN_IST_PANAMA3</td>\n", + " <td>20160630112720553-90</td>\n", + " <td>None</td>\n", + " <td>UNKNOWN</td>\n", + " <td></td>\n", + " <td>2016-06-30 17:27:21</td>\n", + " <td></td>\n", + " <td>2016-06-30 17:27:21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6</th>\n", + " <td>/VERMEUL/OH_WIE_SCHOEN_IST_PANAMA5</td>\n", + " <td>20160706231053756-211</td>\n", + " <td>None</td>\n", + " <td>UNKNOWN</td>\n", + " <td></td>\n", + " <td>2016-07-06 23:10:54</td>\n", + " <td></td>\n", + " <td>2016-07-06 23:10:54</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7</th>\n", + " <td>/VERMEUL/YET_ANOTHER_SAMPLE1</td>\n", + " <td>20160706002555747-209</td>\n", + " <td>None</td>\n", + " <td>UNKNOWN</td>\n", + " <td></td>\n", + " <td>2016-07-06 00:25:56</td>\n", + " <td></td>\n", + " <td>2016-11-09 10:18:18</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ - " isDirectory pathInDataSet fileSize \\\n", - "0 True original -1 \n", - "1 True original/JUPYTER_NOTEBOOk -1 \n", - "2 False original/JUPYTER_NOTEBOOk/pybis demo.ipynb 77667 \n", - "3 True original/JUPYTER_RESULT -1 \n", - "4 False original/JUPYTER_RESULT/PLATE1_A01_06_GFP.jpg 426229 \n", - "\n", - " crc32Checksum \n", - "0 0 \n", - "1 0 \n", - "2 1fae7b5a \n", - "3 0 \n", - "4 aa4da9f7 " + "<pybis.pybis.Things at 0x7f2e99f1a518>" ] }, - "execution_count": 23, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ds.get_files()" + "o.get_samples(space='VERMEUL', tags=['*'])" ] }, { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Files downloaded to: localhost/20160929145446460-367\n" - ] - } - ], + "cell_type": "markdown", + "metadata": {}, "source": [ - "ds.download()" + "get the first sample of the above list and just display the basic attributes" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 11, "metadata": { - "collapsed": false, - "scrolled": true + "collapsed": false }, "outputs": [ { "data": { "text/html": [ - "<div>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>code</th>\n", - " <th>properties</th>\n", - " <th>type</th>\n", - " <th>sample</th>\n", - " <th>registrationDate</th>\n", - " <th>modificationDate</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>20160721002154012-269</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_NOTEBOOK</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-07-21 00:22:11</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>20160721002157457-270</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_RESULT</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-07-21 00:22:11</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>20160721002157457-271</td>\n", - " <td>{'NAME': 'my_delightful_analysis', 'DESCRIPTIO...</td>\n", - " <td>JUPYTER_CONTAINER</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-07-21 00:22:11</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>3</th>\n", - " <td>20160721005440169-272</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_NOTEBOOK</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-07-21 00:54:51</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>4</th>\n", - " <td>20160721005441238-273</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_RESULT</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-07-21 00:54:51</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>5</th>\n", - " <td>20160818092513667-332</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_NOTEBOOK</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-08-18 09:25:15</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>6</th>\n", - " <td>20160818092513706-333</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_RESULT</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-08-18 09:25:15</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>7</th>\n", - " <td>20160826103944978-335</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_NOTEBOOK</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-08-26 10:39:46</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>8</th>\n", - " <td>20160826103945007-336</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_RESULT</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-08-26 10:39:46</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>9</th>\n", - " <td>20160929145446441-365</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_NOTEBOOK</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-09-29 14:54:47</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>10</th>\n", - " <td>20160929145446460-366</td>\n", - " <td>{}</td>\n", - " <td>JUPYTER_RESULT</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-09-29 14:54:47</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>11</th>\n", - " <td>20160929145446460-367</td>\n", - " <td>{'NAME': 'crc32 check', 'DESCRIPTION': 'should...</td>\n", - " <td>JUPYTER_CONTAINER</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-09-29 14:54:47</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>YEA21</td> </tr><tr> <td>permId</td> <td>20161025010638912-382</td> </tr><tr> <td>identifier</td> <td>/MY_NEW_SPACE/YEA21</td> </tr><tr> <td>type</td> <td>YEAST</td> </tr><tr> <td>space</td> <td>MY_NEW_SPACE</td> </tr><tr> <td>experiment</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_SPECIAL_EXPERIMENT</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>['do', 'fa', 're']</td> </tr><tr><td>attachments</td><td></td></tr>\n", + " </tbody>\n", + " </table>\n", + " " ], "text/plain": [ - "<pybis.pybis.Things at 0x7fbfcab4dbe0>" + "<pybis.pybis.Sample at 0x7f8ff54adb38>" ] }, - "execution_count": 17, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "o.get_datasets(withSamples='20160630105304285-81')" + "s = o.get_sample('/MY_NEW_SPACE/YEA21')\n", + "s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Show all the properties assigned to this sample type:" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "metadata": { "collapsed": false }, @@ -3695,67 +3232,115 @@ { "data": { "text/html": [ - "<div>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th></th>\n", - " <th>code</th>\n", - " <th>properties</th>\n", - " <th>type</th>\n", - " <th>sample</th>\n", - " <th>registrationDate</th>\n", - " <th>modificationDate</th>\n", + "\n", + "<p>SampleType: <b>YEAST</b>\n", + "<p>description: </p>\n", + " <p>Code autogenerated: True</p>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>property</th>\n", + " <th>label</th>\n", + " <th>description</th>\n", + " <th>dataType</th>\n", + " <th>mandatory</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>20160721002157457-271</td>\n", - " <td>{'DESCRIPTION': 'ave, some!', 'NAME': 'my_deli...</td>\n", - " <td>JUPYTER_CONTAINER</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-07-21 00:22:11</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " <tr>\n", - " <th>1</th>\n", - " <td>20160817175233002-331</td>\n", - " <td>{'DESCRIPTION': 'done!', 'NAME': 'demo_analysis'}</td>\n", - " <td>JUPYTER_CONTAINER</td>\n", - " <td>/VERMEUL/MON_160718_181654</td>\n", - " <td>2016-08-17 17:52:35</td>\n", - " <td>2016-10-05 12:46:43</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2</th>\n", - " <td>20160929145446460-367</td>\n", - " <td>{'DESCRIPTION': 'should be aa4da9f7', 'NAME': ...</td>\n", - " <td>JUPYTER_CONTAINER</td>\n", - " <td>/VERMEUL/HOW_WONDERFUL</td>\n", - " <td>2016-09-29 14:54:47</td>\n", - " <td>2016-11-06 22:59:21</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" + " <tr> <th>name</th> <td>Name</td> <td>Name</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>show_in_project_overview</th> <td>Show in project overview</td> <td>Show in project overview</td> <td>BOOLEAN</td> <td>False</td> </tr><tr> <th>owner</th> <td>Owner</td> <td>Who produced/owned the sample</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>owner_number</th> <td>Owner number</td> <td>Owner number</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>genetic_modification</th> <td>Genetic modifications</td> <td>Genetic modifications composed by the Plasmid ancestors</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>genetic_background</th> <td>Genetic Background</td> <td>Genetic background of the yeast strain</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>mating_type</th> <td>Mating Type</td> <td>Mating type or ploidy of the yeast strain</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>background-specific_markers</th> <td>Background-specific markers</td> <td>Background-specific markers available in the strain for further genetic modifications</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>common_markers</th> <td>Common markers</td> <td>Common markers available in the strain for further genetic modifications</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>endogenous_plasmid</th> <td>Endogenous 2micron plasmid in yeast</td> <td>Presence of an endogenous cir 2micron plasmid</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>origin</th> <td>Origin</td> <td>How the strain/cell line was produced</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>strain_check</th> <td>Strain Check</td> <td>Check done to verify the modifications introduced in the strain</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>source</th> <td>Source</td> <td>Source from where the construct/strain/cell line obtained or purchased, if it was not produced in the lab</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>publication</th> <td>Publication</td> <td>Publication from where the information was first found OR technical sheet given by the manufacturer</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>notes</th> <td>Notes</td> <td>Notes regarding the dataset</td> <td>MULTILINE_VARCHAR</td> <td>False</td> </tr><tr> <th>xmlcomments</th> <td>Comments List</td> <td>Several comments can be added by different users</td> <td>XML</td> <td>False</td> </tr><tr> <th>annotations_state</th> <td>Annotations State</td> <td>Annotations State</td> <td>XML</td> <td>False</td> </tr><tr> <th>storage_names</th> <td>Storage Name</td> <td>Storage Name</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>storage_row</th> <td>Storage Row</td> <td>Storage Row</td> <td>INTEGER</td> <td>False</td> </tr><tr> <th>storage_column</th> <td>Storage Column</td> <td>Storage Column</td> <td>INTEGER</td> <td>False</td> </tr><tr> <th>storage_box_name</th> <td>Storage Box Name</td> <td>Storage Box Name</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>storage_box_size</th> <td>Storage Box Size</td> <td>Storage Box Size</td> <td>CONTROLLEDVOCABULARY</td> <td>False</td> </tr><tr> <th>storage_user</th> <td>Storage User Id</td> <td>Storage User Id</td> <td>VARCHAR</td> <td>False</td> </tr><tr> <th>storage_position</th> <td>Storage Position</td> <td>Storage Position</td> <td>VARCHAR</td> <td>False</td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " ], "text/plain": [ - "<pybis.pybis.Things at 0x7f7cfb9d8860>" + "<pybis.property.PropertyAssignments at 0x7f8ff55c26d8>" ] }, - "execution_count": 9, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "o.get_datasets(type='JUPYTER_CONTAINER')" + "s.type" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "however, you still can check whether the sample type corresponds to a certain string:" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.type == 'YEAST'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "get experiment related to that sample" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>MY_SPECIAL_EXPERIMENT</td> </tr><tr> <td>permId</td> <td>20161121013609807-402</td> </tr><tr> <td>identifier</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_SPECIAL_EXPERIMENT</td> </tr><tr> <td>type</td> <td>UNKNOWN</td> </tr><tr> <td>space</td> <td></td> </tr><tr> <td>project</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT</td> </tr><tr> <td>tags</td> <td>[]</td> </tr><tr><td>attachments</td><td></td></tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Experiment at 0x7f2e99ceee48>" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.experiment" + ] + }, + { + "cell_type": "code", + "execution_count": 9, "metadata": { "collapsed": false }, @@ -3764,45 +3349,58 @@ "data": { "text/html": [ "\n", + "<p>ExperimentType: <b>UNKNOWN</b>\n", + "<p>description: Unknown</p>\n", + " \n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", - " <th>attribute</th>\n", - " <th>value</th>\n", + " <th>property</th>\n", + " <th>label</th>\n", + " <th>description</th>\n", + " <th>dataType</th>\n", + " <th>mandatory</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", - " <tr> <th>permId</th> <td>20160721002157457-271</td> </tr>\n", - " <tr> <th>properties</th> <td>{'DESCRIPTION': 'ave, some!', 'NAME': 'my_delightful_analysis'}</td> </tr>\n", - " <tr> <th>tags</th> <td>[]</td> </tr>\n", - " </tbody>\n", - "</table>\n", + " \n", + " </tbody>\n", + " </table>\n", " " ], "text/plain": [ - "<pybis.pybis.DataSet at 0x7fd4d7b65588>" + "<pybis.property.PropertyAssignments at 0x7f2e99cf6ef0>" ] }, - "execution_count": 29, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ds = o.get_dataset('20160721002157457-271')\n", - "ds" + "s.experiment.type" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { - "collapsed": false, - "scrolled": true + "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "dss = o.get_datasets(type='JUPYTER_CONTAINER')" + "s.experiment.type == 'UNKNOWN'" ] }, { @@ -3814,110 +3412,1910 @@ "outputs": [ { "data": { - "text/plain": [ - "{'@id': 1,\n", - " '@type': 'as.dto.dataset.DataSet',\n", - " 'accessDate': 1479491589605,\n", - " 'children': [],\n", - " 'code': '20160929145446460-367',\n", - " 'components': None,\n", - " 'containers': [],\n", - " 'dataProducer': None,\n", - " 'dataProductionDate': None,\n", - " 'dataStore': {'@id': 14,\n", - " '@type': 'as.dto.datastore.DataStore',\n", - " 'code': 'DSS1',\n", - " 'downloadUrl': 'https://localhost:8444',\n", - " 'fetchOptions': {'@id': 15,\n", - " '@type': 'as.dto.datastore.fetchoptions.DataStoreFetchOptions',\n", - " 'cacheMode': 'NO_CACHE',\n", - " 'count': None,\n", - " 'from': None,\n", - " 'sort': None,\n", - " 'sortBy': None},\n", - " 'modificationDate': 1479681610594,\n", - " 'registrationDate': 1466761453065,\n", - " 'remoteUrl': 'https://127.0.0.1:8444'},\n", - " 'experiment': {'@id': 16,\n", - " '@type': 'as.dto.experiment.Experiment',\n", - " 'attachments': None,\n", - " 'code': 'MY_EXPERIMENT4',\n", - " 'dataSets': None,\n", - " 'fetchOptions': {'@id': 17,\n", - " '@type': 'as.dto.experiment.fetchoptions.ExperimentFetchOptions',\n", - " 'attachments': None,\n", - " 'cacheMode': 'NO_CACHE',\n", - " 'count': None,\n", - " 'dataSets': None,\n", - " 'from': None,\n", - " 'history': None,\n", - " 'materialProperties': None,\n", - " 'modifier': None,\n", - " 'project': None,\n", - " 'properties': None,\n", - " 'registrator': None,\n", - " 'samples': None,\n", - " 'sort': None,\n", - " 'sortBy': None,\n", - " 'tags': None,\n", - " 'type': None},\n", - " 'history': None,\n", - " 'identifier': {'@id': 19,\n", - " '@type': 'as.dto.experiment.id.ExperimentIdentifier',\n", - " 'identifier': '/VERMEUL/VERMEUL_PROJECT/MY_EXPERIMENT4'},\n", - " 'materialProperties': None,\n", - " 'modificationDate': 1479686038994,\n", - " 'modifier': None,\n", - " 'permId': {'@id': 18,\n", - " '@type': 'as.dto.experiment.id.ExperimentPermId',\n", - " 'permId': '20160924020719018-358'},\n", - " 'project': None,\n", - " 'properties': None,\n", - " 'registrationDate': 1474675639018,\n", - " 'registrator': None,\n", - " 'samples': None,\n", - " 'tags': None,\n", - " 'type': None},\n", - " 'fetchOptions': {'@id': 2,\n", - " '@type': 'as.dto.dataset.fetchoptions.DataSetFetchOptions',\n", - " 'cacheMode': 'NO_CACHE',\n", - " 'children': {'@id': 10,\n", - " '@type': 'as.dto.dataset.fetchoptions.DataSetFetchOptions',\n", - " 'cacheMode': 'NO_CACHE',\n", - " 'children': None,\n", - " 'components': None,\n", - " 'containers': None,\n", - " 'count': None,\n", - " 'dataStore': None,\n", - " 'experiment': None,\n", - " 'from': None,\n", - " 'history': None,\n", - " 'linkedData': None,\n", - " 'materialProperties': None,\n", - " 'modifier': None,\n", - " 'parents': None,\n", - " 'physicalData': None,\n", - " 'properties': None,\n", - " 'registrator': None,\n", - " 'sample': None,\n", - " 'sort': None,\n", - " 'sortBy': None,\n", - " 'tags': None,\n", - " 'type': None},\n", - " 'components': None,\n", - " 'containers': {'@id': 11,\n", - " '@type': 'as.dto.dataset.fetchoptions.DataSetFetchOptions',\n", - " 'cacheMode': 'NO_CACHE',\n", - " 'children': None,\n", - " 'components': None,\n", - " 'containers': None,\n", - " 'count': None,\n", - " 'dataStore': None,\n", - " 'experiment': None,\n", - " 'from': None,\n", - " 'history': None,\n", - " 'linkedData': None,\n", - " 'materialProperties': None,\n", + "text/html": [ + "<div>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>code</th>\n", + " <th>space</th>\n", + " <th>registrator</th>\n", + " <th>registrationDate</th>\n", + " <th>modifier</th>\n", + " <th>modificationDate</th>\n", + " <th>permid</th>\n", + " <th>identifier</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>BACTERIA</td>\n", + " <td>MATERIALS</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td>20160624054751885-33</td>\n", + " <td>/MATERIALS/BACTERIA</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>CELL_LINES</td>\n", + " <td>MATERIALS</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td>20160624054751885-34</td>\n", + " <td>/MATERIALS/CELL_LINES</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>FLIES</td>\n", + " <td>MATERIALS</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td>20160624054751885-35</td>\n", + " <td>/MATERIALS/FLIES</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>PLASMIDS</td>\n", + " <td>MATERIALS</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td>20160624054751885-37</td>\n", + " <td>/MATERIALS/PLASMIDS</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>POLYNUCLEOTIDES</td>\n", + " <td>MATERIALS</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td>20160624054751885-38</td>\n", + " <td>/MATERIALS/POLYNUCLEOTIDES</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>PROJECT_ONE</td>\n", + " <td>VERMEUL</td>\n", + " <td></td>\n", + " <td>2017-01-15 22:01:58</td>\n", + " <td></td>\n", + " <td>2017-01-15 22:02:59</td>\n", + " <td>20170115220158336-410</td>\n", + " <td>/VERMEUL/PROJECT_ONE</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6</th>\n", + " <td>PROTOCOLS</td>\n", + " <td>METHODS</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td>20160624054751885-39</td>\n", + " <td>/METHODS/PROTOCOLS</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7</th>\n", + " <td>REAGENTS</td>\n", + " <td>MATERIALS</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td>20160624054751885-32</td>\n", + " <td>/MATERIALS/REAGENTS</td>\n", + " </tr>\n", + " <tr>\n", + " <th>8</th>\n", + " <td>VERMEUL_PROJECT</td>\n", + " <td>MY_NEW_SPACE</td>\n", + " <td></td>\n", + " <td>2016-09-26 23:47:55</td>\n", + " <td></td>\n", + " <td>2017-01-09 01:33:37</td>\n", + " <td>20160926234755430-363</td>\n", + " <td>/MY_NEW_SPACE/VERMEUL_PROJECT</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9</th>\n", + " <td>YEASTS</td>\n", + " <td>MATERIALS</td>\n", + " <td></td>\n", + " <td>2016-06-24 11:47:52</td>\n", + " <td></td>\n", + " <td>2016-10-04 22:04:57</td>\n", + " <td>20160624054751885-36</td>\n", + " <td>/MATERIALS/YEASTS</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + "<pybis.pybis.Things at 0x7f2e99b5d9b0>" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "o.get_projects()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>YEA21</td> </tr><tr> <td>permId</td> <td>20161025010638912-382</td> </tr><tr> <td>identifier</td> <td>/MY_NEW_SPACE/YEA21</td> </tr><tr> <td>type</td> <td>YEAST</td> </tr><tr> <td>space</td> <td>MY_NEW_SPACE</td> </tr><tr> <td>experiment</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_SPECIAL_EXPERIMENT</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>['do', 'fa', 're']</td> </tr><tr><td>attachments</td><td></td></tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Sample at 0x7f8ff55c2e10>" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hier in setattr: project = VERMEUL_PROJECT\n" + ] + }, + { + "ename": "TypeError", + "evalue": "'Project' object is not subscriptable", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m<ipython-input-7-d22ee2dbc203>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ms\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mproject\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'VERMEUL_PROJECT'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32m/vagrant_python/PyBis/pybis/pybis.py\u001b[0m in \u001b[0;36m__setattr__\u001b[1;34m(self, name, value)\u001b[0m\n\u001b[0;32m 2477\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"These are methods which should not be overwritten\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2478\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2479\u001b[1;33m \u001b[0msetattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__dict__\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'a'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mname\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2480\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2481\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_repr_html_\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m/vagrant_python/PyBis/pybis/pybis.py\u001b[0m in \u001b[0;36m__setattr__\u001b[1;34m(self, name, value)\u001b[0m\n\u001b[0;32m 2297\u001b[0m \u001b[1;31m# fetch object in openBIS, make sure it actually exists\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2298\u001b[0m \u001b[0mobj\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_openbis\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"get_\"\u001b[0m\u001b[1;33m+\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2299\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__dict__\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'_'\u001b[0m\u001b[1;33m+\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mobj\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'identifier'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2300\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2301\u001b[0m \u001b[1;31m# mark attribute as modified, if it's an existing entity\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mTypeError\u001b[0m: 'Project' object is not subscriptable" + ] + } + ], + "source": [ + "s.project = 'VERMEUL_PROJECT'" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample successfully updated\n" + ] + } + ], + "source": [ + "s.save()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s = o.get_sample('/MY_NEW_SPACE/YEA21')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.p.mating_type = 'A'" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s.props.show_in_project_overview = True" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'YEAST'" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.type" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.identifier\n", + "s.code\n", + "s.type\n", + "s.space\n", + "s.tags" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "list all the properties (p) of a given sample" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>vocabulary term</th>\n", + " <th>label</th>\n", + " <th>description</th>\n", + " <th>vocabulary</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>URA3_HIS3_LEU2</td> <td>ura3- his3- leu2-</td> <td>The strain is a uracil, histidine, and leucine auxotroph</td> <td>COMMON_MARKERS</td> </tr><tr> <td>URA3_HIS3</td> <td>ura3- his3-</td> <td>The strain is a uracil and histidine auxotroph</td> <td>COMMON_MARKERS</td> </tr><tr> <td>URA3_LEU2</td> <td>ura3- leu2-</td> <td>The strain is a uracil and leucine auxotroph</td> <td>COMMON_MARKERS</td> </tr><tr> <td>URA3</td> <td>ura3-</td> <td>The strain is a uracil auxotroph</td> <td>COMMON_MARKERS</td> </tr><tr> <td>HIS3_LEU2</td> <td>his3- leu2-</td> <td>The strain is a histidine and leucine auxotroph</td> <td>COMMON_MARKERS</td> </tr><tr> <td>HIS3</td> <td>his3-</td> <td>The strain is a histidine auxotroph</td> <td>COMMON_MARKERS</td> </tr><tr> <td>LEU2</td> <td>leu2-</td> <td>The strain is a leucine auxotroph</td> <td>COMMON_MARKERS</td> </tr><tr> <td>NONE</td> <td>none</td> <td>The strain does not have any background-specific auxotrophies</td> <td>COMMON_MARKERS</td> </tr><tr> <td>UNKNOWN</td> <td>unknown</td> <td>No information about the auxotrophy</td> <td>COMMON_MARKERS</td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Vocabulary at 0x7f6b74235358>" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.props.common_markers_" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "fetch just a single property: sample.p.«property_name»" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'comments: publication in my office'" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.p.publication" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "if you don't know the controlled vocabulary of a property, just add an underscore and press shift-enter:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>vocabulary term</th>\n", + " <th>label</th>\n", + " <th>description</th>\n", + " <th>vocabulary</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>A</td> <td>a</td> <td>None</td> <td>MATING_TYPE</td> </tr><tr> <td>ALPHA</td> <td>alpha</td> <td>None</td> <td>MATING_TYPE</td> </tr><tr> <td>DIPLOID</td> <td>diploid</td> <td>None</td> <td>MATING_TYPE</td> </tr><tr> <td>UNKNOWN</td> <td>unknown</td> <td>None</td> <td>MATING_TYPE</td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Vocabulary at 0x7efe6097d828>" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.p.mating_type_" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "pybis will automatically check the controlled vocabulary when you assign a value to it:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "ValueError", + "evalue": "Value must be one of these terms: A, ALPHA, DIPLOID, UNKNOWN", + "output_type": "error", + "traceback": [ + "\u001b[1;31m\u001b[0m", + "\u001b[1;31mValueError\u001b[0mTraceback (most recent call last)", + "\u001b[1;32m<ipython-input-24-d4d5f6a664c5>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ms\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmating_type\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'invalid content'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32m/vagrant_python/PyBis/pybis/pybis.py\u001b[0m in \u001b[0;36m__setattr__\u001b[1;34m(self, name, value)\u001b[0m\n\u001b[0;32m 2122\u001b[0m \u001b[0mvoc\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_openbis\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_terms\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2123\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mvalue\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mvoc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mterms\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2124\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Value must be one of these terms: \"\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;34m\", \"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvoc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mterms\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2125\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0mdata_type\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;34m'INTEGER'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'BOOLEAN'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'VARCHAR'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2126\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mcheck_datatype\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata_type\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mValueError\u001b[0m: Value must be one of these terms: A, ALPHA, DIPLOID, UNKNOWN" + ] + } + ], + "source": [ + "s.p.mating_type = 'invalid content'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "some properties are of a general type. Again, you can list it by adding an underscore _ :" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'Storage Column': 'INTEGER'}" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.p.storage_column_" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "### alter a sample and its properties" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from pybis import Openbis\n", + "o = Openbis(url='https://localhost:8443', verify_certificates=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>FLY45</td> </tr><tr> <td>permId</td> <td>20170104000847172-405</td> </tr><tr> <td>identifier</td> <td>/MATERIALS/FLY45</td> </tr><tr> <td>type</td> <td>FLY</td> </tr><tr> <td>parents</td> <td>['/MATERIALS/FLY43']</td> </tr><tr> <td>children</td> <td>[]</td> </tr><tr> <td>space</td> <td>MATERIALS</td> </tr><tr> <td>experiment</td> <td>/MATERIALS/YEASTS/MY_EXPERIMENT007</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>[]</td> </tr><tr><td>attachments</td><td>openBIS JSON-RPC.md</td></tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Sample at 0x7faa0c089828>" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sample = o.get_sample('/MATERIALS/FLY45')\n", + "sample" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>property</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>name</td> <td>a fly45 which is the child of fly43</td> </tr><tr> <td>show_in_project_overview</td> <td>False</td> </tr><tr> <td>owner</td> <td></td> </tr><tr> <td>owner_number</td> <td></td> </tr><tr> <td>genetic_modification</td> <td></td> </tr><tr> <td>fly_genotype</td> <td></td> </tr><tr> <td>associated_gene</td> <td></td> </tr><tr> <td>markers</td> <td></td> </tr><tr> <td>origin</td> <td></td> </tr><tr> <td>strain_check</td> <td></td> </tr><tr> <td>source</td> <td></td> </tr><tr> <td>mating_partners</td> <td></td> </tr><tr> <td>publication</td> <td></td> </tr><tr> <td>notes</td> <td></td> </tr><tr> <td>xmlcomments</td> <td><root>\n", + " <commentEntry date=\"1483484927350\" person=\"vermeul\"/>\n", + "</root>\n", + "</td> </tr><tr> <td>annotations_state</td> <td>�(undefined)</td> </tr><tr> <td>storage_names</td> <td></td> </tr><tr> <td>storage_row</td> <td></td> </tr><tr> <td>storage_column</td> <td></td> </tr><tr> <td>storage_box_name</td> <td></td> </tr><tr> <td>storage_box_size</td> <td></td> </tr><tr> <td>storage_user</td> <td></td> </tr><tr> <td>storage_position</td> <td></td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.PropertyHolder at 0x7faa0c089a20>" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sample.props" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>identifier</th>\n", + " <th>permId</th>\n", + " <th>experiment</th>\n", + " <th>sample_type</th>\n", + " <th>registrator</th>\n", + " <th>registrationDate</th>\n", + " <th>modifier</th>\n", + " <th>modificationDate</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>/MATERIALS/FLY43</td>\n", + " <td>20170104000802333-404</td>\n", + " <td>/MATERIALS/YEASTS/MY_EXPERIMENT007</td>\n", + " <td>FLY</td>\n", + " <td></td>\n", + " <td>2017-01-04 00:08:02</td>\n", + " <td></td>\n", + " <td>2017-01-04 00:08:47</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + "<pybis.pybis.Things at 0x7faa0c0de940>" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sample.get_parents()" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'sample' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m\u001b[0m", + "\u001b[1;31mNameError\u001b[0mTraceback (most recent call last)", + "\u001b[1;32m<ipython-input-65-066328cddbd3>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0msample\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_datasets\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mNameError\u001b[0m: name 'sample' is not defined" + ] + } + ], + "source": [ + "sample.get_datasets()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Files downloaded to: localhost/20170104003608559-406\n" + ] + } + ], + "source": [ + "sample.get_datasets()[0].download()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "localhost/20170104003608559-406\r\n", + "localhost/20170104003608559-406/original\r\n", + "localhost/20170104003608559-406/original/jupyter_useage_lab.zip\r\n" + ] + } + ], + "source": [ + "!find localhost/20170104003608559-406" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "s_up = o.get_sample('/VERMEUL/MY_WONDERFUL_SAMPLE_NAME')" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "s_up.space = 'ANOTHER_SPACE_NAME'" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "s_up.tags = ['one', 'two', 'three']" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>identifier</td> <td>/VERMEUL/MY_WONDERFUL_SAMPLE_NAME</td> </tr><tr> <td>permId</td> <td>20160720225637704-262</td> </tr><tr> <td>code</td> <td>MY_WONDERFUL_SAMPLE_NAME</td> </tr><tr> <td>type</td> <td>UNKNOWN</td> </tr><tr> <td>space</td> <td>ANOTHER_SPACE_NAME</td> </tr><tr> <td>project</td> <td>None</td> </tr><tr> <td>experiment</td> <td></td> </tr><tr> <td>parents</td> <td>[]</td> </tr><tr> <td>children</td> <td>[]</td> </tr><tr> <td>tags</td> <td>['one', 'two', 'three']</td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Sample at 0x7efe60915668>" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s_up" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sample successfully updated\n" + ] + } + ], + "source": [ + "s_up.save()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### create a new sample" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from pybis import Openbis\n", + "o = Openbis(url='https://localhost:8443', verify_certificates=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Experiment\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>YEAST_COLLECTION_1</td> </tr><tr> <td>permId</td> <td>20160624054739283-9</td> </tr><tr> <td>identifier</td> <td>/MATERIALS/YEASTS/YEAST_COLLECTION_1</td> </tr><tr> <td>type</td> <td>MATERIALS</td> </tr><tr> <td>space</td> <td></td> </tr><tr> <td>project</td> <td>/MATERIALS/YEASTS</td> </tr><tr> <td>tags</td> <td>[]</td> </tr><tr><td>attachments</td><td></td></tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Experiment at 0x7f56f2f17b38>" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "o.get_experiments()[31]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "to create a new sample, the sampletype must be specified" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s_new = o.new_sample(type='YEAST', space='VERMEUL')" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td></td> </tr><tr> <td>permId</td> <td></td> </tr><tr> <td>identifier</td> <td></td> </tr><tr> <td>type</td> <td></td> </tr><tr> <td>parents</td> <td></td> </tr><tr> <td>children</td> <td></td> </tr><tr> <td>space</td> <td></td> </tr><tr> <td>experiment</td> <td></td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td></td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Sample at 0x7f8177455898>" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s_new" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s_new.delete('obsolete')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>MY_EXPERIMENT4</td> </tr><tr> <td>permId</td> <td>20160924020719018-358</td> </tr><tr> <td>identifier</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4</td> </tr><tr> <td>type</td> <td>DEFAULT_EXPERIMENT</td> </tr><tr> <td>space</td> <td></td> </tr><tr> <td>project</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT</td> </tr><tr> <td>tags</td> <td>['A_tag', 'another_tag', 'too_late', 'tre']</td> </tr><tr><td>attachments</td><td></td></tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Experiment at 0x7f10ecdadd30>" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "e = o.get_experiment('/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4')\n", + "e" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "controlled vocabulary: find out which terms are allowed by adding an underscore to the property." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>vocabulary term</th>\n", + " <th>label</th>\n", + " <th>description</th>\n", + " <th>vocabulary</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>CROSS</td> <td>cross</td> <td>The strain was produced by crossing two parent strains</td> <td>ORIGIN</td> </tr><tr> <td>TRANSFORMATION</td> <td>transformation</td> <td>The strain/ cell line was obtained by transformation</td> <td>ORIGIN</td> </tr><tr> <td>SPORULATION</td> <td>transformation sporulation</td> <td>The strain was obtained by sporulating a parent diploid strain</td> <td>ORIGIN</td> </tr><tr> <td>NEGATIVE_SELECTION</td> <td>negative selection</td> <td>The strain/cell line was obtained by negative selection</td> <td>ORIGIN</td> </tr><tr> <td>TRANSFECTION</td> <td>transfection</td> <td>The strain/cell line was obtained by transfection</td> <td>ORIGIN</td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Vocabulary at 0x7fbfcacd5a58>" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s_new.p.origin_" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "assigning a wrong value to a property will lead to an error:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "ValueError", + "evalue": "Value must be one of these terms: CROSS, TRANSFORMATION, SPORULATION, NEGATIVE_SELECTION, TRANSFECTION", + "output_type": "error", + "traceback": [ + "\u001b[1;31m\u001b[0m", + "\u001b[1;31mValueError\u001b[0mTraceback (most recent call last)", + "\u001b[1;32m<ipython-input-12-d9539d489991>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ms_new\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0morigin\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'crozz'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32m/vagrant_python/PyBis/pybis/pybis.py\u001b[0m in \u001b[0;36m__setattr__\u001b[1;34m(self, name, value)\u001b[0m\n\u001b[0;32m 2099\u001b[0m \u001b[0mvoc\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_openbis\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_terms\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2100\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mvalue\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mvoc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mterms\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2101\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Value must be one of these terms: \"\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;34m\", \"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvoc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mterms\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2102\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0mdata_type\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;34m'INTEGER'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'BOOLEAN'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'VARCHAR'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2103\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mcheck_datatype\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata_type\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mValueError\u001b[0m: Value must be one of these terms: CROSS, TRANSFORMATION, SPORULATION, NEGATIVE_SELECTION, TRANSFECTION" + ] + } + ], + "source": [ + "s_new.p.origin = 'crozz'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "s_new.p. + TAB autocompletes all available properties for that given sample type. To show the current attributes of our new sample just use this:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "s_new.p.mating_type = 'ALPHA'" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>identifier</td> <td>None</td> </tr><tr> <td>permId</td> <td>None</td> </tr><tr> <td>code</td> <td>None</td> </tr><tr> <td>type</td> <td>None</td> </tr><tr> <td>space</td> <td>VERMEUL</td> </tr><tr> <td>project</td> <td>None</td> </tr><tr> <td>experiment</td> <td>None</td> </tr><tr> <td>parents</td> <td>None</td> </tr><tr> <td>children</td> <td>None</td> </tr><tr> <td>tags</td> <td>None</td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Sample at 0x7f52d7cfb630>" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s_new" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## working with datasets" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from pybis import Openbis\n", + "o = Openbis(url='https://localhost:8443', verify_certificates=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>CHILD_OF_SAMPLE1</td> </tr><tr> <td>permId</td> <td>20160705234504004-206</td> </tr><tr> <td>identifier</td> <td>/MY_NEW_SPACE/CHILD_OF_SAMPLE1</td> </tr><tr> <td>type</td> <td>UNKNOWN</td> </tr><tr> <td>space</td> <td>MY_NEW_SPACE</td> </tr><tr> <td>experiment</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>['A_tag', 'due']</td> </tr><tr><td>attachments</td><td></td></tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Sample at 0x7f89bae953c8>" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "o.get_sample('/MY_NEW_SPACE/CHILD_OF_SAMPLE1')" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>MY_EXPERIMENT4</td> </tr><tr> <td>permId</td> <td>20160924020719018-358</td> </tr><tr> <td>identifier</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4</td> </tr><tr> <td>type</td> <td>DEFAULT_EXPERIMENT</td> </tr><tr> <td>space</td> <td></td> </tr><tr> <td>project</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT</td> </tr><tr> <td>tags</td> <td>['A_tag', 'another_tag', 'too_late', 'tre']</td> </tr><tr><td>attachments</td><td></td></tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Experiment at 0x7f2b0cbd14e0>" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.get_experiment()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>HOW_WONDERFUL</td> </tr><tr> <td>permId</td> <td>20160630105304285-81</td> </tr><tr> <td>identifier</td> <td>/MY_NEW_SPACE/HOW_WONDERFUL</td> </tr><tr> <td>type</td> <td>UNKNOWN</td> </tr><tr> <td>space</td> <td>MY_NEW_SPACE</td> </tr><tr> <td>experiment</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>['CREATE_JSON_TAG']</td> </tr><tr><td>attachments</td><td>Bildschirmfoto 2016-10-14 um 23.01.06.png</td></tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Sample at 0x7f89bae8bd30>" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s = o.get_sample('/MY_NEW_SPACE/HOW_WONDERFUL')\n", + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>code</th>\n", + " <th>properties</th>\n", + " <th>type</th>\n", + " <th>sample</th>\n", + " <th>registrationDate</th>\n", + " <th>modificationDate</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>20160721002154012-269</td>\n", + " <td>{}</td>\n", + " <td>JUPYTER_NOTEBOOK</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-07-21 00:22:11</td>\n", + " <td>2016-11-06 22:59:21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>20160721002157457-270</td>\n", + " <td>{}</td>\n", + " <td>JUPYTER_RESULT</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-07-21 00:22:11</td>\n", + " <td>2016-11-06 22:59:21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>20160721002157457-271</td>\n", + " <td>{'NAME': 'my_delightful_analysis', 'DESCRIPTIO...</td>\n", + " <td>JUPYTER_CONTAINER</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-07-21 00:22:11</td>\n", + " <td>2016-11-21 00:51:47</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>20160721005440169-272</td>\n", + " <td>{}</td>\n", + " <td>JUPYTER_NOTEBOOK</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-07-21 00:54:51</td>\n", + " <td>2016-11-06 22:59:21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>20160721005441238-273</td>\n", + " <td>{}</td>\n", + " <td>JUPYTER_RESULT</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-07-21 00:54:51</td>\n", + " <td>2016-11-06 22:59:21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5</th>\n", + " <td>20160818092513667-332</td>\n", + " <td>{}</td>\n", + " <td>JUPYTER_NOTEBOOK</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-08-18 09:25:15</td>\n", + " <td>2016-11-06 22:59:21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6</th>\n", + " <td>20160818092513706-333</td>\n", + " <td>{}</td>\n", + " <td>JUPYTER_RESULT</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-08-18 09:25:15</td>\n", + " <td>2016-11-06 22:59:21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7</th>\n", + " <td>20160826103944978-335</td>\n", + " <td>{}</td>\n", + " <td>JUPYTER_NOTEBOOK</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-08-26 10:39:46</td>\n", + " <td>2016-11-06 22:59:21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>8</th>\n", + " <td>20160826103945007-336</td>\n", + " <td>{}</td>\n", + " <td>JUPYTER_RESULT</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-08-26 10:39:46</td>\n", + " <td>2016-11-06 22:59:21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9</th>\n", + " <td>20160929145446441-365</td>\n", + " <td>{}</td>\n", + " <td>JUPYTER_NOTEBOOK</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-09-29 14:54:47</td>\n", + " <td>2016-11-06 22:59:21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>10</th>\n", + " <td>20160929145446460-366</td>\n", + " <td>{}</td>\n", + " <td>JUPYTER_RESULT</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-09-29 14:54:47</td>\n", + " <td>2016-11-06 22:59:21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>11</th>\n", + " <td>20160929145446460-367</td>\n", + " <td>{'NAME': 'crc32 check', 'DESCRIPTION': 'should...</td>\n", + " <td>JUPYTER_CONTAINER</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-09-29 14:54:47</td>\n", + " <td>2016-11-06 22:59:21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12</th>\n", + " <td>20161121005146312-396</td>\n", + " <td>{}</td>\n", + " <td>JUPYTER_NOTEBOOK</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-11-21 00:51:47</td>\n", + " <td>2016-11-21 00:53:59</td>\n", + " </tr>\n", + " <tr>\n", + " <th>13</th>\n", + " <td>20161121005146338-397</td>\n", + " <td>{}</td>\n", + " <td>JUPYTER_RESULT</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-11-21 00:51:47</td>\n", + " <td>2016-11-21 00:53:59</td>\n", + " </tr>\n", + " <tr>\n", + " <th>14</th>\n", + " <td>20161121005146338-398</td>\n", + " <td>{'NAME': 'my new data analysis', 'DESCRIPTION'...</td>\n", + " <td>JUPYTER_CONTAINER</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-11-21 00:51:47</td>\n", + " <td>2016-11-21 00:53:59</td>\n", + " </tr>\n", + " <tr>\n", + " <th>15</th>\n", + " <td>20161121005357966-399</td>\n", + " <td>{}</td>\n", + " <td>JUPYTER_NOTEBOOK</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-11-21 00:53:59</td>\n", + " <td>2016-11-21 00:53:59</td>\n", + " </tr>\n", + " <tr>\n", + " <th>16</th>\n", + " <td>20161121005357983-400</td>\n", + " <td>{}</td>\n", + " <td>JUPYTER_RESULT</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-11-21 00:53:59</td>\n", + " <td>2016-11-21 00:53:59</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + "<pybis.pybis.Things at 0x7f89bae89550>" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.get_datasets()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ds = s.get_datasets()[11]" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>20160929145446460-367</td> </tr><tr> <td>permId</td> <td>20160929145446460-367</td> </tr><tr> <td>type</td> <td>JUPYTER_CONTAINER</td> </tr><tr> <td>experiment</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4</td> </tr><tr> <td>sample</td> <td>/MY_NEW_SPACE/HOW_WONDERFUL</td> </tr><tr> <td>parents</td> <td>[]</td> </tr><tr> <td>children</td> <td>[]</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>[]</td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.DataSet at 0x7f89bae835f8>" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>isDirectory</th>\n", + " <th>pathInDataSet</th>\n", + " <th>fileSize</th>\n", + " <th>crc32Checksum</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>True</td>\n", + " <td>original</td>\n", + " <td>-1</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>True</td>\n", + " <td>original/JUPYTER_NOTEBOOk</td>\n", + " <td>-1</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>False</td>\n", + " <td>original/JUPYTER_NOTEBOOk/pybis demo.ipynb</td>\n", + " <td>77667</td>\n", + " <td>1fae7b5a</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>True</td>\n", + " <td>original/JUPYTER_RESULT</td>\n", + " <td>-1</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>False</td>\n", + " <td>original/JUPYTER_RESULT/PLATE1_A01_06_GFP.jpg</td>\n", + " <td>426229</td>\n", + " <td>aa4da9f7</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " isDirectory pathInDataSet fileSize \\\n", + "0 True original -1 \n", + "1 True original/JUPYTER_NOTEBOOk -1 \n", + "2 False original/JUPYTER_NOTEBOOk/pybis demo.ipynb 77667 \n", + "3 True original/JUPYTER_RESULT -1 \n", + "4 False original/JUPYTER_RESULT/PLATE1_A01_06_GFP.jpg 426229 \n", + "\n", + " crc32Checksum \n", + "0 0 \n", + "1 0 \n", + "2 1fae7b5a \n", + "3 0 \n", + "4 aa4da9f7 " + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds.get_files()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>pathInDataSet</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>original</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>original/JUPYTER_NOTEBOOk</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>original/JUPYTER_NOTEBOOk/pybis demo.ipynb</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>original/JUPYTER_RESULT</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>original/JUPYTER_RESULT/PLATE1_A01_06_GFP.jpg</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " pathInDataSet\n", + "0 original\n", + "1 original/JUPYTER_NOTEBOOk\n", + "2 original/JUPYTER_NOTEBOOk/pybis demo.ipynb\n", + "3 original/JUPYTER_RESULT\n", + "4 original/JUPYTER_RESULT/PLATE1_A01_06_GFP.jpg" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds.get_files()[['pathInDataSet']]" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Files downloaded to: localhost/20160929145446460-367\n" + ] + } + ], + "source": [ + "ds.download()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "ename": "TypeError", + "evalue": "get_datasets() got an unexpected keyword argument 'withSamples'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m\u001b[0m", + "\u001b[1;31mTypeError\u001b[0mTraceback (most recent call last)", + "\u001b[1;32m<ipython-input-3-1a1f42c5c6c5>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mo\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_datasets\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mwithSamples\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'20160630105304285-81'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m: get_datasets() got an unexpected keyword argument 'withSamples'" + ] + } + ], + "source": [ + "o.get_datasets(withSamples='20160630105304285-81')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>code</th>\n", + " <th>properties</th>\n", + " <th>type</th>\n", + " <th>sample</th>\n", + " <th>registrationDate</th>\n", + " <th>modificationDate</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>20160721002157457-271</td>\n", + " <td>{'NAME': 'my_delightful_analysis', 'DESCRIPTIO...</td>\n", + " <td>JUPYTER_CONTAINER</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-07-21 00:22:11</td>\n", + " <td>2016-11-21 00:51:47</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>20160817175233002-331</td>\n", + " <td>{'NAME': 'demo_analysis', 'DESCRIPTION': 'done!'}</td>\n", + " <td>JUPYTER_CONTAINER</td>\n", + " <td>/VERMEUL/MON_160718_181654</td>\n", + " <td>2016-08-17 17:52:35</td>\n", + " <td>2016-10-05 12:46:43</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>20160929145446460-367</td>\n", + " <td>{'NAME': 'crc32 check', 'DESCRIPTION': 'should...</td>\n", + " <td>JUPYTER_CONTAINER</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-09-29 14:54:47</td>\n", + " <td>2016-11-06 22:59:21</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>20161121005146338-398</td>\n", + " <td>{'NAME': 'my new data analysis', 'DESCRIPTION'...</td>\n", + " <td>JUPYTER_CONTAINER</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-11-21 00:51:47</td>\n", + " <td>2016-11-21 00:53:59</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + "<pybis.pybis.Things at 0x7fa301974c18>" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "o.get_datasets(type='JUPYTER_CONTAINER')" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>20160721002157457-271</td> </tr><tr> <td>permId</td> <td>20160721002157457-271</td> </tr><tr> <td>type</td> <td>JUPYTER_CONTAINER</td> </tr><tr> <td>experiment</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4</td> </tr><tr> <td>sample</td> <td>/MY_NEW_SPACE/HOW_WONDERFUL</td> </tr><tr> <td>parents</td> <td>[]</td> </tr><tr> <td>children</td> <td>['20160817175233002-331', '20161121005146338-398']</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>[]</td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.DataSet at 0x7f3140f570f0>" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds = o.get_dataset('20160721002157457-271')\n", + "ds" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [], + "source": [ + "dss = o.get_datasets(type='JUPYTER_CONTAINER')" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'@id': 1,\n", + " '@type': 'as.dto.dataset.DataSet',\n", + " 'accessDate': 1479491589605,\n", + " 'children': [],\n", + " 'code': '20160929145446460-367',\n", + " 'components': None,\n", + " 'containers': [],\n", + " 'dataProducer': None,\n", + " 'dataProductionDate': None,\n", + " 'dataStore': {'@id': 14,\n", + " '@type': 'as.dto.datastore.DataStore',\n", + " 'code': 'DSS1',\n", + " 'downloadUrl': 'https://localhost:8444',\n", + " 'fetchOptions': {'@id': 15,\n", + " '@type': 'as.dto.datastore.fetchoptions.DataStoreFetchOptions',\n", + " 'cacheMode': 'NO_CACHE',\n", + " 'count': None,\n", + " 'from': None,\n", + " 'sort': None,\n", + " 'sortBy': None},\n", + " 'modificationDate': 1479681610594,\n", + " 'registrationDate': 1466761453065,\n", + " 'remoteUrl': 'https://127.0.0.1:8444'},\n", + " 'experiment': {'@id': 16,\n", + " '@type': 'as.dto.experiment.Experiment',\n", + " 'attachments': None,\n", + " 'code': 'MY_EXPERIMENT4',\n", + " 'dataSets': None,\n", + " 'fetchOptions': {'@id': 17,\n", + " '@type': 'as.dto.experiment.fetchoptions.ExperimentFetchOptions',\n", + " 'attachments': None,\n", + " 'cacheMode': 'NO_CACHE',\n", + " 'count': None,\n", + " 'dataSets': None,\n", + " 'from': None,\n", + " 'history': None,\n", + " 'materialProperties': None,\n", + " 'modifier': None,\n", + " 'project': None,\n", + " 'properties': None,\n", + " 'registrator': None,\n", + " 'samples': None,\n", + " 'sort': None,\n", + " 'sortBy': None,\n", + " 'tags': None,\n", + " 'type': None},\n", + " 'history': None,\n", + " 'identifier': {'@id': 19,\n", + " '@type': 'as.dto.experiment.id.ExperimentIdentifier',\n", + " 'identifier': '/VERMEUL/VERMEUL_PROJECT/MY_EXPERIMENT4'},\n", + " 'materialProperties': None,\n", + " 'modificationDate': 1479686038994,\n", + " 'modifier': None,\n", + " 'permId': {'@id': 18,\n", + " '@type': 'as.dto.experiment.id.ExperimentPermId',\n", + " 'permId': '20160924020719018-358'},\n", + " 'project': None,\n", + " 'properties': None,\n", + " 'registrationDate': 1474675639018,\n", + " 'registrator': None,\n", + " 'samples': None,\n", + " 'tags': None,\n", + " 'type': None},\n", + " 'fetchOptions': {'@id': 2,\n", + " '@type': 'as.dto.dataset.fetchoptions.DataSetFetchOptions',\n", + " 'cacheMode': 'NO_CACHE',\n", + " 'children': {'@id': 10,\n", + " '@type': 'as.dto.dataset.fetchoptions.DataSetFetchOptions',\n", + " 'cacheMode': 'NO_CACHE',\n", + " 'children': None,\n", + " 'components': None,\n", + " 'containers': None,\n", + " 'count': None,\n", + " 'dataStore': None,\n", + " 'experiment': None,\n", + " 'from': None,\n", + " 'history': None,\n", + " 'linkedData': None,\n", + " 'materialProperties': None,\n", + " 'modifier': None,\n", + " 'parents': None,\n", + " 'physicalData': None,\n", + " 'properties': None,\n", + " 'registrator': None,\n", + " 'sample': None,\n", + " 'sort': None,\n", + " 'sortBy': None,\n", + " 'tags': None,\n", + " 'type': None},\n", + " 'components': None,\n", + " 'containers': {'@id': 11,\n", + " '@type': 'as.dto.dataset.fetchoptions.DataSetFetchOptions',\n", + " 'cacheMode': 'NO_CACHE',\n", + " 'children': None,\n", + " 'components': None,\n", + " 'containers': None,\n", + " 'count': None,\n", + " 'dataStore': None,\n", + " 'experiment': None,\n", + " 'from': None,\n", + " 'history': None,\n", + " 'linkedData': None,\n", + " 'materialProperties': None,\n", " 'modifier': None,\n", " 'parents': None,\n", " 'physicalData': None,\n", @@ -4110,18 +5508,483 @@ " 'type': None}" ] }, - "execution_count": 12, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dss[2].data" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>isDirectory</th>\n", + " <th>pathInDataSet</th>\n", + " <th>fileSize</th>\n", + " <th>crc32Checksum</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>True</td>\n", + " <td>original</td>\n", + " <td>-1</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>True</td>\n", + " <td>original/JUPYTER_NOTEBOOk</td>\n", + " <td>-1</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>False</td>\n", + " <td>original/JUPYTER_NOTEBOOk/pybis demo.ipynb</td>\n", + " <td>77667</td>\n", + " <td>1fae7b5a</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>True</td>\n", + " <td>original/JUPYTER_RESULT</td>\n", + " <td>-1</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>False</td>\n", + " <td>original/JUPYTER_RESULT/PLATE1_A01_06_GFP.jpg</td>\n", + " <td>426229</td>\n", + " <td>aa4da9f7</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " isDirectory pathInDataSet fileSize \\\n", + "0 True original -1 \n", + "1 True original/JUPYTER_NOTEBOOk -1 \n", + "2 False original/JUPYTER_NOTEBOOk/pybis demo.ipynb 77667 \n", + "3 True original/JUPYTER_RESULT -1 \n", + "4 False original/JUPYTER_RESULT/PLATE1_A01_06_GFP.jpg 426229 \n", + "\n", + " crc32Checksum \n", + "0 0 \n", + "1 0 \n", + "2 1fae7b5a \n", + "3 0 \n", + "4 aa4da9f7 " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "files = ds.get_files()\n", + "files[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Files downloaded to: localhost/20160929145446460-367\n" + ] + } + ], + "source": [ + "ds.download()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "localhost/20160929145446460-367\r\n", + "localhost/20160929145446460-367/original\r\n", + "localhost/20160929145446460-367/original/JUPYTER_RESULT\r\n", + "localhost/20160929145446460-367/original/JUPYTER_RESULT/PLATE1_A01_06_GFP.jpg\r\n", + "localhost/20160929145446460-367/original/JUPYTER_NOTEBOOk\r\n", + "localhost/20160929145446460-367/original/JUPYTER_NOTEBOOk/pybis demo.ipynb\r\n" + ] + } + ], + "source": [ + "!find localhost/20160929145446460-367" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'@id': 1,\n", + " '@type': 'FileInfoDssDTO',\n", + " 'crc32Checksum': 1397688417,\n", + " 'fileSize': '209715200',\n", + " 'isDirectory': False,\n", + " 'pathInDataSet': 'original/JUPYTER_RESULT/large_testfile',\n", + " 'pathInListing': 'large_testfile'}]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds2 = o.get_dataset('20160721002157457-271')\n", + "ds2.get_file_list(start_folder='original/JUPYTER_RESULT/large_testfile')" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Files downloaded to: localhost/20160721002157457-271\n" + ] + } + ], + "source": [ + "ds2.download('original/JUPYTER_RESULT/large_testfile')" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Files downloaded to: localhost/20160721002157457-271\n" + ] + } + ], + "source": [ + "ds2.download()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## upload data to openBIS\n", + "The pybis data ingestion service «jupyter-uploader-api» in the openBIS instance is needed in order to work. Files are first uploaded to session workspace, then the ingestion service is activated which in turn registers 3 datasets:\n", + "- a JUPYTER_CONTAINER containing:\n", + "- JUPYTER_NOTEBOOK (containing the notebook files)\n", + "- JUPYTER_RESULTS (containing any result files)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>20160721002157457-271</td> </tr><tr> <td>permId</td> <td>20160721002157457-271</td> </tr><tr> <td>type</td> <td>JUPYTER_CONTAINER</td> </tr><tr> <td>experiment</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4</td> </tr><tr> <td>sample</td> <td>/MY_NEW_SPACE/HOW_WONDERFUL</td> </tr><tr> <td>parents</td> <td>[]</td> </tr><tr> <td>children</td> <td>['20160817175233002-331', '20161121005146338-398']</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>[]</td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.DataSet at 0x7f3140f3dd30>" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds = o.get_dataset('20160721002157457-271')\n", + "ds" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>YEA34</td> </tr><tr> <td>permId</td> <td>20161108230958839-384</td> </tr><tr> <td>identifier</td> <td>/MY_NEW_SPACE/YEA34</td> </tr><tr> <td>type</td> <td>YEAST</td> </tr><tr> <td>space</td> <td>MY_NEW_SPACE</td> </tr><tr> <td>experiment</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_SPECIAL_EXPERIMENT</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>[]</td> </tr><tr><td>attachments</td><td>Bildschirmfoto 2016-12-20 um 10.47.26.png</td></tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Sample at 0x7f89bae33d30>" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "o.new_analysis(\n", + " name='minimal', \n", + " sample = s\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Dataset registration successful'" + ] + }, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "dss[2].data" + "o.new_analysis(\n", + " name='my new data analysis', \n", + " description='some meaningful description',\n", + " sample = s,\n", + " notebook_files=['pybis demo.ipynb'],\n", + " result_files=['PLATE1_A01_06_GFP.jpg'],\n", + " parents = [ds]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*TODO*: attach analysis to an experiment, not to a sample (usually there are a lot of datasets and samples, but only a few analyses per experiment)" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from pybis import Openbis\n", + "o = Openbis(url='https://localhost:8443', verify_certificates=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>20160721002157457-271</td> </tr><tr> <td>permId</td> <td>20160721002157457-271</td> </tr><tr> <td>type</td> <td>JUPYTER_CONTAINER</td> </tr><tr> <td>experiment</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4</td> </tr><tr> <td>sample</td> <td>/MY_NEW_SPACE/HOW_WONDERFUL</td> </tr><tr> <td>parents</td> <td>[]</td> </tr><tr> <td>children</td> <td>['20160817175233002-331', '20161121005146338-398']</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>[]</td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.DataSet at 0x7f3140f49cf8>" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds = o.get_dataset('20160721002157457-271')\n", + "ds" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'@id': 22,\n", + " '@type': 'as.dto.experiment.id.ExperimentIdentifier',\n", + " 'identifier': '/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4'}" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds.data['experiment']['identifier']" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ds.experiment = e" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'/MATERIALS/YEASTS/MY_EXPERIMENT007'" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "e.identifier" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'@id': 10,\n", + " '@type': 'as.dto.experiment.id.ExperimentIdentifier',\n", + " 'identifier': '/MATERIALS/YEASTS/MY_EXPERIMENT007',\n", + " 'isModified': True}" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds.a._experiment" + ] + }, + { + "cell_type": "code", + "execution_count": 9, "metadata": { "collapsed": false }, @@ -4158,9 +6021,9 @@ " <tr>\n", " <th>2</th>\n", " <td>False</td>\n", - " <td>original/JUPYTER_NOTEBOOk/pybis demo.ipynb</td>\n", - " <td>77667</td>\n", - " <td>1fae7b5a</td>\n", + " <td>original/JUPYTER_NOTEBOOk/pybis playground loc...</td>\n", + " <td>45250</td>\n", + " <td>5dff257f</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", @@ -4170,30 +6033,163 @@ " <td>0</td>\n", " </tr>\n", " <tr>\n", - " <th>4</th>\n", - " <td>False</td>\n", - " <td>original/JUPYTER_RESULT/PLATE1_A01_06_GFP.jpg</td>\n", - " <td>426229</td>\n", - " <td>aa4da9f7</td>\n", + " <th>4</th>\n", + " <td>False</td>\n", + " <td>original/JUPYTER_RESULT/large_testfile</td>\n", + " <td>209715200</td>\n", + " <td>534f0861</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "</div>" + ], + "text/plain": [ + " isDirectory pathInDataSet fileSize \\\n", + "0 True original -1 \n", + "1 True original/JUPYTER_NOTEBOOk -1 \n", + "2 False original/JUPYTER_NOTEBOOk/pybis playground loc... 45250 \n", + "3 True original/JUPYTER_RESULT -1 \n", + "4 False original/JUPYTER_RESULT/large_testfile 209715200 \n", + "\n", + " crc32Checksum \n", + "0 0 \n", + "1 0 \n", + "2 5dff257f \n", + "3 0 \n", + "4 534f0861 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds.get_files()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>HOW_WONDERFUL</td> </tr><tr> <td>permId</td> <td>20160630105304285-81</td> </tr><tr> <td>identifier</td> <td>/MY_NEW_SPACE/HOW_WONDERFUL</td> </tr><tr> <td>type</td> <td>UNKNOWN</td> </tr><tr> <td>parents</td> <td>[]</td> </tr><tr> <td>children</td> <td>[]</td> </tr><tr> <td>space</td> <td>MY_NEW_SPACE</td> </tr><tr> <td>experiment</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>['CREATE_JSON_TAG']</td> </tr><tr><td>attachments</td><td>Bildschirmfoto 2016-10-14 um 23.01.06.png</td></tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Sample at 0x7feecae980f0>" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds.get_sample()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>MY_EXPERIMENT4</td> </tr><tr> <td>permId</td> <td>20160924020719018-358</td> </tr><tr> <td>identifier</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4</td> </tr><tr> <td>type</td> <td>DEFAULT_EXPERIMENT</td> </tr><tr> <td>space</td> <td></td> </tr><tr> <td>project</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT</td> </tr><tr> <td>tags</td> <td>['A_tag', 'another_tag', 'too_late', 'tre']</td> </tr><tr><td>attachments</td><td></td></tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Experiment at 0x7feeb6890cf8>" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds.get_experiment()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>code</th>\n", + " <th>properties</th>\n", + " <th>type</th>\n", + " <th>sample</th>\n", + " <th>registrationDate</th>\n", + " <th>modificationDate</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>20160817175233002-331</td>\n", + " <td>{'NAME': 'demo_analysis', 'DESCRIPTION': 'done!'}</td>\n", + " <td>JUPYTER_CONTAINER</td>\n", + " <td>/VERMEUL/MON_160718_181654</td>\n", + " <td>2016-08-17 17:52:35</td>\n", + " <td>2016-10-05 12:46:43</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>20161121005146338-398</td>\n", + " <td>{'NAME': 'my new data analysis', 'DESCRIPTION'...</td>\n", + " <td>JUPYTER_CONTAINER</td>\n", + " <td>/MY_NEW_SPACE/HOW_WONDERFUL</td>\n", + " <td>2016-11-21 00:51:47</td>\n", + " <td>2016-11-21 00:53:59</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ - " isDirectory pathInDataSet fileSize \\\n", - "0 True original -1 \n", - "1 True original/JUPYTER_NOTEBOOk -1 \n", - "2 False original/JUPYTER_NOTEBOOk/pybis demo.ipynb 77667 \n", - "3 True original/JUPYTER_RESULT -1 \n", - "4 False original/JUPYTER_RESULT/PLATE1_A01_06_GFP.jpg 426229 \n", - "\n", - " crc32Checksum \n", - "0 0 \n", - "1 0 \n", - "2 1fae7b5a \n", - "3 0 \n", - "4 aa4da9f7 " + "<pybis.pybis.Things at 0x7feeb68907b8>" ] }, "execution_count": 5, @@ -4202,134 +6198,170 @@ } ], "source": [ - "files = ds.get_files()\n", - "files[0]" + "ds.get_children()" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Files downloaded to: localhost/20160929145446460-367\n" - ] + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "ds.download()" + "from pybis import Openbis\n", + "o = Openbis(url='https://localhost:8443', verify_certificates=False)\n", + "o.is_token_valid()" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 25, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "localhost/20160929145446460-367\r\n", - "localhost/20160929145446460-367/original\r\n", - "localhost/20160929145446460-367/original/JUPYTER_RESULT\r\n", - "localhost/20160929145446460-367/original/JUPYTER_RESULT/PLATE1_A01_06_GFP.jpg\r\n", - "localhost/20160929145446460-367/original/JUPYTER_NOTEBOOk\r\n", - "localhost/20160929145446460-367/original/JUPYTER_NOTEBOOk/pybis demo.ipynb\r\n" - ] - } - ], + "outputs": [], "source": [ - "!find localhost/20160929145446460-367" + "ds = o.get_dataset('20160721002157457-271')" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>20160721002157457-271</td> </tr><tr> <td>permId</td> <td>20160721002157457-271</td> </tr><tr> <td>type</td> <td>JUPYTER_CONTAINER</td> </tr><tr> <td>experiment</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4</td> </tr><tr> <td>sample</td> <td>/MY_NEW_SPACE/HOW_WONDERFUL</td> </tr><tr> <td>parents</td> <td>[]</td> </tr><tr> <td>children</td> <td>['20160817175233002-331', '20161121005146338-398']</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>[]</td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], "text/plain": [ - "[{'@id': 1,\n", - " '@type': 'FileInfoDssDTO',\n", - " 'crc32Checksum': 1397688417,\n", - " 'fileSize': '209715200',\n", - " 'isDirectory': False,\n", - " 'pathInDataSet': 'original/JUPYTER_RESULT/large_testfile',\n", - " 'pathInListing': 'large_testfile'}]" + "<pybis.pybis.DataSet at 0x7f89bae27e10>" ] }, - "execution_count": 10, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ds2 = o.get_dataset('20160721002157457-271')\n", - "ds2.get_file_list(start_folder='original/JUPYTER_RESULT/large_testfile')" + "ds" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Files downloaded to: localhost/20160721002157457-271\n" - ] + "data": { + "text/plain": [ + "{'@id': 26,\n", + " '@type': 'as.dto.sample.id.SampleIdentifier',\n", + " 'identifier': '/MY_NEW_SPACE/HOW_WONDERFUL'}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "ds2.download('original/JUPYTER_RESULT/large_testfile')" + "ds.a.__dict__['_sample']" ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Files downloaded to: localhost/20160721002157457-271\n" - ] + "data": { + "text/plain": [ + "{'@id': 22,\n", + " '@type': 'as.dto.experiment.id.ExperimentIdentifier',\n", + " 'identifier': '/MY_NEW_SPACE/VERMEUL_PROJECT/MY_EXPERIMENT4'}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "ds2.download()" + "ds.a.__dict__['_experiment']" ] }, { - "cell_type": "markdown", - "metadata": {}, + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td>YEA34</td> </tr><tr> <td>permId</td> <td>20161108230958839-384</td> </tr><tr> <td>identifier</td> <td>/MY_NEW_SPACE/YEA34</td> </tr><tr> <td>type</td> <td>YEAST</td> </tr><tr> <td>space</td> <td>MY_NEW_SPACE</td> </tr><tr> <td>experiment</td> <td>/MY_NEW_SPACE/VERMEUL_PROJECT/MY_SPECIAL_EXPERIMENT</td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td>[]</td> </tr><tr><td>attachments</td><td>Bildschirmfoto 2016-12-20 um 10.47.26.png</td></tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], + "text/plain": [ + "<pybis.pybis.Sample at 0x7f89bae33d30>" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "## upload data to openBIS\n", - "The pybis data ingestion service «jupyter-uploader-api» in the openBIS instance is needed in order to work. Files are first uploaded to session workspace, then the ingestion service is activated which in turn registers 3 datasets:\n", - "- a JUPYTER_CONTAINER containing:\n", - "- JUPYTER_NOTEBOOK (containing the notebook files)\n", - "- JUPYTER_RESULTS (containing any result files)" + "s = o.get_sample('/MY_NEW_SPACE/YEA34')\n", + "s" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 28, "metadata": { "collapsed": false }, @@ -4338,70 +6370,124 @@ "data": { "text/html": [ "\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>attribute</th>\n", - " <th>value</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr> <th>permId</th> <td>20160721002157457-271</td> </tr>\n", - " <tr> <th>properties</th> <td>{'DESCRIPTION': 'ave, some!', 'NAME': 'my_delightful_analysis'}</td> </tr>\n", - " <tr> <th>tags</th> <td>[]</td> </tr>\n", - " </tbody>\n", - "</table>\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>property</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>name</td> <td></td> </tr><tr> <td>show_in_project_overview</td> <td>False</td> </tr><tr> <td>owner</td> <td></td> </tr><tr> <td>owner_number</td> <td></td> </tr><tr> <td>genetic_modification</td> <td></td> </tr><tr> <td>genetic_background</td> <td></td> </tr><tr> <td>mating_type</td> <td>DIPLOID</td> </tr><tr> <td>background-specific_markers</td> <td></td> </tr><tr> <td>common_markers</td> <td></td> </tr><tr> <td>endogenous_plasmid</td> <td></td> </tr><tr> <td>origin</td> <td></td> </tr><tr> <td>strain_check</td> <td></td> </tr><tr> <td>source</td> <td></td> </tr><tr> <td>publication</td> <td></td> </tr><tr> <td>notes</td> <td></td> </tr><tr> <td>xmlcomments</td> <td></td> </tr><tr> <td>annotations_state</td> <td></td> </tr><tr> <td>storage_names</td> <td></td> </tr><tr> <td>storage_row</td> <td></td> </tr><tr> <td>storage_column</td> <td></td> </tr><tr> <td>storage_box_name</td> <td></td> </tr><tr> <td>storage_box_size</td> <td></td> </tr><tr> <td>storage_user</td> <td></td> </tr><tr> <td>storage_position</td> <td></td> </tr>\n", + " </tbody>\n", + " </table>\n", " " ], "text/plain": [ - "<pybis.pybis.DataSet at 0x7efe60802d68>" + "<pybis.property.PropertyHolder at 0x7f89bae33fd0>" ] }, - "execution_count": 31, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ds = o.get_dataset('20160721002157457-271')\n", - "ds" + "s.props" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 25, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "ds_new = o.new_dataset(type='Attachment')" + ] + }, + { + "cell_type": "code", + "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { + "text/html": [ + "\n", + " <table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th>attribute</th>\n", + " <th>value</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr> <td>code</td> <td></td> </tr><tr> <td>permId</td> <td></td> </tr><tr> <td>type</td> <td>ATTACHMENT</td> </tr><tr> <td>experiment</td> <td></td> </tr><tr> <td>sample</td> <td>/MY_NEW_SPACE/YEA34</td> </tr><tr> <td>parents</td> <td></td> </tr><tr> <td>children</td> <td></td> </tr><tr> <td>container</td> <td></td> </tr><tr> <td>components</td> <td></td> </tr><tr> <td>tags</td> <td></td> </tr>\n", + " </tbody>\n", + " </table>\n", + " " + ], "text/plain": [ - "'Dataset registration successful'" + "<pybis.pybis.DataSet at 0x7f3140fb58d0>" ] }, - "execution_count": 4, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "o.new_analysis(\n", - " name='my new data analysis', \n", - " description='some meaningful description',\n", - " sample = s,\n", - " notebook_files=['pybis demo.ipynb'],\n", - " result_files=['PLATE1_A01_06_GFP.jpg'],\n", - " parents = [ds]\n", - ")" + "ds_new" ] }, { - "cell_type": "markdown", - "metadata": {}, + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ - "*TODO*: attach analysis to an experiment, not to a sample (usually there are a lot of datasets and samples, but only a few analyses per experiment)" + "ds_new.sample = s" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'NoneType' object is not subscriptable", + "output_type": "error", + "traceback": [ + "\u001b[1;31m\u001b[0m", + "\u001b[1;31mTypeError\u001b[0mTraceback (most recent call last)", + "\u001b[1;32m<ipython-input-31-16e14e3283ca>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mds_new\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfile_list\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32m/vagrant_python/PyBis/pybis/pybis.py\u001b[0m in \u001b[0;36mfile_list\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 1977\u001b[0m \"\"\"\n\u001b[0;32m 1978\u001b[0m \u001b[0mfiles\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1979\u001b[1;33m \u001b[1;32mfor\u001b[0m \u001b[0mfile\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_file_list\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrecursive\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1980\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mfile\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'isDirectory'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1981\u001b[0m \u001b[1;32mpass\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m/vagrant_python/PyBis/pybis/pybis.py\u001b[0m in \u001b[0;36mget_file_list\u001b[1;34m(self, recursive, start_folder)\u001b[0m\n\u001b[0;32m 2028\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2029\u001b[0m resp = requests.post(\n\u001b[1;32m-> 2030\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"dataStore\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"downloadUrl\"\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;34m'/datastore_server/rmi-dss-api-v1.json'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2031\u001b[0m \u001b[0mjson\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdumps\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrequest\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2032\u001b[0m \u001b[0mverify\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mopenbis\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mverify_certificates\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mTypeError\u001b[0m: 'NoneType' object is not subscriptable" + ] + } + ], + "source": [ + "ds_new.file_list()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { -- GitLab