-
Notifications
You must be signed in to change notification settings - Fork 7
Session 19: Practice 7

- Time: 2h
- Date: Wednesday, April-1st-2020
-
Goals:
- Practicing with JSON and the API REST
- Reading information from the Ensembl project
The goal of this practice is to develop a python application that reads 10 genes from the Ensembl database and perform some calculations on them: total number of bases, number of every base and its percentage and most frequent base
These are the genes that we want to get from the remote database: FRAT1, ADA, FXN, RNU6_269P, MIR633, TTTY4C, RBMY2YP, FGFR3, KDR, ANK2
This practice is guided. On every exercise we will implement new functionalities in our application
I recommend you to read again the information on the Session-4: The Ensembl genome browser

Recall that the ensembl database can be accessed in two ways. The first one is by means of a browser. We write the ensembl URL in the brower and we get a web page, provided by the emsembl server. This interface is meant for humans
The second one is an interface for applications. The applications can get objects directly from the server by means of its API REST. Therefore, the first step is to know this API: what objects can we get from the databse and what are the names we should use for accessing to that resources. These names are called endpoints
Here you can find the API REST of the ensembl project. You should have a look at it to get familiar with the terminology and names
Let's create our first application that receives information directly from a remote application
Go to the API REST of the ensembl project and try to find an endpoint for checking if the service is alive (try searching for ping)

Click on the ping endpoint. You will see the documentation. As a Engineer is your work to read all the provided information and understand how this endpoint works. I will help you a litlte bit

The name of the endpoint is info/ping and it should be accessed using the HTTP GET method. On the top right we can see all the formats in which the information can be received: json, xml and jsonp. We are using json
In the bottom there is an example on how to use this endpoint. Click on the given URL:

Let's analyze the URL:

It consist of three parts:
- The server name: rest.ensembl.org
- The endpoint name: /info/ping
- The endpoint parameters: content-type=application/json
The parameter content-type indicates the format in which the application wants to receive the data. In our case we should set it to "application/json", because we are using the json format
In the browser we can see that we have received one object, which has a property called "ping" and its values is 1. It means that the server is alive
Try to receive the information in another format, for example in XML:

Implement a python client, using the http.client module, for accesing to the ensembl's ping endpoint. It should print on the console the server name, the complete URL and a message telling the state of the server
- File: P7/EX01-ping.py
- Description:
The program should read the object provided by the server and store it in a variable called response. Then, it should check the response['ping'] property and print a message if it is equal to 1
This is what it should be printed on the console after executing the client:

Every sequence on the ensembl database has an identifier, called stable identified (id). If you want to get a gene, you can use the /sequence/id endpoint. You should pass the stable identifier as the first argument
As an example, the identifier for the SRCAP gene is ENSG00000080603
In this exercise you have to find the stable identifiers of the following genes: FRAT1, ADA, FXN, RNU6_269P, MIR633, TTTY4C, RBMY2YP, FGFR3, KDR, ANK2
- File: P7/EX02-gene-id.py
- Description: Create a dictionary called GENES that contains the name of the genes and their identifiers. The program should print all the entries in the dicctionary with their identifiers:

If you want to get, for example, the identifier for the FRAT1 gene, you use: GENES['FRAT1']
TODO
Extend the previous server for implementing the operation service. It should return the requested operation on the sequence introduced. There are three operation: Info about the sequence, its complement and its reverse . A response message with a page with the results of the operation is generated. It should include a link to the main page
- Server Filename: P6/Seq2-server.py
- HTML file: P6/form-4.html
This is how it should work:

The session is finished. Make sure, during this week, that everything in this list is checked!
- You have all the items of the session 16 checked!
- Your working repo contains the P6 Folder with the following files:
- Seq2-server.py
- Error.html
- form-1.html
- form-2 html
- form-3 html
- form-4 html
- All the previous files have been pushed to your remote Github repo
- Juan González-Gómez (Obijuan)

- Alvaro del Castillo. He designed and created the original content of this subject. Thanks a lot :-)

S0: Introduction
S1: Tools I
S2: Tools II
S3: Practicing with the tools
S8: Client-Server-1
S9: Client-Server-2
S10: Client-server-3
S11: Client-server-4
S12: HTTP protocol-1
S13: HTTP protocol-2
S14: HTTP module
S15: HTTP module
S16: HTML forms
S17: HTML forms