importers: New importer for North Bay Python invoices.
This probably has no use outside Conservancy.
This commit is contained in:
		
							parent
							
								
									a924d9fb1f
								
							
						
					
					
						commit
						93fffe6666
					
				
					 5 changed files with 1454 additions and 0 deletions
				
			
		
							
								
								
									
										151
									
								
								import2ledger/importers/nbpy2017.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								import2ledger/importers/nbpy2017.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,151 @@
 | 
			
		|||
import decimal
 | 
			
		||||
import functools
 | 
			
		||||
 | 
			
		||||
import bs4
 | 
			
		||||
from .. import util
 | 
			
		||||
 | 
			
		||||
class Invoice2017:
 | 
			
		||||
    STANDARD_TICKET_RATE = decimal.Decimal('42.50')
 | 
			
		||||
    DISCOUNT_TICKET_RATE = STANDARD_TICKET_RATE / 2
 | 
			
		||||
    STANDARD_SHIRT_RATE = decimal.Decimal('25.50')
 | 
			
		||||
    DISCOUNT_SHIRT_RATE = STANDARD_SHIRT_RATE
 | 
			
		||||
    DATE_FMT = '%b. %d, %Y,'
 | 
			
		||||
    CURRENCY = 'USD'
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def _elem_stripped_string(cls, elem):
 | 
			
		||||
        return ''.join(elem.stripped_strings)
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def _table_row_text(cls, table_elem):
 | 
			
		||||
        for row in table_elem.find_all('tr'):
 | 
			
		||||
            row_text = []
 | 
			
		||||
            for cell in row.find_all(('th', 'td')):
 | 
			
		||||
                row_text.append(cls._elem_stripped_string(cell))
 | 
			
		||||
                try:
 | 
			
		||||
                    extra_cols = int(cell['colspan'])
 | 
			
		||||
                except KeyError:
 | 
			
		||||
                    pass
 | 
			
		||||
                else:
 | 
			
		||||
                    row_text.extend(None for _ in range(extra_cols - 1))
 | 
			
		||||
            yield row_text
 | 
			
		||||
 | 
			
		||||
    def __init__(self, source_file):
 | 
			
		||||
        soup = bs4.BeautifulSoup(source_file, 'html5lib')
 | 
			
		||||
        for table in soup.find_all('table'):
 | 
			
		||||
            rows_text = self._table_row_text(table)
 | 
			
		||||
            first_row_text = next(rows_text, [])
 | 
			
		||||
            if first_row_text[:1] == ['Number']:
 | 
			
		||||
                handler = self._read_invoice_header
 | 
			
		||||
            elif first_row_text == ['Description', 'Quantity', 'Price/Unit', 'Total']:
 | 
			
		||||
                handler = self._read_invoice_items
 | 
			
		||||
            elif first_row_text == ['Payment time', 'Reference', 'Amount']:
 | 
			
		||||
                handler = self._read_invoice_activity
 | 
			
		||||
            else:
 | 
			
		||||
                continue
 | 
			
		||||
            handler(table, first_row_text, rows_text)
 | 
			
		||||
        self.base_data = {
 | 
			
		||||
            'amount': self.amount,
 | 
			
		||||
            'currency': self.CURRENCY,
 | 
			
		||||
            'invoice_id': self.invoice_id,
 | 
			
		||||
            'payee': self.payee,
 | 
			
		||||
            'shirt_rate': self.shirt_rate,
 | 
			
		||||
            'shirts_sold': self.shirts_sold,
 | 
			
		||||
            'ticket_rate': self.ticket_rate,
 | 
			
		||||
            'tickets_sold': self.tickets_sold,
 | 
			
		||||
        }
 | 
			
		||||
        # Raise an AttributeError if we didn't read any invoice activity.
 | 
			
		||||
        self.actions
 | 
			
		||||
 | 
			
		||||
    def _read_invoice_header(self, table, first_row_text, rows_text):
 | 
			
		||||
        self.invoice_id = first_row_text[1]
 | 
			
		||||
        recipient_h = table.find('th', text='Recipient')
 | 
			
		||||
        recipient_cell = recipient_h.find_next_sibling('td')
 | 
			
		||||
        self.payee = next(recipient_cell.stripped_strings)
 | 
			
		||||
 | 
			
		||||
    def _read_invoice_items(self, table, first_row_text, rows_text):
 | 
			
		||||
        self.amount = decimal.Decimal(0)
 | 
			
		||||
        self.tickets_sold = decimal.Decimal(0)
 | 
			
		||||
        self.ticket_rate = self.STANDARD_TICKET_RATE
 | 
			
		||||
        self.shirts_sold = decimal.Decimal(0)
 | 
			
		||||
        self.shirt_rate = self.STANDARD_SHIRT_RATE
 | 
			
		||||
        for description, qty, unit_price, total in rows_text:
 | 
			
		||||
            if description.startswith('Ticket - '):
 | 
			
		||||
                self.tickets_sold += 1
 | 
			
		||||
            elif description.startswith('T-Shirt - '):
 | 
			
		||||
                self.shirts_sold += 1
 | 
			
		||||
            elif description.startswith('Early Bird ('):
 | 
			
		||||
                self.ticket_rate = self.DISCOUNT_TICKET_RATE
 | 
			
		||||
            if qty:
 | 
			
		||||
                self.amount += decimal.Decimal(total.lstrip('$'))
 | 
			
		||||
 | 
			
		||||
    def _read_invoice_activity(self, table, first_row_text, rows_text):
 | 
			
		||||
        self.actions = []
 | 
			
		||||
        date_wordcount = self.DATE_FMT.count(' ') + 1
 | 
			
		||||
        for timestamp, action, amount in rows_text:
 | 
			
		||||
            if action.startswith('Paid '):
 | 
			
		||||
                last_stripe_id = action.rsplit(None, 1)[1]
 | 
			
		||||
                action = {
 | 
			
		||||
                    'multiplier': 1,
 | 
			
		||||
                    'payment_id': last_stripe_id,
 | 
			
		||||
                }
 | 
			
		||||
            elif action.startswith('Generated credit note '):
 | 
			
		||||
                action = {
 | 
			
		||||
                    'multiplier': -1,
 | 
			
		||||
                    'payment_id': action.rsplit(None, 1)[1],
 | 
			
		||||
                }
 | 
			
		||||
            # Trim extraneous text like the time/a.m./p.m.
 | 
			
		||||
            date_words = timestamp.split(' ', date_wordcount + 1)[:date_wordcount]
 | 
			
		||||
            action['date'] = util.strpdate(' '.join(date_words), self.DATE_FMT)
 | 
			
		||||
            action['stripe_id'] = last_stripe_id
 | 
			
		||||
            self.actions.append(action)
 | 
			
		||||
 | 
			
		||||
    def __iter__(self):
 | 
			
		||||
        for action in self.actions:
 | 
			
		||||
            data = self.base_data.copy()
 | 
			
		||||
            data.update(action)
 | 
			
		||||
            multiplier = data.pop('multiplier')
 | 
			
		||||
            for key in ['amount', 'tickets_sold', 'shirts_sold']:
 | 
			
		||||
                data[key] *= multiplier
 | 
			
		||||
            yield data
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@functools.lru_cache(5)
 | 
			
		||||
