3
0
Fork 0

Compare commits

...

2 commits

6 changed files with 82 additions and 2 deletions

View file

@ -5,6 +5,12 @@ All notable changes to WuttJamaican will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## v0.20.4 (2025-02-01)
### Fix
- add `make_person()` method for people, auth handlers
## v0.20.3 (2025-01-25)
### Fix

View file

@ -6,7 +6,7 @@ build-backend = "hatchling.build"
[project]
name = "WuttJamaican"
version = "0.20.3"
version = "0.20.4"
description = "Base package for Wutta Framework"
readme = "README.md"
authors = [{name = "Lance Edgar", email = "lance@wuttaproject.org"}]

View file

@ -225,6 +225,17 @@ class AuthHandler(GenericHandler):
if person:
return person.user
def make_person(self, **kwargs):
"""
Make and return a new
:class:`~wuttjamaican.db.model.base.Person`.
This is a convenience wrapper around
:class:`~wuttjamaican.people.PeopleHandler.make_person()`.
"""
people = self.app.get_people_handler()
return people.make_person(**kwargs)
def make_user(self, session=None, **kwargs):
"""
Make and return a new

View file

@ -39,6 +39,30 @@ class PeopleHandler(GenericHandler):
things.
"""
def make_person(self, **kwargs):
"""
Make and return a new Person.
This mostly a convenience wrapper; it will auto-populate the
:attr:`~wuttjamaican.db.model.base.Person.full_name` if not
specified.
:param \**kwargs: All kwargs are passed as-is to the model
class constructor.
:rtype: :class:`~wuttjamaican.db.model.base.Person`
"""
model = self.app.model
if 'full_name' not in kwargs:
full_name = self.app.make_full_name(kwargs.get('first_name'),
kwargs.get('middle_name'),
kwargs.get('last_name'))
if full_name:
kwargs['full_name'] = full_name
return model.Person(**kwargs)
def get_person(self, obj, **kwargs):
"""
Return the :class:`~wuttjamaican.db.model.base.Person`

View file

@ -17,7 +17,7 @@ else:
def setUp(self):
self.config = WuttaConfig()
self.app = self.config.get_app()
self.handler = mod.AuthHandler(self.config)
self.handler = self.make_handler()
self.engine = sa.create_engine('sqlite://')
self.app.model.Base.metadata.create_all(bind=self.engine)
@ -30,6 +30,9 @@ else:
def make_session(self):
return self.app.make_session(bind=self.engine)
def make_handler(self):
return mod.AuthHandler(self.config)
def test_authenticate_user(self):
model = self.app.model
barney = model.User(username='barney')
@ -133,6 +136,24 @@ else:
user = self.handler.get_user(myperson)
self.assertIs(user, myuser)
def test_make_person(self):
model = self.app.model
handler = self.handler
person = handler.make_person()
self.assertIsInstance(person, model.Person)
self.assertIsNone(person.first_name)
self.assertIsNone(person.last_name)
self.assertIsNone(person.full_name)
self.assertNotIn(person, self.session)
person = handler.make_person(first_name='Barney', last_name='Rubble')
self.assertIsInstance(person, model.Person)
self.assertEqual(person.first_name, 'Barney')
self.assertEqual(person.last_name, 'Rubble')
self.assertEqual(person.full_name, 'Barney Rubble')
self.assertNotIn(person, self.session)
def test_make_user(self):
model = self.app.model

View file

@ -36,3 +36,21 @@ else:
self.session.commit()
person = handler.get_person(myuser)
self.assertIs(person, myperson)
def test_make_person(self):
model = self.app.model
handler = self.make_handler()
person = handler.make_person()
self.assertIsInstance(person, model.Person)
self.assertIsNone(person.first_name)
self.assertIsNone(person.last_name)
self.assertIsNone(person.full_name)
self.assertNotIn(person, self.session)
person = handler.make_person(first_name='Barney', last_name='Rubble')
self.assertIsInstance(person, model.Person)
self.assertEqual(person.first_name, 'Barney')
self.assertEqual(person.last_name, 'Rubble')
self.assertEqual(person.full_name, 'Barney Rubble')
self.assertNotIn(person, self.session)