示例#1
0
 def test_parsing_gold(self):
     file_name = 'data/gbalance_old.txt'
     nr_accounts = 4
     first_id = '120'
     last_id = '1211'
     test_id = '714'
     test_name = 'lp_h_biology'
     test_available = 11696
     test_allocated = 15000
     default_id = '120'
     default_name = 'default_project'
     default_available = 836
     default_allocated = 1000
     parser = GbalanceParser()
     with open(file_name, 'r') as gbalance_file:
         accounts = parser.parse_file(gbalance_file)
         self.assertEquals(nr_accounts, len(accounts))
         self.assertTrue(first_id in accounts)
         self.assertTrue(last_id in accounts)
         self.assertEquals(test_name, accounts[test_id].name)
         self.assertEquals(test_available,
                           accounts[test_id].available_credits)
         self.assertEquals(test_allocated,
                           accounts[test_id].allocated_credits)
         self.assertEquals(default_name, accounts[default_id].name)
         self.assertEquals(default_available,
                           accounts[default_id].available_credits)
         self.assertEquals(default_allocated,
                           accounts[default_id].allocated_credits)
示例#2
0
 def test_parsing_gold(self):
     file_name = 'data/gbalance_old.txt'
     nr_accounts = 4
     first_id = '120'
     last_id = '1211'
     test_id = '714'
     test_name = 'lp_h_biology'
     test_available = 11696
     test_allocated = 15000
     default_id = '120'
     default_name = 'default_project'
     default_available = 836
     default_allocated = 1000
     parser = GbalanceParser()
     with open(file_name, 'r') as gbalance_file:
         accounts = parser.parse_file(gbalance_file)
         self.assertEquals(nr_accounts, len(accounts))
         self.assertTrue(first_id in accounts)
         self.assertTrue(last_id in accounts)
         self.assertEquals(test_name, accounts[test_id].name)
         self.assertEquals(test_available,
                           accounts[test_id].available_credits)
         self.assertEquals(test_allocated,
                           accounts[test_id].allocated_credits)
         self.assertEquals(default_name, accounts[default_id].name)
         self.assertEquals(default_available,
                           accounts[default_id].available_credits)
         self.assertEquals(default_allocated,
                           accounts[default_id].allocated_credits)
示例#3
0
 def test_parsing(self):
     file_name = 'data/gbalance_new.txt'
     nr_accounts = 2
     first_id = '1217'
     last_id = '1255'
     default_id = '1217'
     default_name = 'default_project'
     default_available = -13
     default_allocated = 1000
     project_id = '1255'
     project_name = 'lp_qlint'
     project_available = 9814
     project_allocated = 10000
     parser = GbalanceParser()
     with open(file_name, 'r') as gbalance_file:
         accounts = parser.parse_file(gbalance_file)
         self.assertEquals(nr_accounts, len(accounts))
         self.assertTrue(first_id in accounts)
         self.assertTrue(last_id in accounts)
         self.assertEquals(default_name, accounts[default_id].name)
         self.assertEquals(default_available,
                           accounts[default_id].available_credits)
         self.assertEquals(default_allocated,
                           accounts[default_id].allocated_credits)
         self.assertEquals(project_name, accounts[project_id].name)
         self.assertEquals(project_available,
                           accounts[project_id].available_credits)
         self.assertEquals(project_allocated,
                           accounts[project_id].allocated_credits)
示例#4
0
 def test_parsing(self):
     file_name = 'data/gbalance_new.txt'
     nr_accounts = 2
     first_id = '1217'
     last_id = '1255'
     default_id = '1217'
     default_name = 'default_project'
     default_available = -13
     default_allocated = 1000
     project_id = '1255'
     project_name = 'lp_qlint'
     project_available = 9814
     project_allocated = 10000
     parser = GbalanceParser()
     with open(file_name, 'r') as gbalance_file:
         accounts = parser.parse_file(gbalance_file)
         self.assertEquals(nr_accounts, len(accounts))
         self.assertTrue(first_id in accounts)
         self.assertTrue(last_id in accounts)
         self.assertEquals(default_name, accounts[default_id].name)
         self.assertEquals(default_available,
                           accounts[default_id].available_credits)
         self.assertEquals(default_allocated,
                           accounts[default_id].allocated_credits)
         self.assertEquals(project_name, accounts[project_id].name)
         self.assertEquals(project_available,
                           accounts[project_id].available_credits)
         self.assertEquals(project_allocated,
                           accounts[project_id].allocated_credits)
示例#5
0
 def check_credit_account(self, job):
     '''Check whether a project is available to debit credits from,
        and whether the balance is sufficient'''
     if 'mock_balance' in self._config:
         with open(self._config['mock_balance'], 'r') as balance_file:
             balance_sheet = ''.join(balance_file.readlines())
     else:
         balance_cmd = self._config['balance_cmd']
         try:
             balance_sheet = check_output([balance_cmd], stderr=STDOUT)
         except OSError:
             return
         except CalledProcessError:
             # TODO: decide on user feedback
             return
     accounts = GbalanceParser().parse(balance_sheet)
     if len(accounts) == 0:
         self.reg_event('no_credit_account')
         return
     elif job.project is None:
         credit_account = None
         for account_id in accounts:
             account_name = accounts[account_id].name
             if (account_name == '' or
                     account_name == self._config['default_project']):
                 credit_account = accounts[account_id]
                 break
         if not credit_account:
             self.reg_event('no_default_credit_account')
             return
     else:
         credit_account = None
         for account_id in accounts:
             if accounts[account_id].name == job.project:
                 credit_account = accounts[account_id]
                 break
         if not credit_account:
             self.reg_event('unknown_credit_account',
                            {'account': job.project})
             return
     quoteCalculator = QuoteCalculator(self._config)
     credits = quoteCalculator.compute(job)
     if credits > credit_account.available_credits:
         self.reg_event('insufficient_credits',
                        {'account': credit_account.name})