Switch to side-by-side view

--- a
+++ b/OSSEval/OSProject/ohloh.py
@@ -0,0 +1,153 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# Copyright 2014 Bitergium SLL
+
+import urllib2
+from xml.dom import minidom
+from utils import Configuration, xmlElements, Forges
+from OSSEval.utils import TrivialJSONEncoder 
+
+class OhlohProxy():
+    
+    def search_json(self, name):
+        a = TrivialJSONEncoder().encode(OhlohProxy.search(name))
+        return a
+
+    @staticmethod
+    def search(name):
+        page = 1
+        print "Ohloh search - " + name + " - page " + str(page)
+        url_ohloh = "https://www.ohloh.net/p.xml?api_key=" + Configuration.api_key + "&query=" + name + "&page="
+        response = urllib2.urlopen(url_ohloh + str(page))
+        xml = response.read()
+        xmldoc = minidom.parseString(xml)
+
+        items_available = xmlElements(xmldoc.getElementsByTagName('items_available')).firstValue()
+        status = xmlElements(xmldoc.getElementsByTagName('status')).firstValue()
+        project_list = []
+        while (status == 'success' and len(project_list) < min(Configuration.max_number_of_records, items_available)):
+            page = page + 1
+            print "Ohloh search - " + name + " - page " + str(page)
+            item_list = xmldoc.getElementsByTagName('project')
+            for s in item_list :
+                try:
+                    op = OhlohProject()
+                    op.id = xmlElements(s.getElementsByTagName('url_name')).firstValue()
+                    op.name = xmlElements(s.getElementsByTagName('name')).firstValue()
+                    op.description = xmlElements(s.getElementsByTagName('description')).firstValue()
+                    op.small_logo_url = xmlElements(s.getElementsByTagName('small_logo_url')).firstValue()
+                    op.homepage_url = xmlElements(s.getElementsByTagName('homepage_url')).firstValue()
+                    op.id_forge = Forges.OHLOH
+                    op.datasource_id = 0
+                    project_list.append(op)
+                    # s.getElementsByTagName('id')[0].localName
+                    # id
+                except Exception as ex:
+                    print str(ex)
+            response = urllib2.urlopen(url_ohloh + str(page))
+            xml = response.read()
+            xmldoc = minidom.parseString(xml)
+            status = xmldoc.getElementsByTagName('status')[0].firstChild.nodeValue
+        
+        return project_list
+
+    @staticmethod
+    def getProjectInfo(project_identifier):
+        url_ohloh = "http://www.ohloh.net/projects/" + project_identifier + ".xml?api_key=" + Configuration.api_key
+        response = urllib2.urlopen(url_ohloh)
+        xml = response.read()
+        xmldoc = minidom.parseString(xml)
+        info = {}
+        
+        status = xmlElements(xmldoc.getElementsByTagName('status')).firstValue()
+        if status == 'success':
+            info['id'] = project_identifier
+            info['project_identifier'] = project_identifier
+            info['widget_languages'] = '<script type="text/javascript" src="http://www.ohloh.net/p/' + project_identifier + '/widgets/project_languages.js"></script>'
+            info['ohloh_url'] = "http://www.ohloh.net/p/" + project_identifier
+            info['commits_spark'] = "http://www.ohloh.net/p/" + project_identifier + "/analyses/latest/commits_spark.png";
+            info['created_at'] = xmlElements(xmldoc.getElementsByTagName('created_at')).firstValue()
+            info['updated_at'] = xmlElements(xmldoc.getElementsByTagName('updated_at')).firstValue()
+            info['description'] = xmlElements(xmldoc.getElementsByTagName('description')).firstValue()
+            info['homepage_url'] = xmlElements(xmldoc.getElementsByTagName('homepage_url')).firstValue()
+            info['download_url'] = xmlElements(xmldoc.getElementsByTagName('download_url')).firstValue()
+            info['medium_logo_url'] = xmlElements(xmldoc.getElementsByTagName('medium_logo_url')).firstValue()
+            info['small_logo_url'] = xmlElements(xmldoc.getElementsByTagName('small_logo_url')).firstValue()
+            info['user_count'] = xmlElements(xmldoc.getElementsByTagName('user_count')).firstValue()
+            info['average_rating'] = xmlElements(xmldoc.getElementsByTagName('average_rating')).firstValue()
+            info['rating_count'] = xmlElements(xmldoc.getElementsByTagName('rating_count')).firstValue()
+            info['review_count'] = xmlElements(xmldoc.getElementsByTagName('review_count')).firstValue()
+            info['twelve_month_contributor_count'] = xmlElements(xmldoc.getElementsByTagName('twelve_month_contributor_count')).firstValue()
+            info['total_code_lines'] = xmlElements(xmldoc.getElementsByTagName('total_code_lines')).firstValue()
+            info['main_language_name'] = xmlElements(xmldoc.getElementsByTagName('main_language_name')).firstValue()
+            info['licenses'] = []
+            license_list = xmldoc.getElementsByTagName('license')
+            for s in license_list :
+                info['licenses'].append(xmlElements(s.getElementsByTagName('nice_name')).firstValue())
+            info['languages'] = []
+            language_list = xmldoc.getElementsByTagName('language')
+            for l in language_list :
+                language = {}
+                language['project_identifier'] = l.firstChild.nodeValue
+                language['percentage'] = l.attributes['percentage'].value
+                language['color'] = l.attributes['color'].value
+                language['id'] = l.attributes['id'].value
+                info['languages'].append(language)
+                
+        url_ohloh = "http://www.ohloh.net/projects/" + project_identifier + "/factoids.xml?api_key=" + Configuration.api_key
+        response = urllib2.urlopen(url_ohloh)
+        xml = response.read()
+        xmldoc = minidom.parseString(xml)
+        
+        status = xmlElements(xmldoc.getElementsByTagName('status')).firstValue()
+        info['factoids'] = []
+        if status == 'success':
+            factoid_list = xmldoc.getElementsByTagName('factoid')
+            for f in factoid_list :
+                factoid = {}
+                factoid['type'] = xmlElements(f.getElementsByTagName('type')).firstValue()
+                factoid['description'] = xmlElements(f.getElementsByTagName('description')).firstValue()
+                factoid['severity'] = xmlElements(f.getElementsByTagName('severity')).firstValue()
+                info['factoids'].append(factoid)
+
+
+        url_ohloh = "http://www.ohloh.net/projects/" + project_identifier + "/analyses/latest/size_facts.xml?api_key=" + Configuration.api_key
+        response = urllib2.urlopen(url_ohloh)
+        xml = response.read()
+        xmldoc = minidom.parseString(xml)
+        
+        info['size_fact'] = None
+        status = xmlElements(xmldoc.getElementsByTagName('status')).firstValue()
+        if status == 'success':
+            size_fact_list = xmldoc.getElementsByTagName('size_fact')
+            if len(size_fact_list) > 0:
+                sf = size_fact_list[len(size_fact_list) - 1]
+                size_fact = {}
+                size_fact['month'] = xmlElements(sf.getElementsByTagName('month')).firstValue()
+                size_fact['code'] = xmlElements(sf.getElementsByTagName('code')).firstValue()
+                size_fact['comments'] = xmlElements(sf.getElementsByTagName('comments')).firstValue()
+                size_fact['blanks'] = xmlElements(sf.getElementsByTagName('comment_ratio')).firstValue()
+                size_fact['commits'] = xmlElements(sf.getElementsByTagName('commits')).firstValue()
+                size_fact['comment_ratio'] = xmlElements(sf.getElementsByTagName('comment_ratio')).firstValue()
+                size_fact['man_months'] = xmlElements(sf.getElementsByTagName('man_months')).firstValue()
+                # I just need the last as it is the most recent
+                info['size_fact'] = size_fact 
+
+        return info
+
+        
+class OhlohProject():
+    id = 0
+    name = ""
+    description = ""
+    small_logo_url = ""
+    homepage_url = ""
+    id_forge = 0
+    datasource_id = 0
+    def load_information(self):
+        self.info = OhlohProxy.getProjectInfo(self.name)
+
+
+