Module hdrezka.post.info.person
Person information module.
Classes
class Person (url: str, *, name: str | None = None, client: HDRezkaClient | None = None)-
Expand source code
class Person: """Person information. Await the object to fetch full details from the site.""" __slots__ = ('image', 'name', 'name_transcription', 'id', 'career', 'birthday', 'birthplace', 'height', 'url', 'client') def __init__(self, url: str, *, name: str | None = None, client: 'HDRezkaClient | None' = None): """ Need await for full details. :param url: Person page URL. :param name: Optional display name override. :param client: Session used when awaiting (required to fetch details). """ self.url = url self.client = client self.height: float | None = None self.birthplace: Birthplace | None = None if m := _URL_ID_RE.search(url): id_, first, last = m.groups() self.id: int | None = int(id_) self.name_transcription = f'{first.capitalize()} {last.capitalize()}' else: self.name_transcription = '' self.id = None self.name = self.name_transcription if name is None else name def __await__(self): from .._utils import poster_and_soup if self.client is None: raise RuntimeError('Person has no HDRezkaClient; create via Post/client session') if not (ps := (yield from poster_and_soup(self.url, client=self.client).__await__())): return self soup, self.image = ps if name := soup.select_one('[itemprop="name"]'): self.name = name.text if name := soup.select_one('[itemprop="alternativeHeadline"]'): self.name_transcription = name.text table = soup.select_one('.b-post__info') self.career = *(i.text for i in table.select('[itemprop="jobTitle"]')), date = table.select_one('[itemprop="birthDate"]').attrs.get('datetime') self.birthday = datetime.strptime(date, '%Y-%m-%d').date() sel = table.select('td.l+td:not(:has(*))') if not sel: return self birthplace, *height = sel self.height = float(height[0].text.strip().removesuffix('м')) if height else None match [i.strip() for i in birthplace.text.split(',')]: case [city, state, subcountry, country]: self.birthplace = Birthplace(country=country, city=city, subcountry=subcountry, state=state) case [city, state, country]: self.birthplace = Birthplace(country=country, city=city, state=state) case [city, country]: self.birthplace = Birthplace(country=country, city=city) case [country]: self.birthplace = Birthplace(country=country) return self def __repr__(self): return f"Person({f'{self.url!r}, ' if self.url else ''}{f'name={self.name!r}' if self.name else ''})"Person information. Await the object to fetch full details from the site.
Need await for full details.
:param url: Person page URL. :param name: Optional display name override. :param client: Session used when awaiting (required to fetch details).
Instance variables
var birthday-
Expand source code
class Person: """Person information. Await the object to fetch full details from the site.""" __slots__ = ('image', 'name', 'name_transcription', 'id', 'career', 'birthday', 'birthplace', 'height', 'url', 'client') def __init__(self, url: str, *, name: str | None = None, client: 'HDRezkaClient | None' = None): """ Need await for full details. :param url: Person page URL. :param name: Optional display name override. :param client: Session used when awaiting (required to fetch details). """ self.url = url self.client = client self.height: float | None = None self.birthplace: Birthplace | None = None if m := _URL_ID_RE.search(url): id_, first, last = m.groups() self.id: int | None = int(id_) self.name_transcription = f'{first.capitalize()} {last.capitalize()}' else: self.name_transcription = '' self.id = None self.name = self.name_transcription if name is None else name def __await__(self): from .._utils import poster_and_soup if self.client is None: raise RuntimeError('Person has no HDRezkaClient; create via Post/client session') if not (ps := (yield from poster_and_soup(self.url, client=self.client).__await__())): return self soup, self.image = ps if name := soup.select_one('[itemprop="name"]'): self.name = name.text if name := soup.select_one('[itemprop="alternativeHeadline"]'): self.name_transcription = name.text table = soup.select_one('.b-post__info') self.career = *(i.text for i in table.select('[itemprop="jobTitle"]')), date = table.select_one('[itemprop="birthDate"]').attrs.get('datetime') self.birthday = datetime.strptime(date, '%Y-%m-%d').date() sel = table.select('td.l+td:not(:has(*))') if not sel: return self birthplace, *height = sel self.height = float(height[0].text.strip().removesuffix('м')) if height else None match [i.strip() for i in birthplace.text.split(',')]: case [city, state, subcountry, country]: self.birthplace = Birthplace(country=country, city=city, subcountry=subcountry, state=state) case [city, state, country]: self.birthplace = Birthplace(country=country, city=city, state=state) case [city, country]: self.birthplace = Birthplace(country=country, city=city) case [country]: self.birthplace = Birthplace(country=country) return self def __repr__(self): return f"Person({f'{self.url!r}, ' if self.url else ''}{f'name={self.name!r}' if self.name else ''})" var birthplace-
Expand source code
class Person: """Person information. Await the object to fetch full details from the site.""" __slots__ = ('image', 'name', 'name_transcription', 'id', 'career', 'birthday', 'birthplace', 'height', 'url', 'client') def __init__(self, url: str, *, name: str | None = None, client: 'HDRezkaClient | None' = None): """ Need await for full details. :param url: Person page URL. :param name: Optional display name override. :param client: Session used when awaiting (required to fetch details). """ self.url = url self.client = client self.height: float | None = None self.birthplace: Birthplace | None = None if m := _URL_ID_RE.search(url): id_, first, last = m.groups() self.id: int | None = int(id_) self.name_transcription = f'{first.capitalize()} {last.capitalize()}' else: self.name_transcription = '' self.id = None self.name = self.name_transcription if name is None else name def __await__(self): from .._utils import poster_and_soup if self.client is None: raise RuntimeError('Person has no HDRezkaClient; create via Post/client session') if not (ps := (yield from poster_and_soup(self.url, client=self.client).__await__())): return self soup, self.image = ps if name := soup.select_one('[itemprop="name"]'): self.name = name.text if name := soup.select_one('[itemprop="alternativeHeadline"]'): self.name_transcription = name.text table = soup.select_one('.b-post__info') self.career = *(i.text for i in table.select('[itemprop="jobTitle"]')), date = table.select_one('[itemprop="birthDate"]').attrs.get('datetime') self.birthday = datetime.strptime(date, '%Y-%m-%d').date() sel = table.select('td.l+td:not(:has(*))') if not sel: return self birthplace, *height = sel self.height = float(height[0].text.strip().removesuffix('м')) if height else None match [i.strip() for i in birthplace.text.split(',')]: case [city, state, subcountry, country]: self.birthplace = Birthplace(country=country, city=city, subcountry=subcountry, state=state) case [city, state, country]: self.birthplace = Birthplace(country=country, city=city, state=state) case [city, country]: self.birthplace = Birthplace(country=country, city=city) case [country]: self.birthplace = Birthplace(country=country) return self def __repr__(self): return f"Person({f'{self.url!r}, ' if self.url else ''}{f'name={self.name!r}' if self.name else ''})" var career-
Expand source code
class Person: """Person information. Await the object to fetch full details from the site.""" __slots__ = ('image', 'name', 'name_transcription', 'id', 'career', 'birthday', 'birthplace', 'height', 'url', 'client') def __init__(self, url: str, *, name: str | None = None, client: 'HDRezkaClient | None' = None): """ Need await for full details. :param url: Person page URL. :param name: Optional display name override. :param client: Session used when awaiting (required to fetch details). """ self.url = url self.client = client self.height: float | None = None self.birthplace: Birthplace | None = None if m := _URL_ID_RE.search(url): id_, first, last = m.groups() self.id: int | None = int(id_) self.name_transcription = f'{first.capitalize()} {last.capitalize()}' else: self.name_transcription = '' self.id = None self.name = self.name_transcription if name is None else name def __await__(self): from .._utils import poster_and_soup if self.client is None: raise RuntimeError('Person has no HDRezkaClient; create via Post/client session') if not (ps := (yield from poster_and_soup(self.url, client=self.client).__await__())): return self soup, self.image = ps if name := soup.select_one('[itemprop="name"]'): self.name = name.text if name := soup.select_one('[itemprop="alternativeHeadline"]'): self.name_transcription = name.text table = soup.select_one('.b-post__info') self.career = *(i.text for i in table.select('[itemprop="jobTitle"]')), date = table.select_one('[itemprop="birthDate"]').attrs.get('datetime') self.birthday = datetime.strptime(date, '%Y-%m-%d').date() sel = table.select('td.l+td:not(:has(*))') if not sel: return self birthplace, *height = sel self.height = float(height[0].text.strip().removesuffix('м')) if height else None match [i.strip() for i in birthplace.text.split(',')]: case [city, state, subcountry, country]: self.birthplace = Birthplace(country=country, city=city, subcountry=subcountry, state=state) case [city, state, country]: self.birthplace = Birthplace(country=country, city=city, state=state) case [city, country]: self.birthplace = Birthplace(country=country, city=city) case [country]: self.birthplace = Birthplace(country=country) return self def __repr__(self): return f"Person({f'{self.url!r}, ' if self.url else ''}{f'name={self.name!r}' if self.name else ''})" var client-
Expand source code
class Person: """Person information. Await the object to fetch full details from the site.""" __slots__ = ('image', 'name', 'name_transcription', 'id', 'career', 'birthday', 'birthplace', 'height', 'url', 'client') def __init__(self, url: str, *, name: str | None = None, client: 'HDRezkaClient | None' = None): """ Need await for full details. :param url: Person page URL. :param name: Optional display name override. :param client: Session used when awaiting (required to fetch details). """ self.url = url self.client = client self.height: float | None = None self.birthplace: Birthplace | None = None if m := _URL_ID_RE.search(url): id_, first, last = m.groups() self.id: int | None = int(id_) self.name_transcription = f'{first.capitalize()} {last.capitalize()}' else: self.name_transcription = '' self.id = None self.name = self.name_transcription if name is None else name def __await__(self): from .._utils import poster_and_soup if self.client is None: raise RuntimeError('Person has no HDRezkaClient; create via Post/client session') if not (ps := (yield from poster_and_soup(self.url, client=self.client).__await__())): return self soup, self.image = ps if name := soup.select_one('[itemprop="name"]'): self.name = name.text if name := soup.select_one('[itemprop="alternativeHeadline"]'): self.name_transcription = name.text table = soup.select_one('.b-post__info') self.career = *(i.text for i in table.select('[itemprop="jobTitle"]')), date = table.select_one('[itemprop="birthDate"]').attrs.get('datetime') self.birthday = datetime.strptime(date, '%Y-%m-%d').date() sel = table.select('td.l+td:not(:has(*))') if not sel: return self birthplace, *height = sel self.height = float(height[0].text.strip().removesuffix('м')) if height else None match [i.strip() for i in birthplace.text.split(',')]: case [city, state, subcountry, country]: self.birthplace = Birthplace(country=country, city=city, subcountry=subcountry, state=state) case [city, state, country]: self.birthplace = Birthplace(country=country, city=city, state=state) case [city, country]: self.birthplace = Birthplace(country=country, city=city) case [country]: self.birthplace = Birthplace(country=country) return self def __repr__(self): return f"Person({f'{self.url!r}, ' if self.url else ''}{f'name={self.name!r}' if self.name else ''})" var height-
Expand source code
class Person: """Person information. Await the object to fetch full details from the site.""" __slots__ = ('image', 'name', 'name_transcription', 'id', 'career', 'birthday', 'birthplace', 'height', 'url', 'client') def __init__(self, url: str, *, name: str | None = None, client: 'HDRezkaClient | None' = None): """ Need await for full details. :param url: Person page URL. :param name: Optional display name override. :param client: Session used when awaiting (required to fetch details). """ self.url = url self.client = client self.height: float | None = None self.birthplace: Birthplace | None = None if m := _URL_ID_RE.search(url): id_, first, last = m.groups() self.id: int | None = int(id_) self.name_transcription = f'{first.capitalize()} {last.capitalize()}' else: self.name_transcription = '' self.id = None self.name = self.name_transcription if name is None else name def __await__(self): from .._utils import poster_and_soup if self.client is None: raise RuntimeError('Person has no HDRezkaClient; create via Post/client session') if not (ps := (yield from poster_and_soup(self.url, client=self.client).__await__())): return self soup, self.image = ps if name := soup.select_one('[itemprop="name"]'): self.name = name.text if name := soup.select_one('[itemprop="alternativeHeadline"]'): self.name_transcription = name.text table = soup.select_one('.b-post__info') self.career = *(i.text for i in table.select('[itemprop="jobTitle"]')), date = table.select_one('[itemprop="birthDate"]').attrs.get('datetime') self.birthday = datetime.strptime(date, '%Y-%m-%d').date() sel = table.select('td.l+td:not(:has(*))') if not sel: return self birthplace, *height = sel self.height = float(height[0].text.strip().removesuffix('м')) if height else None match [i.strip() for i in birthplace.text.split(',')]: case [city, state, subcountry, country]: self.birthplace = Birthplace(country=country, city=city, subcountry=subcountry, state=state) case [city, state, country]: self.birthplace = Birthplace(country=country, city=city, state=state) case [city, country]: self.birthplace = Birthplace(country=country, city=city) case [country]: self.birthplace = Birthplace(country=country) return self def __repr__(self): return f"Person({f'{self.url!r}, ' if self.url else ''}{f'name={self.name!r}' if self.name else ''})" var id-
Expand source code
class Person: """Person information. Await the object to fetch full details from the site.""" __slots__ = ('image', 'name', 'name_transcription', 'id', 'career', 'birthday', 'birthplace', 'height', 'url', 'client') def __init__(self, url: str, *, name: str | None = None, client: 'HDRezkaClient | None' = None): """ Need await for full details. :param url: Person page URL. :param name: Optional display name override. :param client: Session used when awaiting (required to fetch details). """ self.url = url self.client = client self.height: float | None = None self.birthplace: Birthplace | None = None if m := _URL_ID_RE.search(url): id_, first, last = m.groups() self.id: int | None = int(id_) self.name_transcription = f'{first.capitalize()} {last.capitalize()}' else: self.name_transcription = '' self.id = None self.name = self.name_transcription if name is None else name def __await__(self): from .._utils import poster_and_soup if self.client is None: raise RuntimeError('Person has no HDRezkaClient; create via Post/client session') if not (ps := (yield from poster_and_soup(self.url, client=self.client).__await__())): return self soup, self.image = ps if name := soup.select_one('[itemprop="name"]'): self.name = name.text if name := soup.select_one('[itemprop="alternativeHeadline"]'): self.name_transcription = name.text table = soup.select_one('.b-post__info') self.career = *(i.text for i in table.select('[itemprop="jobTitle"]')), date = table.select_one('[itemprop="birthDate"]').attrs.get('datetime') self.birthday = datetime.strptime(date, '%Y-%m-%d').date() sel = table.select('td.l+td:not(:has(*))') if not sel: return self birthplace, *height = sel self.height = float(height[0].text.strip().removesuffix('м')) if height else None match [i.strip() for i in birthplace.text.split(',')]: case [city, state, subcountry, country]: self.birthplace = Birthplace(country=country, city=city, subcountry=subcountry, state=state) case [city, state, country]: self.birthplace = Birthplace(country=country, city=city, state=state) case [city, country]: self.birthplace = Birthplace(country=country, city=city) case [country]: self.birthplace = Birthplace(country=country) return self def __repr__(self): return f"Person({f'{self.url!r}, ' if self.url else ''}{f'name={self.name!r}' if self.name else ''})" var image-
Expand source code
class Person: """Person information. Await the object to fetch full details from the site.""" __slots__ = ('image', 'name', 'name_transcription', 'id', 'career', 'birthday', 'birthplace', 'height', 'url', 'client') def __init__(self, url: str, *, name: str | None = None, client: 'HDRezkaClient | None' = None): """ Need await for full details. :param url: Person page URL. :param name: Optional display name override. :param client: Session used when awaiting (required to fetch details). """ self.url = url self.client = client self.height: float | None = None self.birthplace: Birthplace | None = None if m := _URL_ID_RE.search(url): id_, first, last = m.groups() self.id: int | None = int(id_) self.name_transcription = f'{first.capitalize()} {last.capitalize()}' else: self.name_transcription = '' self.id = None self.name = self.name_transcription if name is None else name def __await__(self): from .._utils import poster_and_soup if self.client is None: raise RuntimeError('Person has no HDRezkaClient; create via Post/client session') if not (ps := (yield from poster_and_soup(self.url, client=self.client).__await__())): return self soup, self.image = ps if name := soup.select_one('[itemprop="name"]'): self.name = name.text if name := soup.select_one('[itemprop="alternativeHeadline"]'): self.name_transcription = name.text table = soup.select_one('.b-post__info') self.career = *(i.text for i in table.select('[itemprop="jobTitle"]')), date = table.select_one('[itemprop="birthDate"]').attrs.get('datetime') self.birthday = datetime.strptime(date, '%Y-%m-%d').date() sel = table.select('td.l+td:not(:has(*))') if not sel: return self birthplace, *height = sel self.height = float(height[0].text.strip().removesuffix('м')) if height else None match [i.strip() for i in birthplace.text.split(',')]: case [city, state, subcountry, country]: self.birthplace = Birthplace(country=country, city=city, subcountry=subcountry, state=state) case [city, state, country]: self.birthplace = Birthplace(country=country, city=city, state=state) case [city, country]: self.birthplace = Birthplace(country=country, city=city) case [country]: self.birthplace = Birthplace(country=country) return self def __repr__(self): return f"Person({f'{self.url!r}, ' if self.url else ''}{f'name={self.name!r}' if self.name else ''})" var name-
Expand source code
class Person: """Person information. Await the object to fetch full details from the site.""" __slots__ = ('image', 'name', 'name_transcription', 'id', 'career', 'birthday', 'birthplace', 'height', 'url', 'client') def __init__(self, url: str, *, name: str | None = None, client: 'HDRezkaClient | None' = None): """ Need await for full details. :param url: Person page URL. :param name: Optional display name override. :param client: Session used when awaiting (required to fetch details). """ self.url = url self.client = client self.height: float | None = None self.birthplace: Birthplace | None = None if m := _URL_ID_RE.search(url): id_, first, last = m.groups() self.id: int | None = int(id_) self.name_transcription = f'{first.capitalize()} {last.capitalize()}' else: self.name_transcription = '' self.id = None self.name = self.name_transcription if name is None else name def __await__(self): from .._utils import poster_and_soup if self.client is None: raise RuntimeError('Person has no HDRezkaClient; create via Post/client session') if not (ps := (yield from poster_and_soup(self.url, client=self.client).__await__())): return self soup, self.image = ps if name := soup.select_one('[itemprop="name"]'): self.name = name.text if name := soup.select_one('[itemprop="alternativeHeadline"]'): self.name_transcription = name.text table = soup.select_one('.b-post__info') self.career = *(i.text for i in table.select('[itemprop="jobTitle"]')), date = table.select_one('[itemprop="birthDate"]').attrs.get('datetime') self.birthday = datetime.strptime(date, '%Y-%m-%d').date() sel = table.select('td.l+td:not(:has(*))') if not sel: return self birthplace, *height = sel self.height = float(height[0].text.strip().removesuffix('м')) if height else None match [i.strip() for i in birthplace.text.split(',')]: case [city, state, subcountry, country]: self.birthplace = Birthplace(country=country, city=city, subcountry=subcountry, state=state) case [city, state, country]: self.birthplace = Birthplace(country=country, city=city, state=state) case [city, country]: self.birthplace = Birthplace(country=country, city=city) case [country]: self.birthplace = Birthplace(country=country) return self def __repr__(self): return f"Person({f'{self.url!r}, ' if self.url else ''}{f'name={self.name!r}' if self.name else ''})" var name_transcription-
Expand source code
class Person: """Person information. Await the object to fetch full details from the site.""" __slots__ = ('image', 'name', 'name_transcription', 'id', 'career', 'birthday', 'birthplace', 'height', 'url', 'client') def __init__(self, url: str, *, name: str | None = None, client: 'HDRezkaClient | None' = None): """ Need await for full details. :param url: Person page URL. :param name: Optional display name override. :param client: Session used when awaiting (required to fetch details). """ self.url = url self.client = client self.height: float | None = None self.birthplace: Birthplace | None = None if m := _URL_ID_RE.search(url): id_, first, last = m.groups() self.id: int | None = int(id_) self.name_transcription = f'{first.capitalize()} {last.capitalize()}' else: self.name_transcription = '' self.id = None self.name = self.name_transcription if name is None else name def __await__(self): from .._utils import poster_and_soup if self.client is None: raise RuntimeError('Person has no HDRezkaClient; create via Post/client session') if not (ps := (yield from poster_and_soup(self.url, client=self.client).__await__())): return self soup, self.image = ps if name := soup.select_one('[itemprop="name"]'): self.name = name.text if name := soup.select_one('[itemprop="alternativeHeadline"]'): self.name_transcription = name.text table = soup.select_one('.b-post__info') self.career = *(i.text for i in table.select('[itemprop="jobTitle"]')), date = table.select_one('[itemprop="birthDate"]').attrs.get('datetime') self.birthday = datetime.strptime(date, '%Y-%m-%d').date() sel = table.select('td.l+td:not(:has(*))') if not sel: return self birthplace, *height = sel self.height = float(height[0].text.strip().removesuffix('м')) if height else None match [i.strip() for i in birthplace.text.split(',')]: case [city, state, subcountry, country]: self.birthplace = Birthplace(country=country, city=city, subcountry=subcountry, state=state) case [city, state, country]: self.birthplace = Birthplace(country=country, city=city, state=state) case [city, country]: self.birthplace = Birthplace(country=country, city=city) case [country]: self.birthplace = Birthplace(country=country) return self def __repr__(self): return f"Person({f'{self.url!r}, ' if self.url else ''}{f'name={self.name!r}' if self.name else ''})" var url-
Expand source code
class Person: """Person information. Await the object to fetch full details from the site.""" __slots__ = ('image', 'name', 'name_transcription', 'id', 'career', 'birthday', 'birthplace', 'height', 'url', 'client') def __init__(self, url: str, *, name: str | None = None, client: 'HDRezkaClient | None' = None): """ Need await for full details. :param url: Person page URL. :param name: Optional display name override. :param client: Session used when awaiting (required to fetch details). """ self.url = url self.client = client self.height: float | None = None self.birthplace: Birthplace | None = None if m := _URL_ID_RE.search(url): id_, first, last = m.groups() self.id: int | None = int(id_) self.name_transcription = f'{first.capitalize()} {last.capitalize()}' else: self.name_transcription = '' self.id = None self.name = self.name_transcription if name is None else name def __await__(self): from .._utils import poster_and_soup if self.client is None: raise RuntimeError('Person has no HDRezkaClient; create via Post/client session') if not (ps := (yield from poster_and_soup(self.url, client=self.client).__await__())): return self soup, self.image = ps if name := soup.select_one('[itemprop="name"]'): self.name = name.text if name := soup.select_one('[itemprop="alternativeHeadline"]'): self.name_transcription = name.text table = soup.select_one('.b-post__info') self.career = *(i.text for i in table.select('[itemprop="jobTitle"]')), date = table.select_one('[itemprop="birthDate"]').attrs.get('datetime') self.birthday = datetime.strptime(date, '%Y-%m-%d').date() sel = table.select('td.l+td:not(:has(*))') if not sel: return self birthplace, *height = sel self.height = float(height[0].text.strip().removesuffix('м')) if height else None match [i.strip() for i in birthplace.text.split(',')]: case [city, state, subcountry, country]: self.birthplace = Birthplace(country=country, city=city, subcountry=subcountry, state=state) case [city, state, country]: self.birthplace = Birthplace(country=country, city=city, state=state) case [city, country]: self.birthplace = Birthplace(country=country, city=city) case [country]: self.birthplace = Birthplace(country=country) return self def __repr__(self): return f"Person({f'{self.url!r}, ' if self.url else ''}{f'name={self.name!r}' if self.name else ''})"