def _parse_invoice(parser_class, source_file):
 | 
			
		||||
    try:
 | 
			
		||||
        return parser_class(source_file)
 | 
			
		||||
    except AttributeError:
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
class ImporterBase:
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def _parse_invoice(cls, source_file):
 | 
			
		||||
        return _parse_invoice(cls.INVOICE_CLASS, source_file)
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def can_import(cls, source_file):
 | 
			
		||||
        return cls._parse_invoice(source_file) is not None
 | 
			
		||||
 | 
			
		||||
    def __init__(self, source_file):
 | 
			
		||||
        self.invoice = self._parse_invoice(source_file)
 | 
			
		||||
 | 
			
		||||
    def __iter__(self):
 | 
			
		||||
        for entry in self.invoice:
 | 
			
		||||
            if self._should_yield_entry(entry):
 | 
			
		||||
                yield entry
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Payment2017Importer(ImporterBase):
 | 
			
		||||
    TEMPLATE_KEY = 'template nbpy2017 payment'
 | 
			
		||||
    INVOICE_CLASS = Invoice2017
 | 
			
		||||
 | 
			
		||||
    def _should_yield_entry(self, entry):
 | 
			
		||||
        return entry['amount'] > 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Refund2017Importer(ImporterBase):
 | 
			
		||||
    TEMPLATE_KEY = 'template nbpy2017 refund'
 | 
			
		||||
    INVOICE_CLASS = Invoice2017
 | 
			
		||||
 | 
			
		||||
    def _should_yield_entry(self, entry):
 | 
			
		||||
        return entry['amount'] < 0
 | 
			
		||||
| 
						 | 
				
			
			@ -81,3 +81,67 @@
 | 
			
		|||
      currency: USD
 | 
			
		||||
      payment_id: ch_hHee9ef1aeyee1ruo7ochee9
 | 
			
		||||
      description: "Payment for invoice #100"
 | 
			
		||||
 | 
			
		||||
- source: nbpy2017a.html
 | 
			
		||||
  importer: nbpy2017.Payment2017Importer
 | 
			
		||||
  expect:
 | 
			
		||||
    - payee: Python Person A
 | 
			
		||||
      date: [2017, 10, 19]
 | 
			
		||||
      amount: "80.00"
 | 
			
		||||
      tickets_sold: "1.0"
 | 
			
		||||
      ticket_rate: "21.25"
 | 
			
		||||
      shirts_sold: "1.0"
 | 
			
		||||
      shirt_rate: "25.50"
 | 
			
		||||
      currency: USD
 | 
			
		||||
      invoice_id: "83"
 | 
			
		||||
      payment_id: ch_ahr0ue8lai1ohqu4Gei4Biem
 | 
			
		||||
      stripe_id: ch_ahr0ue8lai1ohqu4Gei4Biem
 | 
			
		||||
 | 
			
		||||
- source: nbpy2017b.html
 | 
			
		||||
  importer: nbpy2017.Payment2017Importer
 | 
			
		||||
  expect:
 | 
			
		||||
    - payee: Python Person B
 | 
			
		||||
      date: [2017, 12, 3]
 | 
			
		||||
      amount: "50.00"
 | 
			
		||||
      tickets_sold: "1.0"
 | 
			
		||||
      ticket_rate: "42.50"
 | 
			
		||||
      shirts_sold: "0.0"
 | 
			
		||||
      shirt_rate: "25.50"
 | 
			
		||||
      currency: USD
 | 
			
		||||
      payment_id: ch_eishei9aiY8aiqu4lieYiu9i
 | 
			
		||||
      stripe_id: ch_eishei9aiY8aiqu4lieYiu9i
 | 
			
		||||
      invoice_id: "304"
 | 
			
		||||
 | 
			
		||||
- source: nbpy2017c.html
 | 
			
		||||
  importer: nbpy2017.Payment2017Importer
 | 
			
		||||
  expect:
 | 
			
		||||
    - payee: Python Person C
 | 
			
		||||
      date: [2017, 10, 5]
 | 
			
		||||
      amount: "55.00"
 | 
			
		||||
      tickets_sold: "1.0"
 | 
			
		||||
      ticket_rate: "21.25"
 | 
			
		||||
      shirts_sold: "1.0"
 | 
			
		||||
      shirt_rate: "25.50"
 | 
			
		||||
      currency: USD
 | 
			
		||||
      payment_id: ch_daer0ahwoh9oDeiqu2eimoD7
 | 
			
		||||
      stripe_id: ch_daer0ahwoh9oDeiqu2eimoD7
 | 
			
		||||
      invoice_id: "11"
 | 
			
		||||
 | 
			
		||||
- source: nbpy2017a.html
 | 
			
		||||
  importer: nbpy2017.Refund2017Importer
 | 
			
		||||
  expect: []
 | 
			
		||||
 | 
			
		||||
- source: nbpy2017c.html
 | 
			
		||||
  importer: nbpy2017.Refund2017Importer
 | 
			
		||||
  expect:
 | 
			
		||||
    - payee: Python Person C
 | 
			
		||||
      date: [2017, 10, 8]
 | 
			
		||||
      amount: "-55.00"
 | 
			
		||||
      tickets_sold: "-1.0"
 | 
			
		||||
      ticket_rate: "21.25"
 | 
			
		||||
      shirts_sold: "-1.0"
 | 
			
		||||
      shirt_rate: "25.50"
 | 
			
		||||
      currency: USD
 | 
			
		||||
      payment_id: "31"
 | 
			
		||||
      stripe_id: ch_daer0ahwoh9oDeiqu2eimoD7
 | 
			
		||||
      invoice_id: "11"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										421
									
								
								tests/data/nbpy2017a.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										421
									
								
								tests/data/nbpy2017a.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,421 @@
 | 
			
		|||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en-us">
 | 
			
		||||
    <head>
 | 
			
		||||
        <meta charset="utf-8" />
 | 
			
		||||
        <title>North Bay Python | </title>
 | 
			
		||||
    </head>
 | 
			
		||||
    <body class="" id="" >
 | 
			
		||||
        <div class="">
 | 
			
		||||
  <header>
 | 
			
		||||
    <div class="navbar navbar-default navbar-fixed-top">
 | 
			
		||||
      <div class="container">
 | 
			
		||||
          <div class="navbar-header">
 | 
			
		||||
            <button class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
 | 
			
		||||
              <span class="fa fa-bars">
 | 
			
		||||
                <span class="hidden-accessible">Pages Menu</span>
 | 
			
		||||
              </span>
 | 
			
		||||
            </button>
 | 
			
		||||
            <a class="navbar-brand" href="/">North Bay Python</a>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="collapse navbar-collapse navbar-responsive-collapse">
 | 
			
		||||
<ul class="nav navbar-nav">
 | 
			
		||||
        <li class="dropdown ">
 | 
			
		||||
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
 | 
			
		||||
                About
 | 
			
		||||
                <b class="caret"></b>
 | 
			
		||||
            </a>
 | 
			
		||||
<ul class="dropdown-menu" role="menu">
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/about/north-bay-python" >North Bay Python</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/about/petaluma" >Petaluma</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/about/team" >Our Team</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/about/colophon" >Colophon</a>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class="dropdown ">
 | 
			
		||||
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
 | 
			
		||||
                Attend
 | 
			
		||||
                <b class="caret"></b>
 | 
			
		||||
            </a>
 | 
			
		||||
