update from Atlas with major reorg
This commit is contained in:
23
19-dyn-attr-prop/oscon/demo_schedule2.py
Normal file
23
19-dyn-attr-prop/oscon/demo_schedule2.py
Normal file
@@ -0,0 +1,23 @@
|
||||
import shelve
|
||||
|
||||
from schedule2 import DB_NAME, CONFERENCE, load_db
|
||||
from schedule2 import DbRecord, Event
|
||||
|
||||
with shelve.open(DB_NAME) as db:
|
||||
if CONFERENCE not in db:
|
||||
load_db(db)
|
||||
|
||||
DbRecord.set_db(db)
|
||||
event = DbRecord.fetch('event.33950')
|
||||
print(event)
|
||||
print(event.venue)
|
||||
print(event.venue.name)
|
||||
for spkr in event.speakers:
|
||||
print('{0.serial}: {0.name}'.format(spkr))
|
||||
|
||||
print(repr(Event.venue))
|
||||
|
||||
event2 = DbRecord.fetch('event.33451')
|
||||
print(event2)
|
||||
print(event2.fetch)
|
||||
print(event2.venue)
|
||||
37
19-dyn-attr-prop/oscon/test_schedule1.py
Normal file
37
19-dyn-attr-prop/oscon/test_schedule1.py
Normal file
@@ -0,0 +1,37 @@
|
||||
import shelve
|
||||
import pytest
|
||||
|
||||
import schedule1 as schedule
|
||||
|
||||
|
||||
@pytest.yield_fixture
|
||||
def db():
|
||||
with shelve.open(schedule.DB_NAME) as the_db:
|
||||
if schedule.CONFERENCE not in the_db:
|
||||
schedule.load_db(the_db)
|
||||
yield the_db
|
||||
|
||||
|
||||
def test_record_class():
|
||||
rec = schedule.Record(spam=99, eggs=12)
|
||||
assert rec.spam == 99
|
||||
assert rec.eggs == 12
|
||||
|
||||
|
||||
def test_conference_record(db):
|
||||
assert schedule.CONFERENCE in db
|
||||
|
||||
|
||||
def test_speaker_record(db):
|
||||
speaker = db['speaker.3471']
|
||||
assert speaker.name == 'Anna Martelli Ravenscroft'
|
||||
|
||||
|
||||
def test_event_record(db):
|
||||
event = db['event.33950']
|
||||
assert event.name == 'There *Will* Be Bugs'
|
||||
|
||||
|
||||
def test_event_venue(db):
|
||||
event = db['event.33950']
|
||||
assert event.venue_serial == 1449
|
||||
72
19-dyn-attr-prop/oscon/test_schedule2.py
Normal file
72
19-dyn-attr-prop/oscon/test_schedule2.py
Normal file
@@ -0,0 +1,72 @@
|
||||
import shelve
|
||||
import pytest
|
||||
|
||||
import schedule2 as schedule
|
||||
|
||||
|
||||
@pytest.yield_fixture
|
||||
def db():
|
||||
with shelve.open(schedule.DB_NAME) as the_db:
|
||||
if schedule.CONFERENCE not in the_db:
|
||||
schedule.load_db(the_db)
|
||||
yield the_db
|
||||
|
||||
|
||||
def test_record_attr_access():
|
||||
rec = schedule.Record(spam=99, eggs=12)
|
||||
assert rec.spam == 99
|
||||
assert rec.eggs == 12
|
||||
|
||||
|
||||
def test_record_repr():
|
||||
rec = schedule.DbRecord(spam=99, eggs=12)
|
||||
assert 'DbRecord object at 0x' in repr(rec)
|
||||
rec2 = schedule.DbRecord(serial=13)
|
||||
assert repr(rec2) == "<DbRecord serial=13>"
|
||||
|
||||
|
||||
def test_conference_record(db):
|
||||
assert schedule.CONFERENCE in db
|
||||
|
||||
|
||||
def test_speaker_record(db):
|
||||
speaker = db['speaker.3471']
|
||||
assert speaker.name == 'Anna Martelli Ravenscroft'
|
||||
|
||||
|
||||
def test_missing_db_exception():
|
||||
with pytest.raises(schedule.MissingDatabaseError):
|
||||
schedule.DbRecord.fetch('venue.1585')
|
||||
|
||||
|
||||
def test_dbrecord(db):
|
||||
schedule.DbRecord.set_db(db)
|
||||
venue = schedule.DbRecord.fetch('venue.1585')
|
||||
assert venue.name == 'Exhibit Hall B'
|
||||
|
||||
|
||||
def test_event_record(db):
|
||||
event = db['event.33950']
|
||||
assert repr(event) == "<Event 'There *Will* Be Bugs'>"
|
||||
|
||||
|
||||
def test_event_venue(db):
|
||||
schedule.Event.set_db(db)
|
||||
event = db['event.33950']
|
||||
assert event.venue_serial == 1449
|
||||
assert event.venue == db['venue.1449']
|
||||
assert event.venue.name == 'Portland 251'
|
||||
|
||||
|
||||
def test_event_speakers(db):
|
||||
schedule.Event.set_db(db)
|
||||
event = db['event.33950']
|
||||
assert len(event.speakers) == 2
|
||||
anna_and_alex = [db['speaker.3471'], db['speaker.5199']]
|
||||
assert event.speakers == anna_and_alex
|
||||
|
||||
|
||||
def test_event_no_speakers(db):
|
||||
schedule.Event.set_db(db)
|
||||
event = db['event.36848']
|
||||
assert len(event.speakers) == 0
|
||||
10
19-dyn-attr-prop/pseudo_construction.py
Normal file
10
19-dyn-attr-prop/pseudo_construction.py
Normal file
@@ -0,0 +1,10 @@
|
||||
# pseudo-code for object construction
|
||||
def object_maker(the_class, some_arg):
|
||||
new_object = the_class.__new__(some_arg)
|
||||
if isinstance(new_object, the_class):
|
||||
the_class.__init__(new_object, some_arg)
|
||||
return new_object
|
||||
|
||||
# the following statements are roughly equivalent
|
||||
x = Foo('bar')
|
||||
x = object_maker(Foo, 'bar')
|
||||
Reference in New Issue
Block a user