diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index f37d5ba..80a6824 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -9,6 +9,6 @@ repos:
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.6.9
+ rev: v0.7.0
hooks:
- id: ruff-format
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3de1d69..9234cd9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,17 @@ and this project tries to adhere to [Semantic Versioning](https://semver.org/spe
Historic and pre-release versions aren't necessarily included.
+## UNRELEASED - TBC
+
+### Added
+
+- Event `Responses` to public API
+
+### Changed
+
+- Update dev dependencies: mypy, ruff
+
+
## [0.12.0] - 2024-10-11
### Added
diff --git a/docs/search.js b/docs/search.js
index 1c34d9b..042eca9 100644
--- a/docs/search.js
+++ b/docs/search.js
@@ -1,6 +1,6 @@
window.pdocSearch = (function(){
/** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();oMain module.
\n"}, {"fullname": "spond_classes.Event", "modulename": "spond_classes", "qualname": "Event", "kind": "class", "doc": "Represents an event in the Spond system.
\n\nEvents data is retrieved from the events
API endpoint.
\n", "bases": "pydantic.main.BaseModel"}, {"fullname": "spond_classes.Event.uid", "modulename": "spond_classes", "qualname": "Event.uid", "kind": "variable", "doc": "id
in API; aliased as that's a Python built-in, and the Spond package\nuses uid
.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Event.heading", "modulename": "spond_classes", "qualname": "Event.heading", "kind": "variable", "doc": "
\n", "annotation": ": str"}, {"fullname": "spond_classes.Event.responses", "modulename": "spond_classes", "qualname": "Event.responses", "kind": "variable", "doc": "
\n", "annotation": ": spond_classes.event.Responses"}, {"fullname": "spond_classes.Event.type", "modulename": "spond_classes", "qualname": "Event.type", "kind": "variable", "doc": "
\n", "annotation": ": spond_classes.event.EventType"}, {"fullname": "spond_classes.Event.created_time", "modulename": "spond_classes", "qualname": "Event.created_time", "kind": "variable", "doc": "Derived from createdTime
in API.
\n", "annotation": ": datetime.datetime"}, {"fullname": "spond_classes.Event.end_time", "modulename": "spond_classes", "qualname": "Event.end_time", "kind": "variable", "doc": "Datetime at which the Event
ends.\nDerived from endTimestamp
in API.
\n", "annotation": ": datetime.datetime"}, {"fullname": "spond_classes.Event.start_time", "modulename": "spond_classes", "qualname": "Event.start_time", "kind": "variable", "doc": "Datetime at which the Event
starts.\nDerived from startTimestamp
in API.
\n", "annotation": ": datetime.datetime"}, {"fullname": "spond_classes.Event.cancelled", "modulename": "spond_classes", "qualname": "Event.cancelled", "kind": "variable", "doc": "Optional.
\n", "annotation": ": bool | None"}, {"fullname": "spond_classes.Event.invite_time", "modulename": "spond_classes", "qualname": "Event.invite_time", "kind": "variable", "doc": "Optional.\nDerived from inviteTime
in API.
\n", "annotation": ": datetime.datetime | None"}, {"fullname": "spond_classes.Event.url", "modulename": "spond_classes", "qualname": "Event.url", "kind": "variable", "doc": "Return the URL of the Event
, for convenience.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Event.model_config", "modulename": "spond_classes", "qualname": "Event.model_config", "kind": "variable", "doc": "Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
\n", "annotation": ": ClassVar[pydantic.config.ConfigDict]", "default_value": "{}"}, {"fullname": "spond_classes.Event.model_fields", "modulename": "spond_classes", "qualname": "Event.model_fields", "kind": "variable", "doc": "Metadata about the fields defined on the model,\nmapping of field names to [FieldInfo
][pydantic.fields.FieldInfo] objects.
\n\nThis replaces Model.__fields__
from Pydantic V1.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.FieldInfo]]", "default_value": "{'uid': FieldInfo(annotation=str, required=True, alias='id', alias_priority=2), 'heading': FieldInfo(annotation=str, required=True), 'responses': FieldInfo(annotation=Responses, required=True), 'type': FieldInfo(annotation=EventType, required=True), 'created_time': FieldInfo(annotation=datetime, required=True, alias='createdTime', alias_priority=2), 'end_time': FieldInfo(annotation=datetime, required=True, alias='endTimestamp', alias_priority=2), 'start_time': FieldInfo(annotation=datetime, required=True, alias='startTimestamp', alias_priority=2), 'cancelled': FieldInfo(annotation=Union[bool, NoneType], required=False, default=None), 'invite_time': FieldInfo(annotation=Union[datetime, NoneType], required=False, default=None, alias='inviteTime', alias_priority=2)}"}, {"fullname": "spond_classes.Event.model_computed_fields", "modulename": "spond_classes", "qualname": "Event.model_computed_fields", "kind": "variable", "doc": "A dictionary of computed field names and their corresponding ComputedFieldInfo
objects.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]]", "default_value": "{}"}, {"fullname": "spond_classes.EventType", "modulename": "spond_classes", "qualname": "EventType", "kind": "class", "doc": "Represents the kind of Event
.
\n", "bases": "enum.Enum"}, {"fullname": "spond_classes.EventType.EVENT", "modulename": "spond_classes", "qualname": "EventType.EVENT", "kind": "variable", "doc": "
\n", "default_value": "<EventType.EVENT: 'EVENT'>"}, {"fullname": "spond_classes.EventType.RECURRING", "modulename": "spond_classes", "qualname": "EventType.RECURRING", "kind": "variable", "doc": "
\n", "default_value": "<EventType.RECURRING: 'RECURRING'>"}, {"fullname": "spond_classes.Group", "modulename": "spond_classes", "qualname": "Group", "kind": "class", "doc": "Represents a group in the Spond system.
\n\nGroups data is retrieved from the groups
API endpoint.
\n\nA Group
has:
\n\n\nzero, one or more Member
s \nzero, one or more Role
s \nzero, one or more Subgroup
s \n \n", "bases": "pydantic.main.BaseModel"}, {"fullname": "spond_classes.Group.uid", "modulename": "spond_classes", "qualname": "Group.uid", "kind": "variable", "doc": "id
in API; aliased as that's a Python built-in, and the Spond package\nuses uid
.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Group.name", "modulename": "spond_classes", "qualname": "Group.name", "kind": "variable", "doc": "
\n", "annotation": ": str"}, {"fullname": "spond_classes.Group.members", "modulename": "spond_classes", "qualname": "Group.members", "kind": "variable", "doc": "Member
s belonging to the Group
. Derived from members
in API.
\n", "annotation": ": list[spond_classes.member.Member]"}, {"fullname": "spond_classes.Group.roles", "modulename": "spond_classes", "qualname": "Group.roles", "kind": "variable", "doc": "Role
s belonging to the Group
. Derived from roles
in API.
\n", "annotation": ": list[spond_classes.role.Role]"}, {"fullname": "spond_classes.Group.subgroups", "modulename": "spond_classes", "qualname": "Group.subgroups", "kind": "variable", "doc": "Subgroup
s belonging to the Group
. Derived from subGroups
in API.
\n", "annotation": ": list[spond_classes.subgroup.Subgroup]"}, {"fullname": "spond_classes.Group.member_by_id", "modulename": "spond_classes", "qualname": "Group.member_by_id", "kind": "function", "doc": "Return the Member
with matching ID.
\n\nParameters \n\n\nmember_uid : ID to look up. \n \n\nReturns \n\n\n\nRaises \n\n\nLookupError : If uid
is not found. \n \n", "signature": "(self , member_uid : str ) -> spond_classes . member . Member : ", "funcdef": "def"}, {"fullname": "spond_classes.Group.role_by_id", "modulename": "spond_classes", "qualname": "Group.role_by_id", "kind": "function", "doc": "Return the Role
with matching ID.
\n\nParameters \n\n\nrole_uid : ID to look up. \n \n\nReturns \n\n\n\nRaises \n\n\nLookupError : If uid
is not found. \n \n", "signature": "(self , role_uid : str ) -> spond_classes . role . Role : ", "funcdef": "def"}, {"fullname": "spond_classes.Group.subgroup_by_id", "modulename": "spond_classes", "qualname": "Group.subgroup_by_id", "kind": "function", "doc": "Return the Subgroup
with matching ID.
\n\nParameters \n\n\nsubgroup_uid : ID to look up. \n \n\nReturns \n\n\n\nRaises \n\n\nLookupError : If uid
is not found. \n \n", "signature": "(self , subgroup_uid : str ) -> spond_classes . subgroup . Subgroup : ", "funcdef": "def"}, {"fullname": "spond_classes.Group.members_by_subgroup", "modulename": "spond_classes", "qualname": "Group.members_by_subgroup", "kind": "function", "doc": "Return Member
s in the Subgroup
.
\n\nParameters \n\n\nsubgroup : Subgroup
from which to return Member
s. \n \n\nReturns \n\n\n\nRaises \n\n\nTypeError : If subgroup
is not a Subgroup
instance. \n \n", "signature": "(\tself , \tsubgroup : spond_classes . subgroup . Subgroup ) -> list [ spond_classes . member . Member ] : ", "funcdef": "def"}, {"fullname": "spond_classes.Group.members_by_role", "modulename": "spond_classes", "qualname": "Group.members_by_role", "kind": "function", "doc": "Return Member
s with the Role
.
\n\nParameters \n\n\nrole : Role
from which to return Member
s. \n \n\nReturns \n\n\n\nRaises \n\n\nTypeError : If role
is not a Role
instance. \n \n", "signature": "(self , role : spond_classes . role . Role ) -> list [ spond_classes . member . Member ] : ", "funcdef": "def"}, {"fullname": "spond_classes.Group.model_config", "modulename": "spond_classes", "qualname": "Group.model_config", "kind": "variable", "doc": "Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
\n", "annotation": ": ClassVar[pydantic.config.ConfigDict]", "default_value": "{}"}, {"fullname": "spond_classes.Group.model_fields", "modulename": "spond_classes", "qualname": "Group.model_fields", "kind": "variable", "doc": "Metadata about the fields defined on the model,\nmapping of field names to [FieldInfo
][pydantic.fields.FieldInfo] objects.
\n\nThis replaces Model.__fields__
from Pydantic V1.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.FieldInfo]]", "default_value": "{'uid': FieldInfo(annotation=str, required=True, alias='id', alias_priority=2), 'name': FieldInfo(annotation=str, required=True), 'members': FieldInfo(annotation=list[Member], required=True), 'roles': FieldInfo(annotation=list[Role], required=True), 'subgroups': FieldInfo(annotation=list[Subgroup], required=True, alias='subGroups', alias_priority=2)}"}, {"fullname": "spond_classes.Group.model_computed_fields", "modulename": "spond_classes", "qualname": "Group.model_computed_fields", "kind": "variable", "doc": "A dictionary of computed field names and their corresponding ComputedFieldInfo
objects.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]]", "default_value": "{}"}, {"fullname": "spond_classes.Member", "modulename": "spond_classes", "qualname": "Member", "kind": "class", "doc": "Represents a member in the Spond system.
\n\nA Member
is an individual's Group
-specific record.
\n\nA Member
may have a Profile
.
\n", "bases": "pydantic.main.BaseModel"}, {"fullname": "spond_classes.Member.uid", "modulename": "spond_classes", "qualname": "Member.uid", "kind": "variable", "doc": "id
in API; aliased as that's a Python built-in, and the Spond package\nuses uid
.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Member.created_time", "modulename": "spond_classes", "qualname": "Member.created_time", "kind": "variable", "doc": "Derived from createdTime
in API.
\n", "annotation": ": datetime.datetime"}, {"fullname": "spond_classes.Member.first_name", "modulename": "spond_classes", "qualname": "Member.first_name", "kind": "variable", "doc": "firstName
in API.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Member.last_name", "modulename": "spond_classes", "qualname": "Member.last_name", "kind": "variable", "doc": "lastName
in API.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Member.subgroup_uids", "modulename": "spond_classes", "qualname": "Member.subgroup_uids", "kind": "variable", "doc": "subGroups
in API; aliased to avoid confusion with Subgroup
instances.
\n", "annotation": ": list[str]"}, {"fullname": "spond_classes.Member.email", "modulename": "spond_classes", "qualname": "Member.email", "kind": "variable", "doc": "
\n", "annotation": ": str | None"}, {"fullname": "spond_classes.Member.phone_number", "modulename": "spond_classes", "qualname": "Member.phone_number", "kind": "variable", "doc": "phoneNumber
in API.
\n", "annotation": ": str | None"}, {"fullname": "spond_classes.Member.profile", "modulename": "spond_classes", "qualname": "Member.profile", "kind": "variable", "doc": "Derived from profile
in API.
\n", "annotation": ": spond_classes.profile_.Profile | None"}, {"fullname": "spond_classes.Member.role_uids", "modulename": "spond_classes", "qualname": "Member.role_uids", "kind": "variable", "doc": "roles
in API; aliased to avoid confusion with Role
instances.
\n", "annotation": ": list[str] | None"}, {"fullname": "spond_classes.Member.full_name", "modulename": "spond_classes", "qualname": "Member.full_name", "kind": "variable", "doc": "Return the Member
's full name, for convenience.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Member.model_config", "modulename": "spond_classes", "qualname": "Member.model_config", "kind": "variable", "doc": "Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
\n", "annotation": ": ClassVar[pydantic.config.ConfigDict]", "default_value": "{}"}, {"fullname": "spond_classes.Member.model_fields", "modulename": "spond_classes", "qualname": "Member.model_fields", "kind": "variable", "doc": "Metadata about the fields defined on the model,\nmapping of field names to [FieldInfo
][pydantic.fields.FieldInfo] objects.
\n\nThis replaces Model.__fields__
from Pydantic V1.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.FieldInfo]]", "default_value": "{'uid': FieldInfo(annotation=str, required=True, alias='id', alias_priority=2), 'created_time': FieldInfo(annotation=datetime, required=True, alias='createdTime', alias_priority=2), 'first_name': FieldInfo(annotation=str, required=True, alias='firstName', alias_priority=2), 'last_name': FieldInfo(annotation=str, required=True, alias='lastName', alias_priority=2), 'subgroup_uids': FieldInfo(annotation=list[str], required=True, alias='subGroups', alias_priority=2), 'email': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'phone_number': FieldInfo(annotation=Union[str, NoneType], required=False, default=None, alias='phoneNumber', alias_priority=2), 'profile': FieldInfo(annotation=Union[Profile, NoneType], required=False, default=None), 'role_uids': FieldInfo(annotation=Union[list[str], NoneType], required=False, default=None, alias='roles', alias_priority=2)}"}, {"fullname": "spond_classes.Member.model_computed_fields", "modulename": "spond_classes", "qualname": "Member.model_computed_fields", "kind": "variable", "doc": "A dictionary of computed field names and their corresponding ComputedFieldInfo
objects.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]]", "default_value": "{}"}, {"fullname": "spond_classes.Profile", "modulename": "spond_classes", "qualname": "Profile", "kind": "class", "doc": "Represents a profile in the Spond system.
\n\nA Profile
is an individual's account-specific record.
\n\nA Profile
belongs to a Member
.
\n", "bases": "pydantic.main.BaseModel"}, {"fullname": "spond_classes.Profile.uid", "modulename": "spond_classes", "qualname": "Profile.uid", "kind": "variable", "doc": "id
in API; aliased as that's a Python built-in, and the Spond package\nuses uid
.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Profile.first_name", "modulename": "spond_classes", "qualname": "Profile.first_name", "kind": "variable", "doc": "firstName
in API.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Profile.last_name", "modulename": "spond_classes", "qualname": "Profile.last_name", "kind": "variable", "doc": "lastName
in API.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Profile.email", "modulename": "spond_classes", "qualname": "Profile.email", "kind": "variable", "doc": "
\n", "annotation": ": str | None"}, {"fullname": "spond_classes.Profile.phone_number", "modulename": "spond_classes", "qualname": "Profile.phone_number", "kind": "variable", "doc": "phoneNumber
in API.
\n", "annotation": ": str | None"}, {"fullname": "spond_classes.Profile.full_name", "modulename": "spond_classes", "qualname": "Profile.full_name", "kind": "variable", "doc": "Return the Profile
's full name, for convenience.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Profile.model_config", "modulename": "spond_classes", "qualname": "Profile.model_config", "kind": "variable", "doc": "Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
\n", "annotation": ": ClassVar[pydantic.config.ConfigDict]", "default_value": "{}"}, {"fullname": "spond_classes.Profile.model_fields", "modulename": "spond_classes", "qualname": "Profile.model_fields", "kind": "variable", "doc": "Metadata about the fields defined on the model,\nmapping of field names to [FieldInfo
][pydantic.fields.FieldInfo] objects.
\n\nThis replaces Model.__fields__
from Pydantic V1.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.FieldInfo]]", "default_value": "{'uid': FieldInfo(annotation=str, required=True, alias='id', alias_priority=2), 'first_name': FieldInfo(annotation=str, required=True, alias='firstName', alias_priority=2), 'last_name': FieldInfo(annotation=str, required=True, alias='lastName', alias_priority=2), 'email': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'phone_number': FieldInfo(annotation=Union[str, NoneType], required=False, default=None, alias='phoneNumber', alias_priority=2)}"}, {"fullname": "spond_classes.Profile.model_computed_fields", "modulename": "spond_classes", "qualname": "Profile.model_computed_fields", "kind": "variable", "doc": "A dictionary of computed field names and their corresponding ComputedFieldInfo
objects.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]]", "default_value": "{}"}, {"fullname": "spond_classes.Role", "modulename": "spond_classes", "qualname": "Role", "kind": "class", "doc": "Represents a role in the Spond system.
\n\nA Role
belongs to a Group
.
\n\nUse Group.members_by_role()
to get subordinate Member
s.
\n", "bases": "pydantic.main.BaseModel"}, {"fullname": "spond_classes.Role.uid", "modulename": "spond_classes", "qualname": "Role.uid", "kind": "variable", "doc": "id
in API; aliased as that's a Python built-in, and the Spond package\nuses uid
.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Role.name", "modulename": "spond_classes", "qualname": "Role.name", "kind": "variable", "doc": "
\n", "annotation": ": str"}, {"fullname": "spond_classes.Role.model_config", "modulename": "spond_classes", "qualname": "Role.model_config", "kind": "variable", "doc": "Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
\n", "annotation": ": ClassVar[pydantic.config.ConfigDict]", "default_value": "{}"}, {"fullname": "spond_classes.Role.model_fields", "modulename": "spond_classes", "qualname": "Role.model_fields", "kind": "variable", "doc": "Metadata about the fields defined on the model,\nmapping of field names to [FieldInfo
][pydantic.fields.FieldInfo] objects.
\n\nThis replaces Model.__fields__
from Pydantic V1.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.FieldInfo]]", "default_value": "{'uid': FieldInfo(annotation=str, required=True, alias='id', alias_priority=2), 'name': FieldInfo(annotation=str, required=True)}"}, {"fullname": "spond_classes.Role.model_computed_fields", "modulename": "spond_classes", "qualname": "Role.model_computed_fields", "kind": "variable", "doc": "A dictionary of computed field names and their corresponding ComputedFieldInfo
objects.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]]", "default_value": "{}"}, {"fullname": "spond_classes.Subgroup", "modulename": "spond_classes", "qualname": "Subgroup", "kind": "class", "doc": "Represents a subgroup in the Spond system.
\n\nA Subgroup
belongs to a Group
.
\n\nUse Group.members_by_subgroup()
to get subordinate Member
s.
\n", "bases": "pydantic.main.BaseModel"}, {"fullname": "spond_classes.Subgroup.uid", "modulename": "spond_classes", "qualname": "Subgroup.uid", "kind": "variable", "doc": "id
in API; aliased as that's a Python built-in, and the Spond package\nuses uid
.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Subgroup.name", "modulename": "spond_classes", "qualname": "Subgroup.name", "kind": "variable", "doc": "
\n", "annotation": ": str"}, {"fullname": "spond_classes.Subgroup.model_config", "modulename": "spond_classes", "qualname": "Subgroup.model_config", "kind": "variable", "doc": "Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
\n", "annotation": ": ClassVar[pydantic.config.ConfigDict]", "default_value": "{}"}, {"fullname": "spond_classes.Subgroup.model_fields", "modulename": "spond_classes", "qualname": "Subgroup.model_fields", "kind": "variable", "doc": "Metadata about the fields defined on the model,\nmapping of field names to [FieldInfo
][pydantic.fields.FieldInfo] objects.
\n\nThis replaces Model.__fields__
from Pydantic V1.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.FieldInfo]]", "default_value": "{'uid': FieldInfo(annotation=str, required=True, alias='id', alias_priority=2), 'name': FieldInfo(annotation=str, required=True)}"}, {"fullname": "spond_classes.Subgroup.model_computed_fields", "modulename": "spond_classes", "qualname": "Subgroup.model_computed_fields", "kind": "variable", "doc": "A dictionary of computed field names and their corresponding ComputedFieldInfo
objects.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]]", "default_value": "{}"}];
+ /** pdoc search index */const docs = [{"fullname": "spond_classes", "modulename": "spond_classes", "kind": "module", "doc": "Main module.
\n"}, {"fullname": "spond_classes.Event", "modulename": "spond_classes", "qualname": "Event", "kind": "class", "doc": "Represents an event in the Spond system.
\n\nEvents data is retrieved from the events
API endpoint.
\n", "bases": "pydantic.main.BaseModel"}, {"fullname": "spond_classes.Event.uid", "modulename": "spond_classes", "qualname": "Event.uid", "kind": "variable", "doc": "id
in API; aliased as that's a Python built-in, and the Spond package\nuses uid
.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Event.heading", "modulename": "spond_classes", "qualname": "Event.heading", "kind": "variable", "doc": "
\n", "annotation": ": str"}, {"fullname": "spond_classes.Event.responses", "modulename": "spond_classes", "qualname": "Event.responses", "kind": "variable", "doc": "
\n", "annotation": ": spond_classes.event.Responses"}, {"fullname": "spond_classes.Event.type", "modulename": "spond_classes", "qualname": "Event.type", "kind": "variable", "doc": "
\n", "annotation": ": spond_classes.event.EventType"}, {"fullname": "spond_classes.Event.created_time", "modulename": "spond_classes", "qualname": "Event.created_time", "kind": "variable", "doc": "Derived from createdTime
in API.
\n", "annotation": ": datetime.datetime"}, {"fullname": "spond_classes.Event.end_time", "modulename": "spond_classes", "qualname": "Event.end_time", "kind": "variable", "doc": "Datetime at which the Event
ends.\nDerived from endTimestamp
in API.
\n", "annotation": ": datetime.datetime"}, {"fullname": "spond_classes.Event.start_time", "modulename": "spond_classes", "qualname": "Event.start_time", "kind": "variable", "doc": "Datetime at which the Event
starts.\nDerived from startTimestamp
in API.
\n", "annotation": ": datetime.datetime"}, {"fullname": "spond_classes.Event.cancelled", "modulename": "spond_classes", "qualname": "Event.cancelled", "kind": "variable", "doc": "Optional.
\n", "annotation": ": bool | None"}, {"fullname": "spond_classes.Event.invite_time", "modulename": "spond_classes", "qualname": "Event.invite_time", "kind": "variable", "doc": "Optional.\nDerived from inviteTime
in API.
\n", "annotation": ": datetime.datetime | None"}, {"fullname": "spond_classes.Event.url", "modulename": "spond_classes", "qualname": "Event.url", "kind": "variable", "doc": "Return the URL of the Event
, for convenience.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Event.model_config", "modulename": "spond_classes", "qualname": "Event.model_config", "kind": "variable", "doc": "Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
\n", "annotation": ": ClassVar[pydantic.config.ConfigDict]", "default_value": "{}"}, {"fullname": "spond_classes.Event.model_fields", "modulename": "spond_classes", "qualname": "Event.model_fields", "kind": "variable", "doc": "Metadata about the fields defined on the model,\nmapping of field names to [FieldInfo
][pydantic.fields.FieldInfo] objects.
\n\nThis replaces Model.__fields__
from Pydantic V1.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.FieldInfo]]", "default_value": "{'uid': FieldInfo(annotation=str, required=True, alias='id', alias_priority=2), 'heading': FieldInfo(annotation=str, required=True), 'responses': FieldInfo(annotation=Responses, required=True), 'type': FieldInfo(annotation=EventType, required=True), 'created_time': FieldInfo(annotation=datetime, required=True, alias='createdTime', alias_priority=2), 'end_time': FieldInfo(annotation=datetime, required=True, alias='endTimestamp', alias_priority=2), 'start_time': FieldInfo(annotation=datetime, required=True, alias='startTimestamp', alias_priority=2), 'cancelled': FieldInfo(annotation=Union[bool, NoneType], required=False, default=None), 'invite_time': FieldInfo(annotation=Union[datetime, NoneType], required=False, default=None, alias='inviteTime', alias_priority=2)}"}, {"fullname": "spond_classes.Event.model_computed_fields", "modulename": "spond_classes", "qualname": "Event.model_computed_fields", "kind": "variable", "doc": "A dictionary of computed field names and their corresponding ComputedFieldInfo
objects.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]]", "default_value": "{}"}, {"fullname": "spond_classes.EventType", "modulename": "spond_classes", "qualname": "EventType", "kind": "class", "doc": "Represents the kind of Event
.
\n", "bases": "enum.Enum"}, {"fullname": "spond_classes.EventType.EVENT", "modulename": "spond_classes", "qualname": "EventType.EVENT", "kind": "variable", "doc": "
\n", "default_value": "<EventType.EVENT: 'EVENT'>"}, {"fullname": "spond_classes.EventType.RECURRING", "modulename": "spond_classes", "qualname": "EventType.RECURRING", "kind": "variable", "doc": "
\n", "default_value": "<EventType.RECURRING: 'RECURRING'>"}, {"fullname": "spond_classes.Responses", "modulename": "spond_classes", "qualname": "Responses", "kind": "class", "doc": "Represents the responses to an Event
.
\n", "bases": "pydantic.main.BaseModel"}, {"fullname": "spond_classes.Responses.accepted_uids", "modulename": "spond_classes", "qualname": "Responses.accepted_uids", "kind": "variable", "doc": "acceptedIds
in API.
\n", "annotation": ": list[str]"}, {"fullname": "spond_classes.Responses.declined_uids", "modulename": "spond_classes", "qualname": "Responses.declined_uids", "kind": "variable", "doc": "declinedIds
in API.
\n", "annotation": ": list[str]"}, {"fullname": "spond_classes.Responses.unanswered_uids", "modulename": "spond_classes", "qualname": "Responses.unanswered_uids", "kind": "variable", "doc": "unansweredIds
in API.
\n", "annotation": ": list[str]"}, {"fullname": "spond_classes.Responses.waiting_list_uids", "modulename": "spond_classes", "qualname": "Responses.waiting_list_uids", "kind": "variable", "doc": "waitinglistIds
in API.
\n", "annotation": ": list[str]"}, {"fullname": "spond_classes.Responses.unconfirmed_uids", "modulename": "spond_classes", "qualname": "Responses.unconfirmed_uids", "kind": "variable", "doc": "unconfirmedIds
in API.
\n", "annotation": ": list[str]"}, {"fullname": "spond_classes.Responses.model_config", "modulename": "spond_classes", "qualname": "Responses.model_config", "kind": "variable", "doc": "Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
\n", "annotation": ": ClassVar[pydantic.config.ConfigDict]", "default_value": "{}"}, {"fullname": "spond_classes.Responses.model_fields", "modulename": "spond_classes", "qualname": "Responses.model_fields", "kind": "variable", "doc": "Metadata about the fields defined on the model,\nmapping of field names to [FieldInfo
][pydantic.fields.FieldInfo] objects.
\n\nThis replaces Model.__fields__
from Pydantic V1.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.FieldInfo]]", "default_value": "{'accepted_uids': FieldInfo(annotation=list[str], required=True, alias='acceptedIds', alias_priority=2), 'declined_uids': FieldInfo(annotation=list[str], required=True, alias='declinedIds', alias_priority=2), 'unanswered_uids': FieldInfo(annotation=list[str], required=True, alias='unansweredIds', alias_priority=2), 'waiting_list_uids': FieldInfo(annotation=list[str], required=True, alias='waitinglistIds', alias_priority=2), 'unconfirmed_uids': FieldInfo(annotation=list[str], required=True, alias='unconfirmedIds', alias_priority=2)}"}, {"fullname": "spond_classes.Responses.model_computed_fields", "modulename": "spond_classes", "qualname": "Responses.model_computed_fields", "kind": "variable", "doc": "A dictionary of computed field names and their corresponding ComputedFieldInfo
objects.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]]", "default_value": "{}"}, {"fullname": "spond_classes.Group", "modulename": "spond_classes", "qualname": "Group", "kind": "class", "doc": "Represents a group in the Spond system.
\n\nGroups data is retrieved from the groups
API endpoint.
\n\nA Group
has:
\n\n\nzero, one or more Member
s \nzero, one or more Role
s \nzero, one or more Subgroup
s \n \n", "bases": "pydantic.main.BaseModel"}, {"fullname": "spond_classes.Group.uid", "modulename": "spond_classes", "qualname": "Group.uid", "kind": "variable", "doc": "id
in API; aliased as that's a Python built-in, and the Spond package\nuses uid
.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Group.name", "modulename": "spond_classes", "qualname": "Group.name", "kind": "variable", "doc": "
\n", "annotation": ": str"}, {"fullname": "spond_classes.Group.members", "modulename": "spond_classes", "qualname": "Group.members", "kind": "variable", "doc": "Member
s belonging to the Group
. Derived from members
in API.
\n", "annotation": ": list[spond_classes.member.Member]"}, {"fullname": "spond_classes.Group.roles", "modulename": "spond_classes", "qualname": "Group.roles", "kind": "variable", "doc": "Role
s belonging to the Group
. Derived from roles
in API.
\n", "annotation": ": list[spond_classes.role.Role]"}, {"fullname": "spond_classes.Group.subgroups", "modulename": "spond_classes", "qualname": "Group.subgroups", "kind": "variable", "doc": "Subgroup
s belonging to the Group
. Derived from subGroups
in API.
\n", "annotation": ": list[spond_classes.subgroup.Subgroup]"}, {"fullname": "spond_classes.Group.member_by_id", "modulename": "spond_classes", "qualname": "Group.member_by_id", "kind": "function", "doc": "Return the Member
with matching ID.
\n\nParameters \n\n\nmember_uid : ID to look up. \n \n\nReturns \n\n\n\nRaises \n\n\nLookupError : If uid
is not found. \n \n", "signature": "(self , member_uid : str ) -> spond_classes . member . Member : ", "funcdef": "def"}, {"fullname": "spond_classes.Group.role_by_id", "modulename": "spond_classes", "qualname": "Group.role_by_id", "kind": "function", "doc": "Return the Role
with matching ID.
\n\nParameters \n\n\nrole_uid : ID to look up. \n \n\nReturns \n\n\n\nRaises \n\n\nLookupError : If uid
is not found. \n \n", "signature": "(self , role_uid : str ) -> spond_classes . role . Role : ", "funcdef": "def"}, {"fullname": "spond_classes.Group.subgroup_by_id", "modulename": "spond_classes", "qualname": "Group.subgroup_by_id", "kind": "function", "doc": "Return the Subgroup
with matching ID.
\n\nParameters \n\n\nsubgroup_uid : ID to look up. \n \n\nReturns \n\n\n\nRaises \n\n\nLookupError : If uid
is not found. \n \n", "signature": "(self , subgroup_uid : str ) -> spond_classes . subgroup . Subgroup : ", "funcdef": "def"}, {"fullname": "spond_classes.Group.members_by_subgroup", "modulename": "spond_classes", "qualname": "Group.members_by_subgroup", "kind": "function", "doc": "Return Member
s in the Subgroup
.
\n\nParameters \n\n\nsubgroup : Subgroup
from which to return Member
s. \n \n\nReturns \n\n\n\nRaises \n\n\nTypeError : If subgroup
is not a Subgroup
instance. \n \n", "signature": "(\tself , \tsubgroup : spond_classes . subgroup . Subgroup ) -> list [ spond_classes . member . Member ] : ", "funcdef": "def"}, {"fullname": "spond_classes.Group.members_by_role", "modulename": "spond_classes", "qualname": "Group.members_by_role", "kind": "function", "doc": "Return Member
s with the Role
.
\n\nParameters \n\n\nrole : Role
from which to return Member
s. \n \n\nReturns \n\n\n\nRaises \n\n\nTypeError : If role
is not a Role
instance. \n \n", "signature": "(self , role : spond_classes . role . Role ) -> list [ spond_classes . member . Member ] : ", "funcdef": "def"}, {"fullname": "spond_classes.Group.model_config", "modulename": "spond_classes", "qualname": "Group.model_config", "kind": "variable", "doc": "Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
\n", "annotation": ": ClassVar[pydantic.config.ConfigDict]", "default_value": "{}"}, {"fullname": "spond_classes.Group.model_fields", "modulename": "spond_classes", "qualname": "Group.model_fields", "kind": "variable", "doc": "Metadata about the fields defined on the model,\nmapping of field names to [FieldInfo
][pydantic.fields.FieldInfo] objects.
\n\nThis replaces Model.__fields__
from Pydantic V1.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.FieldInfo]]", "default_value": "{'uid': FieldInfo(annotation=str, required=True, alias='id', alias_priority=2), 'name': FieldInfo(annotation=str, required=True), 'members': FieldInfo(annotation=list[Member], required=True), 'roles': FieldInfo(annotation=list[Role], required=True), 'subgroups': FieldInfo(annotation=list[Subgroup], required=True, alias='subGroups', alias_priority=2)}"}, {"fullname": "spond_classes.Group.model_computed_fields", "modulename": "spond_classes", "qualname": "Group.model_computed_fields", "kind": "variable", "doc": "A dictionary of computed field names and their corresponding ComputedFieldInfo
objects.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]]", "default_value": "{}"}, {"fullname": "spond_classes.Member", "modulename": "spond_classes", "qualname": "Member", "kind": "class", "doc": "Represents a member in the Spond system.
\n\nA Member
is an individual's Group
-specific record.
\n\nA Member
may have a Profile
.
\n", "bases": "pydantic.main.BaseModel"}, {"fullname": "spond_classes.Member.uid", "modulename": "spond_classes", "qualname": "Member.uid", "kind": "variable", "doc": "id
in API; aliased as that's a Python built-in, and the Spond package\nuses uid
.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Member.created_time", "modulename": "spond_classes", "qualname": "Member.created_time", "kind": "variable", "doc": "Derived from createdTime
in API.
\n", "annotation": ": datetime.datetime"}, {"fullname": "spond_classes.Member.first_name", "modulename": "spond_classes", "qualname": "Member.first_name", "kind": "variable", "doc": "firstName
in API.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Member.last_name", "modulename": "spond_classes", "qualname": "Member.last_name", "kind": "variable", "doc": "lastName
in API.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Member.subgroup_uids", "modulename": "spond_classes", "qualname": "Member.subgroup_uids", "kind": "variable", "doc": "subGroups
in API; aliased to avoid confusion with Subgroup
instances.
\n", "annotation": ": list[str]"}, {"fullname": "spond_classes.Member.email", "modulename": "spond_classes", "qualname": "Member.email", "kind": "variable", "doc": "
\n", "annotation": ": str | None"}, {"fullname": "spond_classes.Member.phone_number", "modulename": "spond_classes", "qualname": "Member.phone_number", "kind": "variable", "doc": "phoneNumber
in API.
\n", "annotation": ": str | None"}, {"fullname": "spond_classes.Member.profile", "modulename": "spond_classes", "qualname": "Member.profile", "kind": "variable", "doc": "Derived from profile
in API.
\n", "annotation": ": spond_classes.profile_.Profile | None"}, {"fullname": "spond_classes.Member.role_uids", "modulename": "spond_classes", "qualname": "Member.role_uids", "kind": "variable", "doc": "roles
in API; aliased to avoid confusion with Role
instances.
\n", "annotation": ": list[str] | None"}, {"fullname": "spond_classes.Member.full_name", "modulename": "spond_classes", "qualname": "Member.full_name", "kind": "variable", "doc": "Return the Member
's full name, for convenience.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Member.model_config", "modulename": "spond_classes", "qualname": "Member.model_config", "kind": "variable", "doc": "Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
\n", "annotation": ": ClassVar[pydantic.config.ConfigDict]", "default_value": "{}"}, {"fullname": "spond_classes.Member.model_fields", "modulename": "spond_classes", "qualname": "Member.model_fields", "kind": "variable", "doc": "Metadata about the fields defined on the model,\nmapping of field names to [FieldInfo
][pydantic.fields.FieldInfo] objects.
\n\nThis replaces Model.__fields__
from Pydantic V1.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.FieldInfo]]", "default_value": "{'uid': FieldInfo(annotation=str, required=True, alias='id', alias_priority=2), 'created_time': FieldInfo(annotation=datetime, required=True, alias='createdTime', alias_priority=2), 'first_name': FieldInfo(annotation=str, required=True, alias='firstName', alias_priority=2), 'last_name': FieldInfo(annotation=str, required=True, alias='lastName', alias_priority=2), 'subgroup_uids': FieldInfo(annotation=list[str], required=True, alias='subGroups', alias_priority=2), 'email': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'phone_number': FieldInfo(annotation=Union[str, NoneType], required=False, default=None, alias='phoneNumber', alias_priority=2), 'profile': FieldInfo(annotation=Union[Profile, NoneType], required=False, default=None), 'role_uids': FieldInfo(annotation=Union[list[str], NoneType], required=False, default=None, alias='roles', alias_priority=2)}"}, {"fullname": "spond_classes.Member.model_computed_fields", "modulename": "spond_classes", "qualname": "Member.model_computed_fields", "kind": "variable", "doc": "A dictionary of computed field names and their corresponding ComputedFieldInfo
objects.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]]", "default_value": "{}"}, {"fullname": "spond_classes.Profile", "modulename": "spond_classes", "qualname": "Profile", "kind": "class", "doc": "Represents a profile in the Spond system.
\n\nA Profile
is an individual's account-specific record.
\n\nA Profile
belongs to a Member
.
\n", "bases": "pydantic.main.BaseModel"}, {"fullname": "spond_classes.Profile.uid", "modulename": "spond_classes", "qualname": "Profile.uid", "kind": "variable", "doc": "id
in API; aliased as that's a Python built-in, and the Spond package\nuses uid
.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Profile.first_name", "modulename": "spond_classes", "qualname": "Profile.first_name", "kind": "variable", "doc": "firstName
in API.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Profile.last_name", "modulename": "spond_classes", "qualname": "Profile.last_name", "kind": "variable", "doc": "lastName
in API.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Profile.email", "modulename": "spond_classes", "qualname": "Profile.email", "kind": "variable", "doc": "
\n", "annotation": ": str | None"}, {"fullname": "spond_classes.Profile.phone_number", "modulename": "spond_classes", "qualname": "Profile.phone_number", "kind": "variable", "doc": "phoneNumber
in API.
\n", "annotation": ": str | None"}, {"fullname": "spond_classes.Profile.full_name", "modulename": "spond_classes", "qualname": "Profile.full_name", "kind": "variable", "doc": "Return the Profile
's full name, for convenience.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Profile.model_config", "modulename": "spond_classes", "qualname": "Profile.model_config", "kind": "variable", "doc": "Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
\n", "annotation": ": ClassVar[pydantic.config.ConfigDict]", "default_value": "{}"}, {"fullname": "spond_classes.Profile.model_fields", "modulename": "spond_classes", "qualname": "Profile.model_fields", "kind": "variable", "doc": "Metadata about the fields defined on the model,\nmapping of field names to [FieldInfo
][pydantic.fields.FieldInfo] objects.
\n\nThis replaces Model.__fields__
from Pydantic V1.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.FieldInfo]]", "default_value": "{'uid': FieldInfo(annotation=str, required=True, alias='id', alias_priority=2), 'first_name': FieldInfo(annotation=str, required=True, alias='firstName', alias_priority=2), 'last_name': FieldInfo(annotation=str, required=True, alias='lastName', alias_priority=2), 'email': FieldInfo(annotation=Union[str, NoneType], required=False, default=None), 'phone_number': FieldInfo(annotation=Union[str, NoneType], required=False, default=None, alias='phoneNumber', alias_priority=2)}"}, {"fullname": "spond_classes.Profile.model_computed_fields", "modulename": "spond_classes", "qualname": "Profile.model_computed_fields", "kind": "variable", "doc": "A dictionary of computed field names and their corresponding ComputedFieldInfo
objects.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]]", "default_value": "{}"}, {"fullname": "spond_classes.Role", "modulename": "spond_classes", "qualname": "Role", "kind": "class", "doc": "Represents a role in the Spond system.
\n\nA Role
belongs to a Group
.
\n\nUse Group.members_by_role()
to get subordinate Member
s.
\n", "bases": "pydantic.main.BaseModel"}, {"fullname": "spond_classes.Role.uid", "modulename": "spond_classes", "qualname": "Role.uid", "kind": "variable", "doc": "id
in API; aliased as that's a Python built-in, and the Spond package\nuses uid
.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Role.name", "modulename": "spond_classes", "qualname": "Role.name", "kind": "variable", "doc": "
\n", "annotation": ": str"}, {"fullname": "spond_classes.Role.model_config", "modulename": "spond_classes", "qualname": "Role.model_config", "kind": "variable", "doc": "Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
\n", "annotation": ": ClassVar[pydantic.config.ConfigDict]", "default_value": "{}"}, {"fullname": "spond_classes.Role.model_fields", "modulename": "spond_classes", "qualname": "Role.model_fields", "kind": "variable", "doc": "Metadata about the fields defined on the model,\nmapping of field names to [FieldInfo
][pydantic.fields.FieldInfo] objects.
\n\nThis replaces Model.__fields__
from Pydantic V1.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.FieldInfo]]", "default_value": "{'uid': FieldInfo(annotation=str, required=True, alias='id', alias_priority=2), 'name': FieldInfo(annotation=str, required=True)}"}, {"fullname": "spond_classes.Role.model_computed_fields", "modulename": "spond_classes", "qualname": "Role.model_computed_fields", "kind": "variable", "doc": "A dictionary of computed field names and their corresponding ComputedFieldInfo
objects.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]]", "default_value": "{}"}, {"fullname": "spond_classes.Subgroup", "modulename": "spond_classes", "qualname": "Subgroup", "kind": "class", "doc": "Represents a subgroup in the Spond system.
\n\nA Subgroup
belongs to a Group
.
\n\nUse Group.members_by_subgroup()
to get subordinate Member
s.
\n", "bases": "pydantic.main.BaseModel"}, {"fullname": "spond_classes.Subgroup.uid", "modulename": "spond_classes", "qualname": "Subgroup.uid", "kind": "variable", "doc": "id
in API; aliased as that's a Python built-in, and the Spond package\nuses uid
.
\n", "annotation": ": str"}, {"fullname": "spond_classes.Subgroup.name", "modulename": "spond_classes", "qualname": "Subgroup.name", "kind": "variable", "doc": "
\n", "annotation": ": str"}, {"fullname": "spond_classes.Subgroup.model_config", "modulename": "spond_classes", "qualname": "Subgroup.model_config", "kind": "variable", "doc": "Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
\n", "annotation": ": ClassVar[pydantic.config.ConfigDict]", "default_value": "{}"}, {"fullname": "spond_classes.Subgroup.model_fields", "modulename": "spond_classes", "qualname": "Subgroup.model_fields", "kind": "variable", "doc": "Metadata about the fields defined on the model,\nmapping of field names to [FieldInfo
][pydantic.fields.FieldInfo] objects.
\n\nThis replaces Model.__fields__
from Pydantic V1.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.FieldInfo]]", "default_value": "{'uid': FieldInfo(annotation=str, required=True, alias='id', alias_priority=2), 'name': FieldInfo(annotation=str, required=True)}"}, {"fullname": "spond_classes.Subgroup.model_computed_fields", "modulename": "spond_classes", "qualname": "Subgroup.model_computed_fields", "kind": "variable", "doc": "A dictionary of computed field names and their corresponding ComputedFieldInfo
objects.
\n", "annotation": ": ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]]", "default_value": "{}"}];
// mirrored in build-search-index.js (part 1)
// Also split on html tags. this is a cheap heuristic, but good enough.
diff --git a/docs/spond_classes.html b/docs/spond_classes.html
index cd33067..425957a 100644
--- a/docs/spond_classes.html
+++ b/docs/spond_classes.html
@@ -79,6 +79,36 @@ API Documentation
+
+
+ Responses
+
+
Group
@@ -272,7 +302,7 @@
2
3 # Explicitly import classes and functions into the package namespace to define the API.
4
- 5 from .event import Event , EventType
+ 5 from .event import Event , EventType , Responses
6 from .group import Group
7 from .member import Member
8 from .profile_ import Profile
@@ -282,12 +312,13 @@
12 __all__ = [
13 "Event" ,
14 "EventType" ,
-15 "Group" ,
-16 "Member" ,
-17 "Profile" ,
-18 "Role" ,
-19 "Subgroup" ,
-20 ]
+15 "Responses" ,
+16 "Group" ,
+17 "Member" ,
+18 "Profile" ,
+19 "Role" ,
+20 "Subgroup" ,
+21 ]
@@ -383,7 +414,7 @@
-
responses : spond_classes.event.Responses
+
responses : Responses
@@ -585,6 +616,150 @@
+
+
+
+
+
+
+ class
+ Responses (pydantic.main.BaseModel ):
+
+ View Source
+
+
+
+ 10 class Responses ( BaseModel ):
+11 """Represents the responses to an `Event`."""
+12
+13 # Lists which always exist in API data, but may be empty
+14 accepted_uids : list [ str ] = Field ( alias = "acceptedIds" )
+15 """`acceptedIds` in API."""
+16 declined_uids : list [ str ] = Field ( alias = "declinedIds" )
+17 """`declinedIds` in API."""
+18 unanswered_uids : list [ str ] = Field ( alias = "unansweredIds" )
+19 """`unansweredIds` in API."""
+20 waiting_list_uids : list [ str ] = Field ( alias = "waitinglistIds" )
+21 """`waitinglistIds` in API."""
+22 unconfirmed_uids : list [ str ] = Field ( alias = "unconfirmedIds" )
+23 """`unconfirmedIds` in API."""
+
+
+
+ Represents the responses to an Event
.
+
+
+
+
+
+ accepted_uids : list[str]
+
+
+
+
+
+
+
+
+
+
+
+ declined_uids : list[str]
+
+
+
+
+
+
+
+
+
+
+
+ unanswered_uids : list[str]
+
+
+
+
+
+
+
+
+
+
+
+ waiting_list_uids : list[str]
+
+
+
+
+
+
+
+
+
+
+
+ unconfirmed_uids : list[str]
+
+
+
+
+
+
+
+
+
+
+
+ model_config : ClassVar[pydantic.config.ConfigDict] =
+{}
+
+
+
+
+
+
Configuration for the model, should be a dictionary conforming to [ConfigDict
][pydantic.config.ConfigDict].
+
+
+
+
+
+
+ model_fields : ClassVar[Dict[str, pydantic.fields.FieldInfo]] =
+
+ {'accepted_uids': FieldInfo(annotation=list[str], required=True, alias='acceptedIds', alias_priority=2), 'declined_uids': FieldInfo(annotation=list[str], required=True, alias='declinedIds', alias_priority=2), 'unanswered_uids': FieldInfo(annotation=list[str], required=True, alias='unansweredIds', alias_priority=2), 'waiting_list_uids': FieldInfo(annotation=list[str], required=True, alias='waitinglistIds', alias_priority=2), 'unconfirmed_uids': FieldInfo(annotation=list[str], required=True, alias='unconfirmedIds', alias_priority=2)}
+
+
+
+
+
+
Metadata about the fields defined on the model,
+mapping of field names to [FieldInfo
][pydantic.fields.FieldInfo] objects.
+
+
This replaces Model.__fields__
from Pydantic V1.
+
+
+
+
+
+
+ model_computed_fields : ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]] =
+{}
+
+
+
+
+
+
A dictionary of computed field names and their corresponding ComputedFieldInfo
objects.
+
+
+
diff --git a/pyproject.toml b/pyproject.toml
index 09fa018..b212c29 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -17,10 +17,10 @@ pydantic = ">=2.7.1"
[tool.poetry.group.dev.dependencies]
pdoc = "15.0.0"
pre-commit = "4.0.1"
-ruff = "0.6.9"
+ruff = "0.7.0"
[tool.poetry.group.test.dependencies]
-mypy = "1.11.2"
+mypy = "1.12.0"
pytest = "8.3.3"
[tool.mypy]
diff --git a/spond_classes/__init__.py b/spond_classes/__init__.py
index 9a1e19a..5dfc5bc 100644
--- a/spond_classes/__init__.py
+++ b/spond_classes/__init__.py
@@ -2,7 +2,7 @@
# Explicitly import classes and functions into the package namespace to define the API.
-from .event import Event, EventType
+from .event import Event, EventType, Responses
from .group import Group
from .member import Member
from .profile_ import Profile
@@ -12,6 +12,7 @@
__all__ = [
"Event",
"EventType",
+ "Responses",
"Group",
"Member",
"Profile",