Tuesday, June 26, 2012

Shipment Tracking and Proposal Sync

Last week I worked on making the shipment tracking work on a live instance. I deployed the working instance to appspot and I faced the same problems that I faced locally. The syncing did not work because of the missing program key. I am sure that a program is seeded because I use seed_db to seed the datastore. I select the program GSoC 2009 in /site/edit too if its available and sometimes the programs doesn’t even appear in /site/edit after multiple seeding too. I spent quite a lot time trying to figure out where the problem is but in vain. At last, I approached Madhu for help but we could not fix up any meeting as it was quite a busy week for him.
    Finally, I decided to work on proposal syncing and attack shipment tracking when Madhu is available. I spent most of my time studying how proposal syncing works and reading the relevant django docs for forms processing etc. First I tried to see if proposal syncing feature worked. When I visited the proposal submission page, I got an AttributeError in gsoc.views.proposal.ProposalPage stating that response_helper had no attribute useGDataJS. So, I just commented that line to see if there are no crashes. Proposal submission page loaded fine but “Sync With Google Documents” was disabled in the page. I could not find useGDataJS helper function in any of the patches given by Orcun. I guess I have to contact Orcun to know more about this function or figure it out myself. This pretty much sums up my work.

Melange Functional Testing

Hi,

This week i worked on creating the test scripts for  gci student registration, gci dashboard, gci leaderboard, gci about page, gsoc accepted organisation page. I also made few changes to base module melange_functional_actions.py, added a new method to login on melange using Google account in case functional test is exceuted against the melange instance hosted on App Engine. I was successfull in running test cases with nose. I can execute all the tests with $ bin/run-tests tests/functional. It picks all the test scripts and execute them one by one. I am currently in process of moving all the scripts from my repository on github to my soc functional_testing branch.

Now, I am planning to refine the test cases i have written so far and send them to Leo and list for review and suggestions. Next week i am planning to work on already written test cases and make them better.

Monday, June 25, 2012

Connection Module and Related Views

This week's work went towards finally implementing the connection module with the views I've been envisioning. I started off with two - ConnectionPage and ShowConnectionPage - to be replaced by OrgConnectionPage, UserConnectionPage, and ShowConnectionPage in order to divide up the logic between views and cut down on the (admittedly small) number of conditionals within these pages. You can find the updated model on the main repo, and also right here. Apologies to anybody who might get notifications of commits, I've pretty much been spamming them almost every time I do something substantial or interesting.

First let me start off by saying that I've made some adjustments to the ConnectionModel per Daniel's suggestion and a couple of my own design. The new method for determining the state of the connection relies on four boolean variables: user_mentor, user_org_admin, org_mentor, and org_org_admin. These little switches allow for easily determining the implied state and any promotions. I've also set the parent entity of this model to be the User instance from the org-user relationship and changed it so that the model contains the Profile instance for the User to make it easier to handle promotions and getting certain information in the ShowConnectionPage class.

OrgConnectionPage is fully working, allowing an org admin to initiate a connection between an organization that they are an admin for and a user, granting them the role of either org admin or mentor. Except for the fact that it won't show the ValidationErrors for the role checkboxes...still workin on that one. It will validate (I stole the existing link id cleaning methods for now), create a GSoCConnection entity, and post back onto itself.  The url configuration is pretty simple, just in the format of connect/sponsor/program/organization and you can get to it from the org admin dashboard by clicking on an organization under "My Organizations." I combined the two links for "Invite Mentor" and "Invite Org Admin" into "Start Connection," which I think will suffice until I come up with a more intuitive name. Within the view is a checkbox that allows you to pick either one or both roles to offer. Everybody likes screenshots, so here's a picture:




UserConnectionPage has been giving me a headache. It took me a while but I finally understand the URL configuration system (....I think)  and how it all fits into the big picture along with AccessChecker and RedirectHelper. It's giving me problems at the moment since my connect() method in AccessChecker requires a user keyword argument, and I'm linking it from the Apply class in gsoc/views/org_home which doesn't have the data I need and I'm not seeing a way to put it there. Once I figure that out though (most likely by harassing people on IRC), all I have to do is make a small change in the class's generate() method and it should be working.

The checkAccess() methods on both of these classes should be good to go, but it's likely that someone will point out something I missed and I'm going to feel like a moron. But it's an easy fix, so I'm not stressed out about that at the moment.

The notification module's connectionContext() method should also be very easy to whip together once I get the ShowConnectionPage working, it should just involve creating a template and finishing the rest of the method.

Speaking of ShowConnectionPage, I had this guy working for a little while. Originally I was redirecting to this page after a successful post in OrgConnectionPage and it was showing me everything I wanted to see, but I ended up not liking how it was working and the url configuration started to give me problems so I scrapped most of the work and will take it on this upcoming week. Right after I convince my friend dashboard.py to behave and show all of the GSoCConnection instances properly. Mario if you're reading this I'm probably going to try and track you down with Javascript questions! 

