class TestExportTable(unittest.TestCase):

    # Corresponds to schema in `db/data_schema.sql`
    header_row = "id,date_updated,language,pull_requests,open_issues,"\
                 "number_of_commits,number_of_branches,number_of_releases,"\
                 "number_of_contributors,number_of_watchers,"\
                 "number_of_stargazers,number_of_forks\n"

    def setUp(self):
        if os.environ.get('TRAVIS') == None:
            self.github = GitHub()
            self.db = DBConnector()
            self.config = Config()
            self.github.update_library_data(self.config.github_user,
                                            self.config.github_repos[0])
            self.filename = "./csv/{}.csv".format(GitHubData.__tablename__)

    def test_file_export_succeeds(self):
        if os.environ.get('TRAVIS') == None:
            self.assertFalse(os.path.exists(self.filename))
            self.db.export_table_to_csv(GitHubData)
            self.assertTrue(os.path.exists(self.filename))

    def test_file_export_has_correct_data(self):
        if os.environ.get('TRAVIS') == None:
            self.db.export_table_to_csv(GitHubData)
            with open(self.filename, 'r') as fp:
                exported_data = fp.readlines()

            # Table has correct header
            self.assertEqual(exported_data[0], self.header_row)

            # Table exported correct number of rows
            num_exported_rows = len(exported_data) - 1  # exclude header
            num_db_rows = len(self.db.get_data(GitHubData))
            self.assertEqual(num_exported_rows, num_db_rows)

    def tearDown(self):
        if os.environ.get('TRAVIS') == None:
            os.remove(self.filename)
class TestGitHub(unittest.TestCase):
    def setUp(self):
        if os.environ.get('TRAVIS') == None:
            self.github = GitHub()
            self.db = DBConnector()
            self.config = Config()

    def test_update_library_data(self):
        if os.environ.get('TRAVIS') == None:
            res = self.github.update_library_data(self.config.github_user,
                                                  self.config.github_repos[0])
            self.assertTrue(isinstance(res, GitHubData))
            res = self.db.delete_data(res.id, 'github_data')
            self.assertTrue(res)
class TestGitHub(unittest.TestCase):
    def setUp(self):
        if os.environ.get('TRAVIS') == None:
            self.github = GitHub()
            self.db = DBConnector()
            self.config = Config()

    def test_update_library_data(self):
        if os.environ.get('TRAVIS') == None:
            res = self.github.update_library_data(self.config.github_user,
                                                self.config.github_repos[0])
            self.assertTrue(isinstance(res, GitHubData))
            res = self.db.delete_data(res.id, 'github_data')
            self.assertTrue(res)
from db_connector import DBConnector
from config import Config
from github import GitHub
from package_managers import PackageManagers
from sendgrid_email import SendGrid

config = Config()
db = DBConnector()
github = GitHub()
pm = PackageManagers()
sg = SendGrid()

# Update the DB with the GitHub repo data
for repo in config.github_repos:
    github.update_library_data(config.github_user, repo)

# Update the DB with Package Manager data
pm.update_package_manager_data(config.package_manager_urls)

# Send an email update
sg.send_email(config.to_email,
              config.from_email,
              config.email_subject,
              config.email_body)