Skip to content

Commit

Permalink
Small fixes and new system of fake persons
Browse files Browse the repository at this point in the history
  • Loading branch information
Denis Pitkov committed Feb 26, 2023
1 parent 405a07f commit 5bb8b4d
Show file tree
Hide file tree
Showing 24 changed files with 215 additions and 168 deletions.
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,11 +152,11 @@ mail.poling()

```python
# GmailNator
from account_generator_helper import GmailNator, GmailNatorDomains
from account_generator_helper import GmailNator


mail = GmailNator()
print('Mail :', mail.set_email('test-mail', GmailNatorDomains.GMAILNATOR_COM)) # Mail : test-mail@gmailnator.com
print('Mail :', mail.set_email('[email protected]')) # Mail : jo.n.a.thanm.icha.eltmp@gmail.com


for _letter in mail.get_inbox():
Expand Down Expand Up @@ -207,12 +207,13 @@ for message in phone.get_last_messages():
### Generate data
```python
# Generate fake person
from account_generator_helper import Person
from account_generator_helper import generate_person, generate_persons


for _ in range(10):
print(Person()) # <Person ...>
print(generate_person()) # Person(gender='female', nam...
print(generate_persons(10)) # [Person(gender='female', nam...]
```

```python
# Utilities
from account_generator_helper import get_password
Expand Down
5 changes: 2 additions & 3 deletions account_generator_helper/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from .temp_mail import *
from .temp_phone import ReceiveSms
from .fake_data import Person
from .fake_data.personcounties import PersonCounties
from .fake_data import generate_person, generate_persons
from .fake_data.utilities import get_password
from .proxies import Proxies, ProxyType
from .countries import Counties
Expand All @@ -10,4 +9,4 @@

__author__ = 'Dionis1902'
__email__ = '[email protected]'
__version__ = '1.0.10'
__version__ = '1.0.11'
1 change: 1 addition & 0 deletions account_generator_helper/captcha_solver/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ def solve(self, image: open) -> str:
}

r = self._s.post('https://cloudmersive.com/ocr-api', data=data, files={'ctl00$MainContent$FileUploadBox': image})
print(r.text)
if not r.ok:
return ''
self.__save_data(r.text)
Expand Down
171 changes: 124 additions & 47 deletions account_generator_helper/fake_data/__init__.py
Original file line number Diff line number Diff line change
@@ -1,65 +1,142 @@
from dataclasses import dataclass
from typing import List

import requests
from .exceptions import ProblemWithGetPersonData
from .personcounties import PersonCounties
from ..utilities import camel_to_snake
from .const import Gender

headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}

@dataclass
class Name:
title: str
first: str
last: str

class Person:
def __init__(self):
self._name = None
self._phone = None
self._postcode = None
self._street_address = None
self._city = None
self._country = None

self.update_data()
@dataclass
class Street:
number: int
name: str


@property
def name(self):
return self._name
@dataclass
class Coordinates:
latitude: str
longitude: str

@property
def phone(self):
return self._phone

@property
def postcode(self):
return self._postcode
@dataclass
class Timezone:
offset: str
description: str

@property
def street_address(self):
return self._street_address

@property
def country(self):
return self._country
@dataclass
class Location:
street: Street
city: str
state: str
country: str
postcode: int
coordinates: Coordinates
timezone: Timezone

def update_data(self, country: PersonCounties = PersonCounties.USA):
"""
Generate new person data.

:param country: From which country the street.
"""
r = requests.post('https://www.textreverse.com/frontend/fakeAddressGenerator', data=f'lang={country.value}', headers=headers)
if r.status_code != 200:
raise ProblemWithGetPersonData()
@dataclass
class Login:
uuid: str
username: str
password: str
salt: str
md5: str
sha1: str
sha256: str

[setattr(self, '_' + camel_to_snake(key), r.json()[0][key]) for key in r.json()[0] if
self.__getattr('_' + camel_to_snake(key))]

def __getattr(self, key):
try:
getattr(self, key)
return True
except AttributeError:
return False
@dataclass
class Dob:
date: str
age: int

def __repr__(self):
return '<Person {}>'.format(' '.join(['{}={}'.format(key[1:], value) for key, value in zip(vars(self).keys(), vars(self).values())]))

@dataclass
class Picture:
large: str
medium: str
thumbnail: str


@dataclass
class Person:
gender: str
name: Name
location: Location
email: str
login: Login
dob: Dob
phone: str
picture: Picture
nat: str


def __get_person(user_data: dict):
return Person(
gender=user_data["gender"],
name=Name(title=user_data["name"]["title"], first=user_data["name"]["first"], last=user_data["name"]["last"]),
location=Location(
street=Street(number=user_data["location"]["street"]["number"],
name=user_data["location"]["street"]["name"]),
city=user_data["location"]["city"],
state=user_data["location"]["state"],
country=user_data["location"]["country"],
postcode=user_data["location"]["postcode"],
coordinates=Coordinates(latitude=user_data["location"]["coordinates"]["latitude"],
longitude=user_data["location"]["coordinates"]["longitude"]),
timezone=Timezone(offset=user_data["location"]["timezone"]["offset"],
description=user_data["location"]["timezone"]["description"])
),
email=user_data["email"],
login=Login(
uuid=user_data["login"]["uuid"],
username=user_data["login"]["username"],
password=user_data["login"]["password"],
salt=user_data["login"]["salt"],
md5=user_data["login"]["md5"],
sha1=user_data["login"]["sha1"],
sha256=user_data["login"]["sha256"]
),
dob=Dob(date=user_data["dob"]["date"], age=user_data["dob"]["age"]),
phone=user_data["phone"],
picture=Picture(large=user_data["picture"]["large"], medium=user_data["picture"]["medium"],
thumbnail=user_data["picture"]["thumbnail"]),
nat=user_data["nat"])


def generate_person(gender: Gender = Gender.BOTH) -> Person:
"""
Generate person.
:param gender: Gender of random person
:return: Random person
"""
return generate_persons(1, gender)[0]


def generate_persons(count: int, gender: Gender = Gender.BOTH) -> List[Person]:
"""
Batch generate persons.
:param gender: Gender of random person
:param count: Count of persons to generate
:return: Random persons
"""
if not isinstance(count, int) or count < 1:
count = 1

r = requests.get('https://randomuser.me/api', params={'gender': gender.value, 'results': count})
if r.status_code != 200:
raise ProblemWithGetPersonData()

return [__get_person(data) for data in r.json()['results']]
7 changes: 7 additions & 0 deletions account_generator_helper/fake_data/const.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import enum


class Gender(enum.Enum):
MEN = 'male'
BOTH = ''
WOMEN = 'female'
33 changes: 0 additions & 33 deletions account_generator_helper/fake_data/personcounties.py

This file was deleted.

Loading

0 comments on commit 5bb8b4d

Please sign in to comment.