smartfaker


Namesmartfaker JSON
Version 3.25.1 PyPI version JSON
download
home_pageNone
SummaryA powerful Asynchronous Python library for generating fake addresses and IBANs, supporting bots, MTProto API frameworks, and Python scripts
upload_time2025-08-18 14:39:03
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT
keywords address-generator fake-data faker iban-generator mtproto python-library telegram-bot
VCS
bugtrack_url
requirements pycountry
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # SmartFaker

A powerful asynchronous Python library for generating fake addresses and IBANs, supporting up to 181 countries for addresses and 50+ countries for IBANs. Ideal for bots, MTProto API frameworks, and Python scripts.

---

## What's New in Version 3.25.1
- **Added IBAN Generation**: Generate valid IBANs for over 53 countries with detailed breakdowns (e.g., bank code, account number).
- Improved metadata for proper author display in PyPI.
- Fixed typo in description ("Asyncrhonous" to "Asynchronous").

---

## Installation

Install SmartFaker via pip:

```bash
pip install smartfaker
```

---

## Usage

SmartFaker supports both asynchronous and synchronous generation of fake addresses and IBANs. Below are examples for using the library in different contexts.

### Basic Asyncio Example

This example demonstrates the menu-driven interface for generating addresses, listing available address countries, generating IBANs, and listing available IBAN countries.

```python
import asyncio
from smartfaker import Faker

fake = Faker()

async def main():
    while True:
        print("\nSelect an option:")
        print("1. Generate Fake Address Based On Code")
        print("2. Get Available Fake Address Countries")
        print("3. Generate Fake Iban Based On Code")
        print("4. Get Available Fake Ibans Countries")
        print("5. Exit")
        choice = input("Enter your choice (1-5): ").strip()
        if choice == "1":
            print("Enter country code (e.g., DE):")
            country_code = input().strip().upper()
            if not country_code:
                print("Country code is required.")
                continue
            print("Enter amount (default 1):")
            amount_input = input().strip()
            amount = 1 if not amount_input else int(amount_input)
            try:
                addresses = await fake.address(country_code, amount)
                print("Addresses:")
                if amount == 1:
                    print(addresses)
                else:
                    for addr in addresses:
                        print(addr)
            except ValueError as e:
                print(f"Error: {e}")
        elif choice == "2":
            countries = fake.countries()
            print("Available Fake Address Countries:")
            for country in countries:
                print(f"{country['country_code']}: {country['country_name']}")
        elif choice == "3":
            print("Enter country code (e.g., DE):")
            country_code = input().strip().upper()
            if not country_code:
                print("Country code is required.")
                continue
            print("Enter amount (default 1):")
            amount_input = input().strip()
            amount = 1 if not amount_input else int(amount_input)
            try:
                ibans = await fake.iban(country_code, amount)
                print("IBANs:")
                if amount == 1:
                    print(ibans)
                else:
                    for iban in ibans:
                        print(iban)
            except ValueError as e:
                print(f"Error: {e}")
        elif choice == "4":
            countries = fake.iban_countries()
            print("Available Fake IBAN Countries:")
            for country in countries:
                print(f"{country['country_code']}: {country['country_name']}")
        elif choice == "5":
            print("Exiting...")
            break
        else:
            print("Invalid choice. Please select 1, 2, 3, 4, or 5.")

if __name__ == "__main__":
    asyncio.run(main())
```

### Basic Pyrofork Example

This example shows how to integrate SmartFaker with a Pyrofork bot to generate fake addresses via Telegram commands.

```python
import asyncio
import logging
from pyrogram import Client, filters
from pyrogram.types import Message, InlineKeyboardButton, InlineKeyboardMarkup
from pyrogram.enums import ParseMode
from smartfaker import Faker
import pycountry

LOGGER = logging.getLogger(__name__)
LOGGER.setLevel(logging.INFO)

COMMAND_PREFIX = ["/", ",", ".", "!", "#"]

app = Client(
    "my_bot",
    api_id=YOUR_API_ID,
    api_hash="YOUR_API_HASH",
    bot_token="YOUR_BOT_TOKEN"
)

fake = Faker()
page_data = {}

def get_flag(country_code):
    try:
        return ''.join(chr(0x1F1E6 + ord(c) - ord('A')) for c in country_code.upper())
    except Exception:
        return "🏚"

@app.on_message(filters.command("start", prefixes=COMMAND_PREFIX) & (filters.private | filters.group))
async def start_handler(client: Client, message: Message):
    welcome_text = (
        "**Welcome to SmartFaker Bot! 🚀**\n"
        "**━━━━━━━━━━━━━**\n"
        "Generate fake addresses easily!\n"
        "Use **/fake <code>** for an address (e.g., /fake BD).\n"
        "Use **/countries** to list available countries.\n"
        "**━━━━━━━━━━━━━**\n"
        "Powered by @ISmartCoder | Updates: t.me/TheSmartDev"
    )
    await client.send_message(message.chat.id, welcome_text, parse_mode=ParseMode.MARKDOWN)

@app.on_message(filters.command(["fake", "rnd"], prefixes=COMMAND_PREFIX) & (filters.private | filters.group))
async def fake_handler(client: Client, message: Message):
    if len(message.command) <= 1:
        await client.send_message(message.chat.id, "**❌ Please Provide A Country Code**", parse_mode=ParseMode.MARKDOWN)
        LOGGER.warning(f"Invalid command format: {message.text}")
        return
    
    country_code = message.command[1].upper()
    if country_code == "UK":
        country_code = "GB"
    
    generating_message = await client.send_message(message.chat.id, "**Generating Fake Address...**", parse_mode=ParseMode.MARKDOWN)
    
    try:
        data = await fake.address(country_code)
        flag_emoji = data['country_flag']
        keyboard = InlineKeyboardMarkup(inline_keyboard=[
            [InlineKeyboardButton("Copy Postal Code", callback_data=f"copy:{data['postal_code']}")]
        ])
        await generating_message.edit_text(
            f"**Address for {data['country']} {flag_emoji}**\n"
            f"**━━━━━━━━━━━━━**\n"
            f"**- Street :** `{data['street_address']}`\n"
            f"**- Full Name :** `{data['person_name']}`\n"
            f"**- City/Town/Village :** `{data['city']}`\n"
            f"**- Gender :** `{data['gender']}`\n"
            f"**- Postal Code :** `{data['postal_code']}`\n"
            f"**- Phone Number :** `{data['phone_number']}`\n"
            f"**- Country :** `{data['country']}`\n"
            f"**━━━━━━━━━━━━━**\n"
            f"**Click Below Button For Code 👇**",
            parse_mode=ParseMode.MARKDOWN,
            reply_markup=keyboard
        )
        LOGGER.info(f"Sent fake address for {country_code} in chat {message.chat.id}")
    except ValueError as e:
        LOGGER.error(f"Fake address error for country '{country_code}': {e}")
        await generating_message.edit_text("**❌ Sorry, Fake Address Generator Failed**", parse_mode=ParseMode.MARKDOWN)
    except Exception as e:
        LOGGER.error(f"Fake address error for country '{country_code}': {e}")
        await generating_message.edit_text("**❌ Sorry, Fake Address Generator Failed**", parse_mode=ParseMode.MARKDOWN)

@app.on_message(filters.command("countries", prefixes=COMMAND_PREFIX) & (filters.private | filters.group))
async def countries_handler(client: Client, message: Message):
    chat_id = message.chat.id
    page_data[chat_id] = page_data.get(chat_id, 0)
    
    countries = fake.countries()
    total_pages = (len(countries) + 9) // 10
    if not countries or total_pages == 0:
        await client.send_message(message.chat.id, "No countries available.")
        return
    
    await send_countries_page(client, chat_id, 0, page_data[chat_id]) # Use 0 for initial message_id

async def send_countries_page(client: Client, chat_id: int, message_id: int, page: int):
    countries = fake.countries()
    total_pages = (len(countries) + 9) // 10
    start_idx = page * 10
    end_idx = min(start_idx + 10, len(countries))
    current_countries = countries[start_idx:end_idx]
    
    response = "**Available Countries (Page {}/{}):**\n\n".format(page + 1, total_pages)
    for i, country in enumerate(current_countries, start=start_idx + 1):
        flag = get_flag(country['country_code'])
        response += f"**{i}. {country['country_name']}**\n"
        response += f" - Code: {country['country_code']}\n"
        response += f" - Flag: {flag}\n\n"
    
    markup = InlineKeyboardMarkup(inline_keyboard=[])
    row = []
    if page > 0:
        row.append(InlineKeyboardButton("Previous", callback_data=f"prev:{page}:{chat_id}"))
    if page < total_pages - 1:
        row.append(InlineKeyboardButton("Next", callback_data=f"next:{page}:{chat_id}"))
    if row:
        markup.inline_keyboard.append(row)
    
    if message_id == 0:
        sent_msg = await client.send_message(chat_id, response, parse_mode=ParseMode.MARKDOWN, reply_markup=markup)
        return 
    
    await client.edit_message_text(chat_id, message_id, response, parse_mode=ParseMode.MARKDOWN, reply_markup=markup)

@app.on_callback_query(filters.regex(r"^(prev|next):(\d+):(\d+)$"))
async def pagination_handler(client: Client, callback_query):
    action, page_str, chat_id_str = callback_query.data.split(':')
    page = int(page_str)
    chat_id = int(chat_id_str)
    
    total_pages = (len(fake.countries()) + 9) // 10
    if action == "prev" and page > 0:
        page -= 1
    elif action == "next" and page < total_pages - 1:
        page += 1
    
    await send_countries_page(client, chat_id, callback_query.message.id, page)
    await callback_query.answer()

if __name__ == "__main__":
    app.run()
```

---

## Features
- **Asynchronous**: Built with `asyncio` for non-blocking performance.
- **Address Generation**: Supports fake addresses for 181 countries with details like street, city, postal code, and phone number.
- **IBAN Generation**: Generates valid IBANs for over 50 countries with detailed breakdowns (e.g., bank code, account number).
- **Country Listing**: Easily list supported countries for both addresses and IBANs.
- **Bot Integration**: Seamless integration with Telegram bots via Pyrofork or other MTProto frameworks.
- **Lightweight**: Minimal dependencies, requiring only `pycountry`.

---

## Contributing
Contributions are welcome! Please fork the repository and submit a pull request. For issues, report them on the [GitHub Issues](https://github.com/abirxdhack/TheSmartFaker/issues) page.

---

## License
SmartFaker is licensed under the [MIT License](LICENSE).

---

## Contact
- **Author**: @ISmartCoder
- **Email**: abrixdhackz.info.me@gmail.com
- **Updates Channel**: [t.me/TheSmartDev](https://t.me/TheSmartDev)
- **Documentation**: [SmartFaker Docs](https://abirxdhack.github.io/SmartFakerDocs)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "smartfaker",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "address-generator, fake-data, faker, iban-generator, mtproto, python-library, telegram-bot",
    "author": null,
    "author_email": "ISmartCoder <abrixdhackz.info.me@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/1e/00/5189ce1a5fdeb262acbe69d07a5801cd7c4391c9abe2473e2c3052740496/smartfaker-3.25.1.tar.gz",
    "platform": null,
    "description": "# SmartFaker\n\nA powerful asynchronous Python library for generating fake addresses and IBANs, supporting up to 181 countries for addresses and 50+ countries for IBANs. Ideal for bots, MTProto API frameworks, and Python scripts.\n\n---\n\n## What's New in Version 3.25.1\n- **Added IBAN Generation**: Generate valid IBANs for over 53 countries with detailed breakdowns (e.g., bank code, account number).\n- Improved metadata for proper author display in PyPI.\n- Fixed typo in description (\"Asyncrhonous\" to \"Asynchronous\").\n\n---\n\n## Installation\n\nInstall SmartFaker via pip:\n\n```bash\npip install smartfaker\n```\n\n---\n\n## Usage\n\nSmartFaker supports both asynchronous and synchronous generation of fake addresses and IBANs. Below are examples for using the library in different contexts.\n\n### Basic Asyncio Example\n\nThis example demonstrates the menu-driven interface for generating addresses, listing available address countries, generating IBANs, and listing available IBAN countries.\n\n```python\nimport asyncio\nfrom smartfaker import Faker\n\nfake = Faker()\n\nasync def main():\n    while True:\n        print(\"\\nSelect an option:\")\n        print(\"1. Generate Fake Address Based On Code\")\n        print(\"2. Get Available Fake Address Countries\")\n        print(\"3. Generate Fake Iban Based On Code\")\n        print(\"4. Get Available Fake Ibans Countries\")\n        print(\"5. Exit\")\n        choice = input(\"Enter your choice (1-5): \").strip()\n        if choice == \"1\":\n            print(\"Enter country code (e.g., DE):\")\n            country_code = input().strip().upper()\n            if not country_code:\n                print(\"Country code is required.\")\n                continue\n            print(\"Enter amount (default 1):\")\n            amount_input = input().strip()\n            amount = 1 if not amount_input else int(amount_input)\n            try:\n                addresses = await fake.address(country_code, amount)\n                print(\"Addresses:\")\n                if amount == 1:\n                    print(addresses)\n                else:\n                    for addr in addresses:\n                        print(addr)\n            except ValueError as e:\n                print(f\"Error: {e}\")\n        elif choice == \"2\":\n            countries = fake.countries()\n            print(\"Available Fake Address Countries:\")\n            for country in countries:\n                print(f\"{country['country_code']}: {country['country_name']}\")\n        elif choice == \"3\":\n            print(\"Enter country code (e.g., DE):\")\n            country_code = input().strip().upper()\n            if not country_code:\n                print(\"Country code is required.\")\n                continue\n            print(\"Enter amount (default 1):\")\n            amount_input = input().strip()\n            amount = 1 if not amount_input else int(amount_input)\n            try:\n                ibans = await fake.iban(country_code, amount)\n                print(\"IBANs:\")\n                if amount == 1:\n                    print(ibans)\n                else:\n                    for iban in ibans:\n                        print(iban)\n            except ValueError as e:\n                print(f\"Error: {e}\")\n        elif choice == \"4\":\n            countries = fake.iban_countries()\n            print(\"Available Fake IBAN Countries:\")\n            for country in countries:\n                print(f\"{country['country_code']}: {country['country_name']}\")\n        elif choice == \"5\":\n            print(\"Exiting...\")\n            break\n        else:\n            print(\"Invalid choice. Please select 1, 2, 3, 4, or 5.\")\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n```\n\n### Basic Pyrofork Example\n\nThis example shows how to integrate SmartFaker with a Pyrofork bot to generate fake addresses via Telegram commands.\n\n```python\nimport asyncio\nimport logging\nfrom pyrogram import Client, filters\nfrom pyrogram.types import Message, InlineKeyboardButton, InlineKeyboardMarkup\nfrom pyrogram.enums import ParseMode\nfrom smartfaker import Faker\nimport pycountry\n\nLOGGER = logging.getLogger(__name__)\nLOGGER.setLevel(logging.INFO)\n\nCOMMAND_PREFIX = [\"/\", \",\", \".\", \"!\", \"#\"]\n\napp = Client(\n    \"my_bot\",\n    api_id=YOUR_API_ID,\n    api_hash=\"YOUR_API_HASH\",\n    bot_token=\"YOUR_BOT_TOKEN\"\n)\n\nfake = Faker()\npage_data = {}\n\ndef get_flag(country_code):\n    try:\n        return ''.join(chr(0x1F1E6 + ord(c) - ord('A')) for c in country_code.upper())\n    except Exception:\n        return \"\ud83c\udfda\"\n\n@app.on_message(filters.command(\"start\", prefixes=COMMAND_PREFIX) & (filters.private | filters.group))\nasync def start_handler(client: Client, message: Message):\n    welcome_text = (\n        \"**Welcome to SmartFaker Bot! \ud83d\ude80**\\n\"\n        \"**\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501**\\n\"\n        \"Generate fake addresses easily!\\n\"\n        \"Use **/fake <code>** for an address (e.g., /fake BD).\\n\"\n        \"Use **/countries** to list available countries.\\n\"\n        \"**\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501**\\n\"\n        \"Powered by @ISmartCoder | Updates: t.me/TheSmartDev\"\n    )\n    await client.send_message(message.chat.id, welcome_text, parse_mode=ParseMode.MARKDOWN)\n\n@app.on_message(filters.command([\"fake\", \"rnd\"], prefixes=COMMAND_PREFIX) & (filters.private | filters.group))\nasync def fake_handler(client: Client, message: Message):\n    if len(message.command) <= 1:\n        await client.send_message(message.chat.id, \"**\u274c Please Provide A Country Code**\", parse_mode=ParseMode.MARKDOWN)\n        LOGGER.warning(f\"Invalid command format: {message.text}\")\n        return\n    \n    country_code = message.command[1].upper()\n    if country_code == \"UK\":\n        country_code = \"GB\"\n    \n    generating_message = await client.send_message(message.chat.id, \"**Generating Fake Address...**\", parse_mode=ParseMode.MARKDOWN)\n    \n    try:\n        data = await fake.address(country_code)\n        flag_emoji = data['country_flag']\n        keyboard = InlineKeyboardMarkup(inline_keyboard=[\n            [InlineKeyboardButton(\"Copy Postal Code\", callback_data=f\"copy:{data['postal_code']}\")]\n        ])\n        await generating_message.edit_text(\n            f\"**Address for {data['country']} {flag_emoji}**\\n\"\n            f\"**\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501**\\n\"\n            f\"**- Street :** `{data['street_address']}`\\n\"\n            f\"**- Full Name :** `{data['person_name']}`\\n\"\n            f\"**- City/Town/Village :** `{data['city']}`\\n\"\n            f\"**- Gender :** `{data['gender']}`\\n\"\n            f\"**- Postal Code :** `{data['postal_code']}`\\n\"\n            f\"**- Phone Number :** `{data['phone_number']}`\\n\"\n            f\"**- Country :** `{data['country']}`\\n\"\n            f\"**\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501**\\n\"\n            f\"**Click Below Button For Code \ud83d\udc47**\",\n            parse_mode=ParseMode.MARKDOWN,\n            reply_markup=keyboard\n        )\n        LOGGER.info(f\"Sent fake address for {country_code} in chat {message.chat.id}\")\n    except ValueError as e:\n        LOGGER.error(f\"Fake address error for country '{country_code}': {e}\")\n        await generating_message.edit_text(\"**\u274c Sorry, Fake Address Generator Failed**\", parse_mode=ParseMode.MARKDOWN)\n    except Exception as e:\n        LOGGER.error(f\"Fake address error for country '{country_code}': {e}\")\n        await generating_message.edit_text(\"**\u274c Sorry, Fake Address Generator Failed**\", parse_mode=ParseMode.MARKDOWN)\n\n@app.on_message(filters.command(\"countries\", prefixes=COMMAND_PREFIX) & (filters.private | filters.group))\nasync def countries_handler(client: Client, message: Message):\n    chat_id = message.chat.id\n    page_data[chat_id] = page_data.get(chat_id, 0)\n    \n    countries = fake.countries()\n    total_pages = (len(countries) + 9) // 10\n    if not countries or total_pages == 0:\n        await client.send_message(message.chat.id, \"No countries available.\")\n        return\n    \n    await send_countries_page(client, chat_id, 0, page_data[chat_id]) # Use 0 for initial message_id\n\nasync def send_countries_page(client: Client, chat_id: int, message_id: int, page: int):\n    countries = fake.countries()\n    total_pages = (len(countries) + 9) // 10\n    start_idx = page * 10\n    end_idx = min(start_idx + 10, len(countries))\n    current_countries = countries[start_idx:end_idx]\n    \n    response = \"**Available Countries (Page {}/{}):**\\n\\n\".format(page + 1, total_pages)\n    for i, country in enumerate(current_countries, start=start_idx + 1):\n        flag = get_flag(country['country_code'])\n        response += f\"**{i}. {country['country_name']}**\\n\"\n        response += f\" - Code: {country['country_code']}\\n\"\n        response += f\" - Flag: {flag}\\n\\n\"\n    \n    markup = InlineKeyboardMarkup(inline_keyboard=[])\n    row = []\n    if page > 0:\n        row.append(InlineKeyboardButton(\"Previous\", callback_data=f\"prev:{page}:{chat_id}\"))\n    if page < total_pages - 1:\n        row.append(InlineKeyboardButton(\"Next\", callback_data=f\"next:{page}:{chat_id}\"))\n    if row:\n        markup.inline_keyboard.append(row)\n    \n    if message_id == 0:\n        sent_msg = await client.send_message(chat_id, response, parse_mode=ParseMode.MARKDOWN, reply_markup=markup)\n        return \n    \n    await client.edit_message_text(chat_id, message_id, response, parse_mode=ParseMode.MARKDOWN, reply_markup=markup)\n\n@app.on_callback_query(filters.regex(r\"^(prev|next):(\\d+):(\\d+)$\"))\nasync def pagination_handler(client: Client, callback_query):\n    action, page_str, chat_id_str = callback_query.data.split(':')\n    page = int(page_str)\n    chat_id = int(chat_id_str)\n    \n    total_pages = (len(fake.countries()) + 9) // 10\n    if action == \"prev\" and page > 0:\n        page -= 1\n    elif action == \"next\" and page < total_pages - 1:\n        page += 1\n    \n    await send_countries_page(client, chat_id, callback_query.message.id, page)\n    await callback_query.answer()\n\nif __name__ == \"__main__\":\n    app.run()\n```\n\n---\n\n## Features\n- **Asynchronous**: Built with `asyncio` for non-blocking performance.\n- **Address Generation**: Supports fake addresses for 181 countries with details like street, city, postal code, and phone number.\n- **IBAN Generation**: Generates valid IBANs for over 50 countries with detailed breakdowns (e.g., bank code, account number).\n- **Country Listing**: Easily list supported countries for both addresses and IBANs.\n- **Bot Integration**: Seamless integration with Telegram bots via Pyrofork or other MTProto frameworks.\n- **Lightweight**: Minimal dependencies, requiring only `pycountry`.\n\n---\n\n## Contributing\nContributions are welcome! Please fork the repository and submit a pull request. For issues, report them on the [GitHub Issues](https://github.com/abirxdhack/TheSmartFaker/issues) page.\n\n---\n\n## License\nSmartFaker is licensed under the [MIT License](LICENSE).\n\n---\n\n## Contact\n- **Author**: @ISmartCoder\n- **Email**: abrixdhackz.info.me@gmail.com\n- **Updates Channel**: [t.me/TheSmartDev](https://t.me/TheSmartDev)\n- **Documentation**: [SmartFaker Docs](https://abirxdhack.github.io/SmartFakerDocs)\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A powerful Asynchronous Python library for generating fake addresses and IBANs, supporting bots, MTProto API frameworks, and Python scripts",
    "version": "3.25.1",
    "project_urls": {
        "Changelog": "https://github.com/abirxdhack/TheSmartFaker/releases",
        "Documentation": "https://abirxdhack.github.io/SmartFakerDocs",
        "Homepage": "https://github.com/abirxdhack/TheSmartFaker",
        "Source": "https://github.com/abirxdhack/TheSmartFaker",
        "Tracker": "https://github.com/abirxdhack/TheSmartFaker/issues"
    },
    "split_keywords": [
        "address-generator",
        " fake-data",
        " faker",
        " iban-generator",
        " mtproto",
        " python-library",
        " telegram-bot"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "440448320676b9ce3b30cfcd407ecfd31fee9e21d737c20d72ff8243542a0a13",
                "md5": "130cd19274579a20e5e3575945ca99f3",
                "sha256": "06767627aff794d830a25428045a9d35beced79c586953f68f7e2cfa71a077f9"
            },
            "downloads": -1,
            "filename": "smartfaker-3.25.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "130cd19274579a20e5e3575945ca99f3",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 235115,
            "upload_time": "2025-08-18T14:39:01",
            "upload_time_iso_8601": "2025-08-18T14:39:01.969694Z",
            "url": "https://files.pythonhosted.org/packages/44/04/48320676b9ce3b30cfcd407ecfd31fee9e21d737c20d72ff8243542a0a13/smartfaker-3.25.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1e005189ce1a5fdeb262acbe69d07a5801cd7c4391c9abe2473e2c3052740496",
                "md5": "9c45d01dba952ad58008b017f7c3a3eb",
                "sha256": "e8281685551cfb4387225c75ab321a5ecc819445002af94e0b048db5c3859dab"
            },
            "downloads": -1,
            "filename": "smartfaker-3.25.1.tar.gz",
            "has_sig": false,
            "md5_digest": "9c45d01dba952ad58008b017f7c3a3eb",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 167256,
            "upload_time": "2025-08-18T14:39:03",
            "upload_time_iso_8601": "2025-08-18T14:39:03.391619Z",
            "url": "https://files.pythonhosted.org/packages/1e/00/5189ce1a5fdeb262acbe69d07a5801cd7c4391c9abe2473e2c3052740496/smartfaker-3.25.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-18 14:39:03",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "abirxdhack",
    "github_project": "TheSmartFaker",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "pycountry",
            "specs": []
        }
    ],
    "lcname": "smartfaker"
}
        
Elapsed time: 2.85634s