Skip to content

Persons

Generate random persons.

Person

Bases: BaseModel

A single person.

Parameters:

Name Type Description Default
ident str

unique identifier

required
family str

family name

required
personal str

personal name

required
Source code in src/snailz/persons.py
12
13
14
15
16
17
18
19
class Person(BaseModel):
    """A single person."""

    ident: str = Field(description="unique identifier")
    family: str = Field(description="family name")
    personal: str = Field(description="personal name")

    model_config = {"extra": "forbid"}

AllPersons

Bases: BaseModel

A set of generated people.

Parameters:

Name Type Description Default
items list[Person]

all persons

required
Source code in src/snailz/persons.py
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
class AllPersons(BaseModel):
    """A set of generated people."""

    items: list[Person] = Field(description="all persons")

    model_config = {"extra": "forbid"}

    def to_csv(self) -> str:
        """Create a CSV representation of the people data.

        Returns:
            A CSV-formatted string with people data.
        """
        return utils.to_csv(
            self.items,
            ["ident", "personal", "family"],
            lambda p: [p.ident, p.personal, p.family],
        )

    @staticmethod
    def generate(params: PersonParams) -> "AllPersons":
        """Generate random persons.

        Parameters:
            params: Data generation parameters.

        Returns:
            Data model including all persons.
        """
        fake = faker.Faker(params.locale)
        fake.seed_instance(random.randint(0, 1_000_000))
        id_gen = utils.unique_id("person", _person_id_generator)
        items = []
        for _ in range(params.number):
            family = fake.last_name()
            personal = fake.first_name()
            ident = id_gen.send((family, personal))
            items.append(
                Person(
                    ident=ident,
                    family=family,
                    personal=personal,
                )
            )

        return AllPersons(items=items)

to_csv()

Create a CSV representation of the people data.

Returns:

Type Description
str

A CSV-formatted string with people data.

Source code in src/snailz/persons.py
29
30
31
32
33
34
35
36
37
38
39
def to_csv(self) -> str:
    """Create a CSV representation of the people data.

    Returns:
        A CSV-formatted string with people data.
    """
    return utils.to_csv(
        self.items,
        ["ident", "personal", "family"],
        lambda p: [p.ident, p.personal, p.family],
    )

generate(params) staticmethod

Generate random persons.

Parameters:

Name Type Description Default
params PersonParams

Data generation parameters.

required

Returns:

Type Description
AllPersons

Data model including all persons.

Source code in src/snailz/persons.py
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
@staticmethod
def generate(params: PersonParams) -> "AllPersons":
    """Generate random persons.

    Parameters:
        params: Data generation parameters.

    Returns:
        Data model including all persons.
    """
    fake = faker.Faker(params.locale)
    fake.seed_instance(random.randint(0, 1_000_000))
    id_gen = utils.unique_id("person", _person_id_generator)
    items = []
    for _ in range(params.number):
        family = fake.last_name()
        personal = fake.first_name()
        ident = id_gen.send((family, personal))
        items.append(
            Person(
                ident=ident,
                family=family,
                personal=personal,
            )
        )

    return AllPersons(items=items)

_person_id_generator(family, personal)

Generate unique ID for a person.

Parameters:

Name Type Description Default
family str

Person's family name.

required
personal str

Person's personal name.

required

Returns:

Type Description
str

Candidate identifier 'CCNNNN'.

Source code in src/snailz/persons.py
70
71
72
73
74
75
76
77
78
79
80
81
82
83
def _person_id_generator(family: str, personal: str) -> str:
    """Generate unique ID for a person.

    Parameters:
        family: Person's family name.
        personal: Person's personal name.

    Returns:
        Candidate identifier 'CCNNNN'.
    """
    f = family[0].lower()
    p = personal[0].lower()
    num = random.randint(0, 9999)
    return f"{f}{p}{num:04d}"