Source code for boardgamegeek.objects.guild
"""
:mod:`boardgamegeek.guild` - Guild information
==============================================
.. module:: boardgamegeek.guild
:platform: Unix, Windows
:synopsis: classes for storing guild information
.. moduleauthor:: Cosmin Luță <q4break@gmail.com>
"""
from __future__ import annotations
import logging
from copy import copy
from typing import Any
from collections.abc import Generator
from .things import Thing
[docs]
class Guild(Thing):
"""
Class containing guild information
"""
def _format(self, log: logging.Logger) -> None:
log.info(f"id : {self.id}")
log.info(f"name : {self.name}")
log.info(f"category : {self.category}")
log.info(f"manager : {self.manager}")
log.info(f"website : {self.website}")
log.info(f"description: {self.description}")
log.info(f"country : {self.country}")
log.info(f"state : {self.state}")
log.info(f"city : {self.city}")
log.info(f"address : {self.address}")
log.info(f"postal code: {self.postalcode}")
if self.members:
log.info(f"{len(self.members)} members")
for i in self.members:
log.info(f" - {i}")
def __init__(self, data: dict[str, Any]):
kw = copy(data)
if "members" in kw:
self._members = set(kw.pop("members"))
else:
self._members = set()
super().__init__(kw)
@property
def country(self) -> str | None:
"""
:return: country
:rtype: str
:return: ``None`` if n/a
"""
return self._data.get("country")
@property
def city(self) -> str | None:
"""
:return: city
:rtype: str
:return: ``None`` if n/a
"""
return self._data.get("city")
@property
def address(self) -> str | None:
"""
:return: address (both fields concatenated)
:rtype: str
:return: ``None`` if n/a
"""
parts = [self._data.get("addr1"), self._data.get("addr2")]
str_parts: list[str] = [str(part) for part in parts if part]
return " ".join(str_parts) or None
@property
def addr1(self) -> str | None:
"""
:return: first field of the address
:rtype: str
:return: ``None`` if n/a
"""
return self._data.get("addr1")
@property
def addr2(self) -> str | None:
"""
:return: second field of the address
:rtype: str
:return: ``None`` if n/a
"""
return self._data.get("addr2")
@property
def postalcode(self) -> int | None:
"""
:return: postal code
:rtype: integer
:return: ``None`` if n/a
"""
return self._data.get("postalcode")
@property
def state(self) -> str | None:
"""
:return: state or provine
:rtype: str
:return: ``None`` if n/a
"""
return self._data.get("stateorprovince")
@property
def category(self) -> str | None:
"""
:return: category
:rtype: str
:return: ``None`` if n/a
"""
return self._data.get("category")
@property
def members(self) -> set[str]:
"""
:return: members of the guild
:rtype: set of str
"""
return self._members
@property
def members_count(self) -> int:
"""
:return: number of members, as reported by the server
:rtype: int
"""
return int(self._data.get("member_count", 0))
@property
def description(self) -> str | None:
"""
:return: description
:rtype: str
:return: ``None`` if n/a
"""
return self._data.get("description")
@property
def manager(self) -> str | None:
"""
:return: manager
:rtype: str
:return: ``None`` if n/a
"""
return self._data.get("manager")
@property
def website(self) -> str | None:
"""
:return: website address
:rtype: str
:return: ``None`` if n/a
"""
return self._data.get("website")
def add_member(self, member: str) -> None:
self._members.add(member)
def __len__(self) -> int:
return len(self._members)
def __repr__(self) -> str:
return f"Guild (id: {self.id})"
def __iter__(self) -> Generator[str]:
yield from self._members