github: New importer.
This commit is contained in:
		
							parent
							
								
									910b942e20
								
							
						
					
					
						commit
						e5b600dae6
					
				
					 5 changed files with 90 additions and 1 deletions
				
			
		
							
								
								
									
										23
									
								
								README.rst
									
										
									
									
									
								
							
							
						
						
									
										23
									
								
								README.rst
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -228,6 +228,29 @@ Eventbrite
 | 
			
		|||
  total_fees       From the ``Fees Paid`` spreadsheet column
 | 
			
		||||
  ================ ===========================================================
 | 
			
		||||
 | 
			
		||||
GitHub
 | 
			
		||||
^^^^^^
 | 
			
		||||
 | 
			
		||||
``github sponsors ledger entry``
 | 
			
		||||
  Imports one transaction per processed sponsorship.  Generated from CSV export of GitHub Sponsors report.
 | 
			
		||||
 | 
			
		||||
  This template can use these variables.  Note that name and email may both be empty if the sponsor chooses not to make that information public.
 | 
			
		||||
 | 
			
		||||
  ================ ===========================================================
 | 
			
		||||
  Name             Contents
 | 
			
		||||
  ================ ===========================================================
 | 
			
		||||
  email            From the ``Sponsor Public Email`` column
 | 
			
		||||
  ---------------- -----------------------------------------------------------
 | 
			
		||||
  handle           From the ``Sponsor Handle`` column, their username on
 | 
			
		||||
                   GitHub
 | 
			
		||||
  ---------------- -----------------------------------------------------------
 | 
			
		||||
  name             From the ``Sponsor Public Name`` column
 | 
			
		||||
  ---------------- -----------------------------------------------------------
 | 
			
		||||
  start_date       A date, from the ``Sponsorship Started On`` column
 | 
			
		||||
  ---------------- -----------------------------------------------------------
 | 
			
		||||
  transaction_id   From the ``Transaction ID`` column
 | 
			
		||||
  ================ ===========================================================
 | 
			
		||||
 | 
			
		||||
O'Reilly Media
 | 
			
		||||
^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										30
									
								
								import2ledger/importers/github.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								import2ledger/importers/github.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
import decimal
 | 
			
		||||
 | 
			
		||||
from . import _csv
 | 
			
		||||
from .. import strparse
 | 
			
		||||
 | 
			
		||||