That's all for this week. I've got a couple of questions for the conference call tomorrow (the checkbox errors not showing up and making org_home cooperate for UserConnectionPage, if anyone wants to prepare :P) but if I can figure those out I'll have this fully working by the midterm evaluation.

Tuesday, June 19, 2012

Shipment Tracking and Data Syncing

Hi,

This week I spent time working on Syncing of shipment tracking data, available on admin dashboard with student shipment list which is available on student dashboard.  First I sorted out the consumer key and consumer key secret problem which were set to none, by creating an API access key for http://localhost:8080/ and then supplied them in respective fields in http://localhost:8080/site/edit page.  

And the whole week had been a great experience for learning by mistakes. I pushed a wrong commit “Change date format” in gsoc/views/trackings shipmenttracking branch and happened to mix up the commit messages of two patches “Change date format” and “Change worksheet id”  ‘.’ I learnt these situations can be avoided with extra carefulness  while pushing the branch to remote origin.

I also thought of changing the column names in soc.modules.gsoc.tasks.trackings and not to hardcore the worksheet id in spreadsheet link. A discussion with Madhu made me clear that since Google provides us data in the particular format and the code is written according to that so I need not think about that. So the shipment tracking and sync part has been integrated successfully to melange and this week I’ll be working on Proposal Sync and hoping that I’ll make it work by this weekend.

Melange Functional Testing

Hi,

This week i worked on developing test scripts for testing Profile Page and Search Page but i spent major part of this week on developing a script for loading and running these test scripts one by one. Initially i tried to run them with bin/run-tests in soc but i was not successful and faced a lot of issues so i made a new functional-run.py script for executing these test cases one by one in my local environment and the way i want them to run.

Options that i provided in this functional-run.py script:
(1) -r  for report format, whether you want result on console(default) or you want a html based report. If you give the option like this $ python functional-run.py -r "html", a result folder is created in the functional folder where all the test scripts are saved and then it pick up all the files whose name start with "test" and executes them one by one and finally a html based report is saved in functional/results folder.

(2) -v for virtual display, if you want to execute all the scripts in virtual display. when this option is provided script.  All the scripts are executed virtually and you will not see thier execution in firefox. you will only see the final result either on console or in result report depending upon the report format you had chosen.

Currently this script is only for executing functional tests in my local environment.

Monday, June 18, 2012

Planning and Bug Fixes

So this week really hasn't been as productive as I had been hoping it would be between a rather annoying bug in dashboard and a ludicrous amount of time at work. After implementing a less-than-optimal fix where I just manually store the name of the organization for a Connection for the getListData() query in dashboard.py (~line 1270), I have reached a point where:

  • Users and org admins can view Connections that they have initiated (e.g. if a user initiates a Connection, they can view it in their dashboard but the org admin cannot view it under "Requests for My Organizations")
  • The query for the user will actually fetch all GSoCConnection objects involving the User, but will not display them all so I'm assuming it's a Javascript problem
  • The above is true for the org admin side, but I don't thing that the org_admin_for property is being set correctly because it doesn't contain a full list of the organizations that the org admin is responsible for
  • If I had to guess, I'd say that the Javascript will likely be a problem as well once I figure out the above problem.
Given that this is a demo, I think that there are a bunch of changes I'd like to make and it would be counter-productive to spend a bunch of time fixing them. Instead, I think I'm going to try and combine all of the requirements into one module with ConnectionPage and ShowConnection views. Daniel and I have worked out some changes to the Connection module that will simplify the flow of the interaction. Plus, and doing so will give me the extra control I think I need. I have a design of the two views on a legal pad sitting next to me and can either scan them or whip up a Google doc (or Wiki on Google Code) to divulge the design if anyone would like to see it. In the meantime I think I'm going to put the dashboard fix on the back burner so that I can try to work on this connection view.

Tuesday, June 12, 2012

Melange Functional Testing

Hi,

This week i did a little bit reading on nose test runner and other articles on functional testing. I was travelling to my home town so i was not able to do much this week, though i have started work on creating test script for Profile Page.

I am learning a lot of new things and that makes me feel good. I am continuously making changes to base module to make it much better. I hope that in few days base module will be good enough to be accepted. As soon as this module will be accepted, i will start sending test scripts. Instead of using TC01 and TC02 for naming test data sheets. I am planning to give them more meaningful names like Gsoc_Student_Registration and Gsoc_Profile. Leo has reviewed my first patch and suggested few changes, i am currently in process of making those changes to make the base module much better. After Profile page, my plan is to create test script for Search page and Events & Timeline page.