<ul class="dropdown-menu" role="menu">
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/attend" >Buy a Ticket</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/attend/business-case" >How to Pitch Your Manager</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/attend/travel" >How to Get Here</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/attend/hotels" >Where to Stay</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/code-of-conduct" >Code of Conduct</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/attend/finaid" >Financial Aid</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/guides" >Guide Index</a>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class="dropdown ">
 | 
			
		||||
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
 | 
			
		||||
                Program
 | 
			
		||||
                <b class="caret"></b>
 | 
			
		||||
            </a>
 | 
			
		||||
<ul class="dropdown-menu" role="menu">
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/program/events" >Events</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/schedule" >Schedule</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/schedule/general-sessions/list/" >Accepted Talks</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/program/call-for-proposals" >Call for Proposals (Closed)</a>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class="dropdown ">
 | 
			
		||||
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
 | 
			
		||||
                Sponsors
 | 
			
		||||
                <b class="caret"></b>
 | 
			
		||||
            </a>
 | 
			
		||||
<ul class="dropdown-menu" role="menu">
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/sponsors" >Our Sponsors</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/sponsors/become-a-sponsor" >Become a Sponsor</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/donate" >Make a Donation</a>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class=" ">
 | 
			
		||||
            <a href="/news" >
 | 
			
		||||
                News
 | 
			
		||||
            </a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class=" ">
 | 
			
		||||
            <a href="/wiki" >
 | 
			
		||||
                Wiki
 | 
			
		||||
            </a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class="dropdown ">
 | 
			
		||||
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
 | 
			
		||||
                My Account
 | 
			
		||||
                <b class="caret"></b>
 | 
			
		||||
            </a>
 | 
			
		||||
<ul class="dropdown-menu" role="menu">
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/dashboard" >Dashboard</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/account/logout/" >Log Out</a>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
          </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </header>
 | 
			
		||||
  <div class="homepage-block-bg website-background"></div>
 | 
			
		||||
  <div id="background-filter">
 | 
			
		||||
    <section id="content_body">
 | 
			
		||||
        <div class="container">
 | 
			
		||||
            <div class="row">
 | 
			
		||||
                <div class="col-md-9">
 | 
			
		||||
      <h1></h1>
 | 
			
		||||
      <p class="lead">
 | 
			
		||||
      <div>
 | 
			
		||||
        <div class="panel-footer">
 | 
			
		||||
            <a class="btn btn-primary" href="/tickets/invoice/83/refund">Refund by issuing credit note</a>
 | 
			
		||||
            <a class="btn btn-default" href="/tickets/invoice/83/manual_payment">Apply manual payment/refund</a>
 | 
			
		||||
            <a class="btn btn-default" href="/dashboard/">Return to dashboard</a>
 | 
			
		||||
        </div>
 | 
			
		||||
<div class="panel panel-primary">
 | 
			
		||||
  <div class="panel-heading">
 | 
			
		||||
      <h2>
 | 
			
		||||
    Registration Receipt
 | 
			
		||||
</h2>
 | 
			
		||||
      <div>
 | 
			
		||||
  North Bay Python. December 2 & 3 2017. Petaluma, California.
 | 
			
		||||