class SponsorsImporter(_csv.CSVImporterBase):
 | 
			
		||||
    DATE_FMT = '%Y-%m-%d %H:%M:%S %z'
 | 
			
		||||
    NEEDED_FIELDS = frozenset([
 | 
			
		||||
        'Processed Amount',
 | 
			
		||||
        'Status',
 | 
			
		||||
        'Transaction Date',
 | 
			
		||||
    ])
 | 
			
		||||
    COPIED_FIELDS = {
 | 
			
		||||
        'Sponsor Handle': 'handle',
 | 
			
		||||
        'Sponsor Profile Name': 'name',
 | 
			
		||||
        'Sponsor Public Email': 'email',
 | 
			
		||||
        'Transaction ID': 'transaction_id',
 | 
			
		||||
    }
 | 
			
		||||
    ENTRY_SEED = {'currency': 'USD'}
 | 
			
		||||
 | 
			
		||||
    def _read_row(self, row):
 | 
			
		||||
        amount = strparse.currency_decimal(row['Processed Amount'])
 | 
			
		||||
        if (not amount) or row['Status'] != 'settled':
 | 
			
		||||
            return None
 | 
			
		||||
        return {
 | 
			
		||||
            'amount': amount,
 | 
			
		||||
            'date': strparse.date(row['Transaction Date'], self.DATE_FMT),
 | 
			
		||||
            'payee': row['Sponsor Profile Name'] or row['Sponsor Handle'],
 | 
			
		||||
            'start_date': strparse.date(row['Sponsorship Started On'], self.DATE_FMT),
 | 
			
		||||
        }
 | 
			
		||||
							
								
								
									
										2
									
								
								setup.py
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								setup.py
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -30,7 +30,7 @@ REQUIREMENTS['tests_require'] = [
 | 
			
		|||
setup(
 | 
			
		||||
    name='import2ledger',
 | 
			
		||||
    description="Import different sources of financial data to Ledger",
 | 
			
		||||
    version='0.11.1',
 | 
			
		||||
    version='1.0.0',
 | 
			
		||||
    author='Brett Smith',
 | 
			
		||||
    author_email='brettcsmith@brettcsmith.org',
 | 
			
		||||
    license='GNU AGPLv3+',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										5
									
								
								tests/data/GitHubSponsors.csv
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								tests/data/GitHubSponsors.csv
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
Sponsor Handle,Sponsor Profile Name,Sponsor Public Email,Sponsorship Started On,Is Public?,Is Yearly?,Transaction ID,Tier Name,Tier Monthly Amount,Processed Amount,Is Prorated?,Status,Transaction Date
 | 
			
		||||
exampleA,Alex Jones,ajones@example.com,2019-10-01 10:00:00 -0400,TRUE,FALSE,ch_1Gabcdefghijklmnopqrstuv,$1/month,$1.00,$1.00,FALSE,settled,2020-01-02 14:02:00 -0500
 | 
			
		||||
exampleB,,,2019-11-01 11:00:00 -0400,FALSE,FALSE,1023ABCD5678EFGHI,$10/month,$10.00,$10.00,FALSE,settled,2020-01-03 15:03:00 -0500
 | 
			
		||||
exampleC,Example Co,info@example.com,2019-12-01 12:00:00 -0500,TRUE,TRUE,ch_1Gabcdefghijklmnopqrstuw,$10/month,$10.00,$120.00,FALSE,settled,2020-01-04 16:04:00 -0500
 | 
			
		||||
exampleD,Declined Smith,dsmith@example.com,2020-01-01 01:00:00 -0500,TRUE,FALSE,1023ABCD5678EFGHJ,$1/month,$1.00,$1.00,FALSE,processor_declined,2020-01-05 17:05:00 -0500
 | 
			
		||||
		
		
			
  | 
| 
						 | 
				
			
			@ -904,3 +904,34 @@
 | 
			
		|||
      eventbrite_fees: !!python/object/apply:decimal.Decimal ["2.99"]
 | 
			
		||||
      payment_fees: !!python/object/apply:decimal.Decimal ["1"]
 | 
			
		||||
      tax: !!python/object/apply:decimal.Decimal [0]
 | 
			
		||||
 | 
			
		||||
- source: GitHubSponsors.csv
 | 
			
		||||
  importer: github.SponsorsImporter
 | 
			
		||||
  expect:
 | 
			
		||||
    - date: !!python/object/apply:datetime.date [2020, 1, 2]
 | 
			
		||||
      payee: Alex Jones
 | 
			
		||||
      handle: exampleA
 | 
			
		||||
      name: Alex Jones
 | 
			
		||||
      email: ajones@example.com
 | 
			
		||||
      start_date: !!python/object/apply:datetime.date [2019, 10, 1]
 | 
			
		||||
      transaction_id: ch_1Gabcdefghijklmnopqrstuv
 | 
			
		||||
      amount: !!python/object/apply:decimal.Decimal ["1"]
 | 
			
		||||
      currency: USD
 | 
			
		||||
    - date: !!python/object/apply:datetime.date [2020, 1, 3]
 | 
			
		||||
      payee: exampleB
 | 
			
		||||
      handle: exampleB
 | 
			
		||||
      name: ""
 | 
			
		||||
      email: ""
 | 
			
		||||
      start_date: !!python/object/apply:datetime.date [2019, 11, 1]
 | 
			
		||||
      transaction_id: 1023ABCD5678EFGHI
 | 
			
		||||
      amount: !!python/object/apply:decimal.Decimal ["10"]
 | 
			
		||||
      currency: USD
 | 
			
		||||
    - date: !!python/object/apply:datetime.date [2020, 1, 4]
 | 
			
		||||
      payee: Example Co
 | 
			
		||||
      handle: exampleC
 | 
			
		||||
      name: Example Co
 | 
			
		||||
      email: info@example.com
 | 
			
		||||
      start_date: !!python/object/apply:datetime.date [2019, 12, 1]
 | 
			
		||||
      transaction_id: ch_1Gabcdefghijklmnopqrstuw
 | 
			
		||||
      amount: !!python/object/apply:decimal.Decimal ["120"]
 | 
			
		||||
      currency: USD
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue