Work done this week can be summarized as below.
1. Json output
Earlier it returns only html content. What if a user request data in json?
A user can request json content via API through http get request. The content type for this request is ‘*/*’ which can be considered as ‘application/json’. Otherwise if user wants to request through user interface, he/she will get the html content of the data. For this, first we need to find the mimetype of the request made.
mimetype = flask.request.headers.get('Accept')
I had already done this before in datagrepper project where i made a function request_wants_html which returns true if mimetype is “text/html”.
def request_wants_html(): best = flask.request.accept_mimetypes \ .best_match(['application/json', 'text/html', 'text/plain']) return best == 'text/html'
Then i had to convert the data which was file object into its json. I tried using inbuilt functions but they could not directly convert it into json. It took a lot of time to get through this problem. Then finally I serialized the data and converted it into its dict.
def JSONEncoder(messages): message_list = [] for message in messages: message_dict = dict( tar_file = message.tar_file, md5sum = message.md5sum, sha256sum = message.sha256sum, pkg_name = message.pkg_name, filename = message.filename, tar_sum = message.tar_sum, sha1sum = message.sha1sum ) message_list.append(message_dict) return message_list
2. Compare packages
This can be used to compare the packages and return the filenames different(or same) in two or more packages. I first approached this by creating a endpoint like this /compare/packages/{package1}/{package2}. By this way, i could only compare two packages. I discussed with pingou, he suggested to take input from user all the packages name and then comparing them. I read a few tutorials and found this of great help. I created a web form using Flask-WTF extension.
It returns the filenames common to all the packages. But today, pingou suggested me that user would be more interested to know the files that have changed when he/she wants to compare the different versions of the packages. Besides this, I have to create API for it.