</div>
 | 
			
		||||
  </div>
 | 
			
		||||
    <table class="table">
 | 
			
		||||
      <tr><th>Number</th><td> 83</td></tr>
 | 
			
		||||
      <tr><th>Status</th><td> Paid</td></tr>
 | 
			
		||||
      <tr><th>Issue date</th><td> Oct. 19, 2017</td></tr>
 | 
			
		||||
        <tr><th>Due</th><td> Oct. 20, 2017, 10:21 a.m.</td></tr>
 | 
			
		||||
      <tr><th>Recipient</th><td> Python Person A<br />Address 1<br />Address 2</td></tr>
 | 
			
		||||
    </table>
 | 
			
		||||
  <div class="panel-body">
 | 
			
		||||
      <div class="alert alert-info">
 | 
			
		||||
    This is a confirmed registration summary for North Bay Python 2017.
 | 
			
		||||
      </div>
 | 
			
		||||
    <div class="panel panel-default">
 | 
			
		||||
      <table class="table table-striped">
 | 
			
		||||
        <tr>
 | 
			
		||||
          <th>Description</th>
 | 
			
		||||
          <th class="text-right">Quantity</th>
 | 
			
		||||
          <th class="text-right">Price/Unit</th>
 | 
			
		||||
          <th class="text-right">Total</th>
 | 
			
		||||
        </tr>
 | 
			
		||||
          <tr>
 | 
			
		||||
            <td>Ticket - Individual Supporter</td>
 | 
			
		||||
            <td class="text-right">1</td>
 | 
			
		||||
            <td class="text-right">$100.00</td>
 | 
			
		||||
            <td class="text-right">$100.00</td>
 | 
			
		||||
          </tr>
 | 
			
		||||
          <tr>
 | 
			
		||||
            <td>T-Shirt - Men's/Straight Cut Size L</td>
 | 
			
		||||
            <td class="text-right">1</td>
 | 
			
		||||
            <td class="text-right">$30.00</td>
 | 
			
		||||
            <td class="text-right">$30.00</td>
 | 
			
		||||
          </tr>
 | 
			
		||||
          <tr>
 | 
			
		||||
            <td>Early Bird (Ticket - Individual Supporter)</td>
 | 
			
		||||
            <td class="text-right">1</td>
 | 
			
		||||
            <td class="text-right">$-20.00</td>
 | 
			
		||||
            <td class="text-right">$-20.00</td>
 | 
			
		||||
          </tr>
 | 
			
		||||
          <tr>
 | 
			
		||||
            <td>Complimentary for ticket holder (Supporter-level and above) (T-Shirt - Men's/Straight Cut Size L)</td>
 | 
			
		||||
            <td class="text-right">1</td>
 | 
			
		||||
            <td class="text-right">$-30.00</td>
 | 
			
		||||
            <td class="text-right">$-30.00</td>
 | 
			
		||||
          </tr>
 | 
			
		||||
        <tr>
 | 
			
		||||
          <th colspan="3">TOTAL</th>
 | 
			
		||||
          <td class="text-right">$80.00</td>
 | 
			
		||||
        </tr>
 | 
			
		||||
    <tr>
 | 
			
		||||
      <td colspan="3">Includes donation eligible for tax deduction in the USA:</td>
 | 
			
		||||
      <td class="text-right">$33.35</td>
 | 
			
		||||
    </tr>
 | 
			
		||||
      </table>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="panel panel-info">
 | 
			
		||||
      <div class="panel-heading">
 | 
			
		||||
        <h3 class="panel-title">Balance</h3>
 | 
			
		||||
      </div>
 | 
			
		||||
      <table class="table table-striped">
 | 
			
		||||
        <tr>
 | 
			
		||||
          <td colspan="3">Total payments:</td>
 | 
			
		||||
          <td class="text-right">$80.00</td>
 | 
			
		||||
        </tr>
 | 
			
		||||
        <tr>
 | 
			
		||||
          <td colspan="3">Balance due:</td>
 | 
			
		||||
          <td class="text-right">$0.00</td>
 | 
			
		||||
        </tr>
 | 
			
		||||
      </table>
 | 
			
		||||
    </div>
 | 
			
		||||
      <div class="panel panel-info">
 | 
			
		||||
        <div class="panel-heading">
 | 
			
		||||
          <h4 class="panel-title">Payments received</h4>
 | 
			
		||||
        </div>
 | 
			
		||||
  <table class="table table-striped">
 | 
			
		||||
    <tr>
 | 
			
		||||
      <th>Payment time</th>
 | 
			
		||||
      <th>Reference</th>
 | 
			
		||||
      <th>Amount</th>
 | 
			
		||||
    </tr>
 | 
			
		||||
      <tr>
 | 
			
		||||
        <td>Oct. 19, 2017, 10:23 a.m.</td>
 | 
			
		||||
        <td>Paid with Stripe reference: ch_ahr0ue8lai1ohqu4Gei4Biem</td>
 | 
			
		||||
        <td>80.00</td>
 | 
			
		||||
      </tr>
 | 
			
		||||
  </table>
 | 
			
		||||
      </div>
 | 
			
		||||
    <div class="panel panel-default">
 | 
			
		||||
        <div class="panel-heading">
 | 
			
		||||
          <h3 class="panel-title">
 | 
			
		||||
              Contact Information
 | 
			
		||||
          </h3>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="panel-body">
 | 
			
		||||
          <p>
 | 
			
		||||
  <p>Direct inquiries to <a href="mailto:hello@northbaypython.org">hello@northbaypython.org</a></p>
 | 
			
		||||
  <p>North Bay Python is run by North Bay and Bay Area locals, as a member project of <a href="https://sfconservancy.org">Software Freedom Conservancy</a>, a 501(c)(3) not-for-profit public charity registered in New York. Software Freedom Conservancy's federal tax-exempt EIN is 41-2203632.</p>
 | 
			
		||||
  <strong>Mailing Address</strong>
 | 
			
		||||
  <address>
 | 
			
		||||
    Software Freedom Conservancy, Inc.<br>
 | 
			
		||||
    137 MONTAGUE ST STE 380<br>
 | 
			
		||||
    Brooklyn, NY 11201-3548<br>
 | 
			
		||||
  </address>
 | 
			
		||||
          </p>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
      </div>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="col-md-3">
 | 
			
		||||
<h3>Sponsors</h3>
 | 
			
		||||
<div class="sponsor-list">
 | 
			
		||||
          <h4>Platinum</h4>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="http://revsys.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/new-horizontal-large.png.600x360_q85.png" alt="REVSYS">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.cloverhealth.com/en/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/Clover.png.600x360_q85.png" alt="Clover Health">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
          <h4>Gold</h4>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://python.org">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/PSF_logo.png.600x360_q85.png" alt="Python Software Foundation">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://ibm.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/IBM_logo.png.600x360_q85.png" alt="IBM">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
          <h4>Silver</h4>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://heroku.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/heroku-logotype-horizontal-purple.png.600x360_q85.png" alt="Heroku">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://sfconservancy.org">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/conservancy-logo.png.600x360_q85.png" alt="Software Freedom Conservancy">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="http://www.visitpetaluma.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/visit_test_logo.png.600x360_q85.png" alt="Visit Petaluma">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://yelp.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/yelp-logo-01_2.png.600x360_q85.png" alt="Yelp">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://launchdarkly.com/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/g12.png.600x360_q85.png" alt="LaunchDarkly">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://djangoproject.org">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/django-logo-positive.png.600x360_q85.png" alt="Django Software Foundation">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://developers.google.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/logo_lockup_google_developers_vertical.png.600x360_q85.png" alt="Google Developers">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://bloomberg.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/logoBBGblck_Reg.png.600x360_q85.png" alt="Bloomberg">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://paypal.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/FullColor_Horizontal_Logo_RGB.png.600x360_q85.png" alt="PayPal">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="http://braintreepayments.com/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/braintree.png.600x360_q85.png" alt="Braintree">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://indeed.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/Indeed_Logo_RGB.png.600x360_q85.png" alt="Indeed">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
          <h4>Community Partner</h4>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.beawimp.org/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/wimp-logo.png.600x360_q85.png" alt="Web & Interactive Media Professionals">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.meetup.com/sfhtml5/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/sfhtml-logo-vector-b-120612.png.600x360_q85.png" alt="SFHTML5">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="http://baybridgepython.org/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/bbp_logo.png.600x360_q85.png" alt="Bay Bridge Python">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.pycascades.com/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/pycascades-logo-dark-on-transparent-800.png.600x360_q85.png" alt="PyCascades">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.meetup.com/PyLadies-Vancouver/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/pyladies_vancouver.png.600x360_q85.png" alt="PyLadies Vancouver">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.meetup.com/PyLadies-Silicon-Valley/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/Pyladies1.jpg.600x360_q85.jpg" alt="PyLadies Silicon Valley">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://workpetaluma.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/WORK_logo_sm.png.600x360_q85.png" alt="WORK Petaluma">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
</div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </section>
 | 
			
		||||
  <div class="container">
 | 
			
		||||
    <footer>
 | 
			
		||||
<div class="row">
 | 
			
		||||
  <div class="logo">
 | 
			
		||||
    <div class="circle">
 | 
			
		||||
      <div class="fill" style="background-image: url('/static/images/logo.svg');"></div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
  <div class="footer-copy">
 | 
			
		||||
    <p>© 2017 North Bay Python, member project of <a href="https://sfconservancy.org" >Software Freedom Conservancy</a>, a 501(c)(3) charity.</p>
 | 
			
		||||
    <p>We acknowledge the support of our Platinum sponsors,
 | 
			
		||||
        REVSYS
 | 
			
		||||
          and
 | 
			
		||||
        Clover Health.
 | 
			
		||||
    <p>
 | 
			
		||||
      <a href="https://facebook.com/northbaypython">Facebook</a>
 | 
			
		||||
      | <a href="https://twitter.com/northbaypython">Twitter</a>
 | 
			
		||||
      | <a href="https://www.youtube.com/channel/UCLc1vUexbRTlRBJcUG9U6ug">YouTube</a>
 | 
			
		||||
      | <a href="https://webchat.freenode.net/?channels=%23nbpy">IRC</a>
 | 
			
		||||
      | <a href="/accessibility">Accessibility</a>
 | 
			
		||||
      | <a href="/code-of-conduct">Code of Conduct</a>
 | 
			
		||||
      | <a href="/about/colophon">Colophon</a>
 | 
			
		||||
      | <a href="/terms">Terms and Conditions</a>
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>This site is <a href="https://github.com/northbaypython/website">free and open source software</a>, powered by <a href="https://github.com/chrisjrn/symposion/">Symposion</a> and <a href="https://github.com/chrisjrn/registrasion/">Registrasion</a>.</p>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
    </footer>
 | 
			
		||||
  </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										403
									
								
								tests/data/nbpy2017b.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										403
									
								
								tests/data/nbpy2017b.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,403 @@
 | 
			
		|||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en-us">
 | 
			
		||||
    <head>
 | 
			
		||||
        <meta charset="utf-8" />
 | 
			
		||||
        <title>North Bay Python | </title>
 | 
			
		||||
    </head>
 | 
			
		||||
    <body class="" id="" >
 | 
			
		||||
        <div class="">
 | 
			
		||||
  <header>
 | 
			
		||||
    <div class="navbar navbar-default navbar-fixed-top">
 | 
			
		||||
      <div class="container">
 | 
			
		||||
          <div class="navbar-header">
 | 
			
		||||
            <button class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
 | 
			
		||||
              <span class="fa fa-bars">
 | 
			
		||||
                <span class="hidden-accessible">Pages Menu</span>
 | 
			
		||||
              </span>
 | 
			
		||||
            </button>
 | 
			
		||||
            <a class="navbar-brand" href="/">North Bay Python</a>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="collapse navbar-collapse navbar-responsive-collapse">
 | 
			
		||||
<ul class="nav navbar-nav">
 | 
			
		||||
        <li class="dropdown ">
 | 
			
		||||
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
 | 
			
		||||
                About
 | 
			
		||||
                <b class="caret"></b>
 | 
			
		||||
            </a>
 | 
			
		||||
<ul class="dropdown-menu" role="menu">
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/about/north-bay-python" >North Bay Python</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/about/petaluma" >Petaluma</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/about/team" >Our Team</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/about/colophon" >Colophon</a>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class="dropdown ">
 | 
			
		||||
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
 | 
			
		||||
                Attend
 | 
			
		||||
                <b class="caret"></b>
 | 
			
		||||
            </a>
 | 
			
		||||
<ul class="dropdown-menu" role="menu">
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/attend" >Buy a Ticket</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/attend/business-case" >How to Pitch Your Manager</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/attend/travel" >How to Get Here</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/attend/hotels" >Where to Stay</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/code-of-conduct" >Code of Conduct</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/attend/finaid" >Financial Aid</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/guides" >Guide Index</a>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class="dropdown ">
 | 
			
		||||
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
 | 
			
		||||
                Program
 | 
			
		||||
                <b class="caret"></b>
 | 
			
		||||
            </a>
 | 
			
		||||
<ul class="dropdown-menu" role="menu">
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/program/events" >Events</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/schedule" >Schedule</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/schedule/general-sessions/list/" >Accepted Talks</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/program/call-for-proposals" >Call for Proposals (Closed)</a>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class="dropdown ">
 | 
			
		||||
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
 | 
			
		||||
                Sponsors
 | 
			
		||||
                <b class="caret"></b>
 | 
			
		||||
            </a>
 | 
			
		||||
<ul class="dropdown-menu" role="menu">
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/sponsors" >Our Sponsors</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/sponsors/become-a-sponsor" >Become a Sponsor</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/donate" >Make a Donation</a>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class=" ">
 | 
			
		||||
            <a href="/news" >
 | 
			
		||||
                News
 | 
			
		||||
            </a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class=" ">
 | 
			
		||||
            <a href="/wiki" >
 | 
			
		||||
                Wiki
 | 
			
		||||
            </a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class="dropdown ">
 | 
			
		||||
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
 | 
			
		||||
                My Account
 | 
			
		||||
                <b class="caret"></b>
 | 
			
		||||
            </a>
 | 
			
		||||
<ul class="dropdown-menu" role="menu">
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/dashboard" >Dashboard</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/account/logout/" >Log Out</a>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
          </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </header>
 | 
			
		||||
  <div class="homepage-block-bg website-background"></div>
 | 
			
		||||
  <div id="background-filter">
 | 
			
		||||
    <section id="content_body">
 | 
			
		||||
        <div class="container">
 | 
			
		||||
            <div class="row">
 | 
			
		||||
                <div class="col-md-9">
 | 
			
		||||
      <h1></h1>
 | 
			
		||||
      <p class="lead">
 | 
			
		||||
      <div>
 | 
			
		||||
        <div class="panel-footer">
 | 
			
		||||
            <a class="btn btn-primary" href="/tickets/invoice/304/refund">Refund by issuing credit note</a>
 | 
			
		||||
            <a class="btn btn-default" href="/tickets/invoice/304/manual_payment">Apply manual payment/refund</a>
 | 
			
		||||
            <a class="btn btn-default" href="/dashboard/">Return to dashboard</a>
 | 
			
		||||
        </div>
 | 
			
		||||
<div class="panel panel-primary">
 | 
			
		||||
  <div class="panel-heading">
 | 
			
		||||
      <h2>
 | 
			
		||||
    Registration Receipt
 | 
			
		||||
</h2>
 | 
			
		||||
      <div>
 | 
			
		||||
  North Bay Python. December 2 & 3 2017. Petaluma, California.
 | 
			
		||||
</div>
 | 
			
		||||
  </div>
 | 
			
		||||
    <table class="table">
 | 
			
		||||
      <tr><th>Number</th><td> 304</td></tr>
 | 
			
		||||
      <tr><th>Status</th><td> Paid</td></tr>
 | 
			
		||||
      <tr><th>Issue date</th><td> Dec. 3, 2017</td></tr>
 | 
			
		||||
        <tr><th>Due</th><td> Dec. 4, 2017, 10:08 a.m.</td></tr>
 | 
			
		||||
      <tr><th>Recipient</th><td> Python Person B<br />1234 Main St<br />Anytown, ME 12345-6789<br />United States of America</td></tr>
 | 
			
		||||
    </table>
 | 
			
		||||
  <div class="panel-body">
 | 
			
		||||
      <div class="alert alert-info">
 | 
			
		||||
    This is a confirmed registration summary for North Bay Python 2017.
 | 
			
		||||
      </div>
 | 
			
		||||
    <div class="panel panel-default">
 | 
			
		||||
      <table class="table table-striped">
 | 
			
		||||
        <tr>
 | 
			
		||||
          <th>Description</th>
 | 
			
		||||
          <th class="text-right">Quantity</th>
 | 
			
		||||
          <th class="text-right">Price/Unit</th>
 | 
			
		||||
          <th class="text-right">Total</th>
 | 
			
		||||
        </tr>
 | 
			
		||||
          <tr>
 | 
			
		||||
            <td>Ticket - Unaffiliated Individual</td>
 | 
			
		||||
            <td class="text-right">1</td>
 | 
			
		||||
            <td class="text-right">$50.00</td>
 | 
			
		||||
            <td class="text-right">$50.00</td>
 | 
			
		||||
          </tr>
 | 
			
		||||
        <tr>
 | 
			
		||||
          <th colspan="3">TOTAL</th>
 | 
			
		||||
          <td class="text-right">$50.00</td>
 | 
			
		||||
        </tr>
 | 
			
		||||
    <tr>
 | 
			
		||||
      <td colspan="3">Includes donation eligible for tax deduction in the USA:</td>
 | 
			
		||||
      <td class="text-right">$7.50</td>
 | 
			
		||||
    </tr>
 | 
			
		||||
      </table>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="panel panel-info">
 | 
			
		||||
      <div class="panel-heading">
 | 
			
		||||
        <h3 class="panel-title">Balance</h3>
 | 
			
		||||
      </div>
 | 
			
		||||
      <table class="table table-striped">
 | 
			
		||||
        <tr>
 | 
			
		||||
          <td colspan="3">Total payments:</td>
 | 
			
		||||
          <td class="text-right">$50.00</td>
 | 
			
		||||
        </tr>
 | 
			
		||||
        <tr>
 | 
			
		||||
          <td colspan="3">Balance due:</td>
 | 
			
		||||
          <td class="text-right">$0.00</td>
 | 
			
		||||
        </tr>
 | 
			
		||||
      </table>
 | 
			
		||||
    </div>
 | 
			
		||||
      <div class="panel panel-info">
 | 
			
		||||
        <div class="panel-heading">
 | 
			
		||||
          <h4 class="panel-title">Payments received</h4>
 | 
			
		||||
        </div>
 | 
			
		||||
  <table class="table table-striped">
 | 
			
		||||
    <tr>
 | 
			
		||||
      <th>Payment time</th>
 | 
			
		||||
      <th>Reference</th>
 | 
			
		||||
      <th>Amount</th>
 | 
			
		||||
    </tr>
 | 
			
		||||
      <tr>
 | 
			
		||||
        <td>Dec. 3, 2017, 10:09 a.m.</td>
 | 
			
		||||
        <td>Paid with Stripe reference: ch_eishei9aiY8aiqu4lieYiu9i</td>
 | 
			
		||||
        <td>50.00</td>
 | 
			
		||||
      </tr>
 | 
			
		||||
  </table>
 | 
			
		||||
      </div>
 | 
			
		||||
    <div class="panel panel-default">
 | 
			
		||||
        <div class="panel-heading">
 | 
			
		||||
          <h3 class="panel-title">
 | 
			
		||||
              Contact Information
 | 
			
		||||
          </h3>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="panel-body">
 | 
			
		||||
          <p>
 | 
			
		||||
  <p>Direct inquiries to <a href="mailto:hello@northbaypython.org">hello@northbaypython.org</a></p>
 | 
			
		||||
  <p>North Bay Python is run by North Bay and Bay Area locals, as a member project of <a href="https://sfconservancy.org">Software Freedom Conservancy</a>, a 501(c)(3) not-for-profit public charity registered in New York. Software Freedom Conservancy's federal tax-exempt EIN is 41-2203632.</p>
 | 
			
		||||
  <strong>Mailing Address</strong>
 | 
			
		||||
  <address>
 | 
			
		||||
    Software Freedom Conservancy, Inc.<br>
 | 
			
		||||
    137 MONTAGUE ST STE 380<br>
 | 
			
		||||
    Brooklyn, NY 11201-3548<br>
 | 
			
		||||
  </address>
 | 
			
		||||
          </p>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
      </div>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="col-md-3">
 | 
			
		||||
<h3>Sponsors</h3>
 | 
			
		||||
<div class="sponsor-list">
 | 
			
		||||
          <h4>Platinum</h4>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="http://revsys.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/new-horizontal-large.png.600x360_q85.png" alt="REVSYS">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.cloverhealth.com/en/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/Clover.png.600x360_q85.png" alt="Clover Health">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
          <h4>Gold</h4>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://python.org">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/PSF_logo.png.600x360_q85.png" alt="Python Software Foundation">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://ibm.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/IBM_logo.png.600x360_q85.png" alt="IBM">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
          <h4>Silver</h4>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://heroku.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/heroku-logotype-horizontal-purple.png.600x360_q85.png" alt="Heroku">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://sfconservancy.org">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/conservancy-logo.png.600x360_q85.png" alt="Software Freedom Conservancy">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="http://www.visitpetaluma.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/visit_test_logo.png.600x360_q85.png" alt="Visit Petaluma">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://yelp.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/yelp-logo-01_2.png.600x360_q85.png" alt="Yelp">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://launchdarkly.com/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/g12.png.600x360_q85.png" alt="LaunchDarkly">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://djangoproject.org">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/django-logo-positive.png.600x360_q85.png" alt="Django Software Foundation">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://developers.google.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/logo_lockup_google_developers_vertical.png.600x360_q85.png" alt="Google Developers">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://bloomberg.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/logoBBGblck_Reg.png.600x360_q85.png" alt="Bloomberg">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://paypal.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/FullColor_Horizontal_Logo_RGB.png.600x360_q85.png" alt="PayPal">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="http://braintreepayments.com/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/braintree.png.600x360_q85.png" alt="Braintree">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://indeed.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/Indeed_Logo_RGB.png.600x360_q85.png" alt="Indeed">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
          <h4>Community Partner</h4>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.beawimp.org/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/wimp-logo.png.600x360_q85.png" alt="Web & Interactive Media Professionals">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.meetup.com/sfhtml5/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/sfhtml-logo-vector-b-120612.png.600x360_q85.png" alt="SFHTML5">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="http://baybridgepython.org/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/bbp_logo.png.600x360_q85.png" alt="Bay Bridge Python">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.pycascades.com/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/pycascades-logo-dark-on-transparent-800.png.600x360_q85.png" alt="PyCascades">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.meetup.com/PyLadies-Vancouver/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/pyladies_vancouver.png.600x360_q85.png" alt="PyLadies Vancouver">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.meetup.com/PyLadies-Silicon-Valley/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/Pyladies1.jpg.600x360_q85.jpg" alt="PyLadies Silicon Valley">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://workpetaluma.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/WORK_logo_sm.png.600x360_q85.png" alt="WORK Petaluma">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
</div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </section>
 | 
			
		||||
  <div class="container">
 | 
			
		||||
    <footer>
 | 
			
		||||
<div class="row">
 | 
			
		||||
  <div class="logo">
 | 
			
		||||
    <div class="circle">
 | 
			
		||||
      <div class="fill" style="background-image: url('/static/images/logo.svg');"></div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
  <div class="footer-copy">
 | 
			
		||||
    <p>© 2017 North Bay Python, member project of <a href="https://sfconservancy.org" >Software Freedom Conservancy</a>, a 501(c)(3) charity.</p>
 | 
			
		||||
    <p>We acknowledge the support of our Platinum sponsors,
 | 
			
		||||
        REVSYS
 | 
			
		||||
          and
 | 
			
		||||
        Clover Health.
 | 
			
		||||
    <p>
 | 
			
		||||
      <a href="https://facebook.com/northbaypython">Facebook</a>
 | 
			
		||||
      | <a href="https://twitter.com/northbaypython">Twitter</a>
 | 
			
		||||
      | <a href="https://www.youtube.com/channel/UCLc1vUexbRTlRBJcUG9U6ug">YouTube</a>
 | 
			
		||||
      | <a href="https://webchat.freenode.net/?channels=%23nbpy">IRC</a>
 | 
			
		||||
      | <a href="/accessibility">Accessibility</a>
 | 
			
		||||
      | <a href="/code-of-conduct">Code of Conduct</a>
 | 
			
		||||
      | <a href="/about/colophon">Colophon</a>
 | 
			
		||||
      | <a href="/terms">Terms and Conditions</a>
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>This site is <a href="https://github.com/northbaypython/website">free and open source software</a>, powered by <a href="https://github.com/chrisjrn/symposion/">Symposion</a> and <a href="https://github.com/chrisjrn/registrasion/">Registrasion</a>.</p>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
    </footer>
 | 
			
		||||
  </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										415
									
								
								tests/data/nbpy2017c.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										415
									
								
								tests/data/nbpy2017c.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,415 @@
 | 
			
		|||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en-us">
 | 
			
		||||
    <head>
 | 
			
		||||
        <meta charset="utf-8" />
 | 
			
		||||
        <title>North Bay Python | </title>
 | 
			
		||||
    </head>
 | 
			
		||||
    <body class="" id="" >
 | 
			
		||||
        <div class="">
 | 
			
		||||
  <header>
 | 
			
		||||
    <div class="navbar navbar-default navbar-fixed-top">
 | 
			
		||||
      <div class="container">
 | 
			
		||||
          <div class="navbar-header">
 | 
			
		||||
            <button class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
 | 
			
		||||
              <span class="fa fa-bars">
 | 
			
		||||
                <span class="hidden-accessible">Pages Menu</span>
 | 
			
		||||
              </span>
 | 
			
		||||
            </button>
 | 
			
		||||
            <a class="navbar-brand" href="/">North Bay Python</a>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="collapse navbar-collapse navbar-responsive-collapse">
 | 
			
		||||
<ul class="nav navbar-nav">
 | 
			
		||||
        <li class="dropdown ">
 | 
			
		||||
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
 | 
			
		||||
                About
 | 
			
		||||
                <b class="caret"></b>
 | 
			
		||||
            </a>
 | 
			
		||||
<ul class="dropdown-menu" role="menu">
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/about/north-bay-python" >North Bay Python</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/about/petaluma" >Petaluma</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/about/team" >Our Team</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/about/colophon" >Colophon</a>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class="dropdown ">
 | 
			
		||||
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
 | 
			
		||||
                Attend
 | 
			
		||||
                <b class="caret"></b>
 | 
			
		||||
            </a>
 | 
			
		||||
<ul class="dropdown-menu" role="menu">
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/attend" >Buy a Ticket</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/attend/business-case" >How to Pitch Your Manager</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/attend/travel" >How to Get Here</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/attend/hotels" >Where to Stay</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/code-of-conduct" >Code of Conduct</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/attend/finaid" >Financial Aid</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/guides" >Guide Index</a>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class="dropdown ">
 | 
			
		||||
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
 | 
			
		||||
                Program
 | 
			
		||||
                <b class="caret"></b>
 | 
			
		||||
            </a>
 | 
			
		||||
<ul class="dropdown-menu" role="menu">
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/program/events" >Events</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/schedule" >Schedule</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/schedule/general-sessions/list/" >Accepted Talks</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/program/call-for-proposals" >Call for Proposals (Closed)</a>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class="dropdown ">
 | 
			
		||||
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
 | 
			
		||||
                Sponsors
 | 
			
		||||
                <b class="caret"></b>
 | 
			
		||||
            </a>
 | 
			
		||||
<ul class="dropdown-menu" role="menu">
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/sponsors" >Our Sponsors</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/sponsors/become-a-sponsor" >Become a Sponsor</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/donate" >Make a Donation</a>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class=" ">
 | 
			
		||||
            <a href="/news" >
 | 
			
		||||
                News
 | 
			
		||||
            </a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class=" ">
 | 
			
		||||
            <a href="/wiki" >
 | 
			
		||||
                Wiki
 | 
			
		||||
            </a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li class="dropdown ">
 | 
			
		||||
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
 | 
			
		||||
                My Account
 | 
			
		||||
                <b class="caret"></b>
 | 
			
		||||
            </a>
 | 
			
		||||
<ul class="dropdown-menu" role="menu">
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/dashboard" >Dashboard</a>
 | 
			
		||||
        </li>
 | 
			
		||||
        <li role="presentation" >
 | 
			
		||||
            <a role="menuitem" href="/account/logout/" >Log Out</a>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
        </li>
 | 
			
		||||
</ul>
 | 
			
		||||
          </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </header>
 | 
			
		||||
  <div class="homepage-block-bg website-background"></div>
 | 
			
		||||
  <div id="background-filter">
 | 
			
		||||
    <section id="content_body">
 | 
			
		||||
        <div class="container">
 | 
			
		||||
            <div class="row">
 | 
			
		||||
                <div class="col-md-9">
 | 
			
		||||
      <h1></h1>
 | 
			
		||||
      <p class="lead">
 | 
			
		||||
      <div>
 | 
			
		||||
<div class="panel panel-primary">
 | 
			
		||||
  <div class="panel-heading">
 | 
			
		||||
      <h2>
 | 
			
		||||
    Registration Receipt
 | 
			
		||||
</h2>
 | 
			
		||||
      <div>
 | 
			
		||||
  North Bay Python. December 2 & 3 2017. Petaluma, California.
 | 
			
		||||
</div>
 | 
			
		||||
  </div>
 | 
			
		||||
    <table class="table">
 | 
			
		||||
      <tr><th>Number</th><td> 11</td></tr>
 | 
			
		||||
      <tr><th>Status</th><td> Refunded</td></tr>
 | 
			
		||||
      <tr><th>Issue date</th><td> Oct. 5, 2017</td></tr>
 | 
			
		||||
        <tr><th>Due</th><td> Oct. 6, 2017, 9:09 p.m.</td></tr>
 | 
			
		||||
      <tr><th>Recipient</th><td> Python Person C<br />Anycountry</td></tr>
 | 
			
		||||
    </table>
 | 
			
		||||
  <div class="panel-body">
 | 
			
		||||
      <div class="alert alert-info">
 | 
			
		||||
    This is a refunded registration summary for North Bay Python 2017. It is provided for informational purposes only.
 | 
			
		||||
      </div>
 | 
			
		||||
    <div class="panel panel-default">
 | 
			
		||||
      <table class="table table-striped">
 | 
			
		||||
        <tr>
 | 
			
		||||
          <th>Description</th>
 | 
			
		||||
          <th class="text-right">Quantity</th>
 | 
			
		||||
          <th class="text-right">Price/Unit</th>
 | 
			
		||||
          <th class="text-right">Total</th>
 | 
			
		||||
        </tr>
 | 
			
		||||
          <tr>
 | 
			
		||||
            <td>Ticket - Unaffiliated Individual</td>
 | 
			
		||||
            <td class="text-right">1</td>
 | 
			
		||||
            <td class="text-right">$50.00</td>
 | 
			
		||||
            <td class="text-right">$50.00</td>
 | 
			
		||||
          </tr>
 | 
			
		||||
          <tr>
 | 
			
		||||
            <td>T-Shirt - Men's/Straight Cut Size M</td>
 | 
			
		||||
            <td class="text-right">1</td>
 | 
			
		||||
            <td class="text-right">$30.00</td>
 | 
			
		||||
            <td class="text-right">$30.00</td>
 | 
			
		||||
          </tr>
 | 
			
		||||
          <tr>
 | 
			
		||||
            <td>Early Bird (Ticket - Unaffiliated Individual)</td>
 | 
			
		||||
            <td class="text-right">1</td>
 | 
			
		||||
            <td class="text-right">$-25.00</td>
 | 
			
		||||
            <td class="text-right">$-25.00</td>
 | 
			
		||||
          </tr>
 | 
			
		||||
        <tr>
 | 
			
		||||
          <th colspan="3">TOTAL</th>
 | 
			
		||||
          <td class="text-right">$55.00</td>
 | 
			
		||||
        </tr>
 | 
			
		||||
    <tr>
 | 
			
		||||
      <td colspan="3">Includes donation eligible for tax deduction in the USA:</td>
 | 
			
		||||
      <td class="text-right">$8.25</td>
 | 
			
		||||
    </tr>
 | 
			
		||||
      </table>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="panel panel-info">
 | 
			
		||||
      <div class="panel-heading">
 | 
			
		||||
        <h3 class="panel-title">Balance</h3>
 | 
			
		||||
      </div>
 | 
			
		||||
      <table class="table table-striped">
 | 
			
		||||
        <tr>
 | 
			
		||||
          <td colspan="3">Total payments:</td>
 | 
			
		||||
          <td class="text-right">$0</td>
 | 
			
		||||
        </tr>
 | 
			
		||||
        <tr>
 | 
			
		||||
          <td colspan="3">Balance due:</td>
 | 
			
		||||
          <td class="text-right">$55.00</td>
 | 
			
		||||
        </tr>
 | 
			
		||||
      </table>
 | 
			
		||||
    </div>
 | 
			
		||||
      <div class="panel panel-info">
 | 
			
		||||
        <div class="panel-heading">
 | 
			
		||||
          <h4 class="panel-title">Payments received</h4>
 | 
			
		||||
        </div>
 | 
			
		||||
  <table class="table table-striped">
 | 
			
		||||
    <tr>
 | 
			
		||||
      <th>Payment time</th>
 | 
			
		||||
      <th>Reference</th>
 | 
			
		||||
      <th>Amount</th>
 | 
			
		||||
    </tr>
 | 
			
		||||
      <tr>
 | 
			
		||||
        <td>Oct. 5, 2017, 9:14 p.m.</td>
 | 
			
		||||
        <td>Paid with Stripe reference: ch_daer0ahwoh9oDeiqu2eimoD7</td>
 | 
			
		||||
        <td>55.00</td>
 | 
			
		||||
      </tr>
 | 
			
		||||
      <tr>
 | 
			
		||||
        <td>Oct. 8, 2017, 3:20 p.m.</td>
 | 
			
		||||
        <td>Generated credit note 31</td>
 | 
			
		||||
        <td>-55.00</td>
 | 
			
		||||
      </tr>
 | 
			
		||||
  </table>
 | 
			
		||||
      </div>
 | 
			
		||||
    <div class="panel panel-default">
 | 
			
		||||
        <div class="panel-heading">
 | 
			
		||||
          <h3 class="panel-title">
 | 
			
		||||
              Contact Information
 | 
			
		||||
          </h3>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="panel-body">
 | 
			
		||||
          <p>
 | 
			
		||||
  <p>Direct inquiries to <a href="mailto:hello@northbaypython.org">hello@northbaypython.org</a></p>
 | 
			
		||||
  <p>North Bay Python is run by North Bay and Bay Area locals, as a member project of <a href="https://sfconservancy.org">Software Freedom Conservancy</a>, a 501(c)(3) not-for-profit public charity registered in New York. Software Freedom Conservancy's federal tax-exempt EIN is 41-2203632.</p>
 | 
			
		||||
  <strong>Mailing Address</strong>
 | 
			
		||||
  <address>
 | 
			
		||||
    Software Freedom Conservancy, Inc.<br>
 | 
			
		||||
    137 MONTAGUE ST STE 380<br>
 | 
			
		||||
    Brooklyn, NY 11201-3548<br>
 | 
			
		||||
  </address>
 | 
			
		||||
          </p>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
      </div>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="col-md-3">
 | 
			
		||||
<h3>Sponsors</h3>
 | 
			
		||||
<div class="sponsor-list">
 | 
			
		||||
          <h4>Platinum</h4>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="http://revsys.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/new-horizontal-large.png.600x360_q85.png" alt="REVSYS">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.cloverhealth.com/en/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/Clover.png.600x360_q85.png" alt="Clover Health">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
          <h4>Gold</h4>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://python.org">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/PSF_logo.png.600x360_q85.png" alt="Python Software Foundation">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://ibm.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/IBM_logo.png.600x360_q85.png" alt="IBM">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
          <h4>Silver</h4>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://heroku.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/heroku-logotype-horizontal-purple.png.600x360_q85.png" alt="Heroku">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://sfconservancy.org">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/conservancy-logo.png.600x360_q85.png" alt="Software Freedom Conservancy">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="http://www.visitpetaluma.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/visit_test_logo.png.600x360_q85.png" alt="Visit Petaluma">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://yelp.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/yelp-logo-01_2.png.600x360_q85.png" alt="Yelp">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://launchdarkly.com/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/g12.png.600x360_q85.png" alt="LaunchDarkly">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://djangoproject.org">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/django-logo-positive.png.600x360_q85.png" alt="Django Software Foundation">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://developers.google.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/logo_lockup_google_developers_vertical.png.600x360_q85.png" alt="Google Developers">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://bloomberg.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/logoBBGblck_Reg.png.600x360_q85.png" alt="Bloomberg">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://paypal.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/FullColor_Horizontal_Logo_RGB.png.600x360_q85.png" alt="PayPal">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="http://braintreepayments.com/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/braintree.png.600x360_q85.png" alt="Braintree">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://indeed.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/Indeed_Logo_RGB.png.600x360_q85.png" alt="Indeed">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
          <h4>Community Partner</h4>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.beawimp.org/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/wimp-logo.png.600x360_q85.png" alt="Web & Interactive Media Professionals">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.meetup.com/sfhtml5/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/sfhtml-logo-vector-b-120612.png.600x360_q85.png" alt="SFHTML5">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="http://baybridgepython.org/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/bbp_logo.png.600x360_q85.png" alt="Bay Bridge Python">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.pycascades.com/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/pycascades-logo-dark-on-transparent-800.png.600x360_q85.png" alt="PyCascades">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.meetup.com/PyLadies-Vancouver/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/pyladies_vancouver.png.600x360_q85.png" alt="PyLadies Vancouver">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://www.meetup.com/PyLadies-Silicon-Valley/">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/Pyladies1.jpg.600x360_q85.jpg" alt="PyLadies Silicon Valley">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                      <a href="https://workpetaluma.com">
 | 
			
		||||
                          <img src="/site_media/media/sponsor_files/WORK_logo_sm.png.600x360_q85.png" alt="WORK Petaluma">
 | 
			
		||||
                      </a>
 | 
			
		||||
              </div>
 | 
			
		||||
</div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </section>
 | 
			
		||||
  <div class="container">
 | 
			
		||||
    <footer>
 | 
			
		||||
<div class="row">
 | 
			
		||||
  <div class="logo">
 | 
			
		||||
    <div class="circle">
 | 
			
		||||
      <div class="fill" style="background-image: url('/static/images/logo.svg');"></div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
  <div class="footer-copy">
 | 
			
		||||
    <p>© 2017 North Bay Python, member project of <a href="https://sfconservancy.org" >Software Freedom Conservancy</a>, a 501(c)(3) charity.</p>
 | 
			
		||||
    <p>We acknowledge the support of our Platinum sponsors,
 | 
			
		||||
        REVSYS
 | 
			
		||||
          and
 | 
			
		||||
        Clover Health.
 | 
			
		||||
    <p>
 | 
			
		||||
      <a href="https://facebook.com/northbaypython">Facebook</a>
 | 
			
		||||
      | <a href="https://twitter.com/northbaypython">Twitter</a>
 | 
			
		||||
      | <a href="https://www.youtube.com/channel/UCLc1vUexbRTlRBJcUG9U6ug">YouTube</a>
 | 
			
		||||
      | <a href="https://webchat.freenode.net/?channels=%23nbpy">IRC</a>
 | 
			
		||||
      | <a href="/accessibility">Accessibility</a>
 | 
			
		||||
      | <a href="/code-of-conduct">Code of Conduct</a>
 | 
			
		||||
      | <a href="/about/colophon">Colophon</a>
 | 
			
		||||
      | <a href="/terms">Terms and Conditions</a>
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>This site is <a href="https://github.com/northbaypython/website">free and open source software</a>, powered by <a href="https://github.com/chrisjrn/symposion/">Symposion</a> and <a href="https://github.com/chrisjrn/registrasion/">Registrasion</a>.</p>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
    </footer>
 | 
			
		||||
  </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </body>
 | 
			
		||||
</html>
 | 
			
		||||
		Loading…
	
	Add table
		
		Reference in a new issue