![PyPI](https://img.shields.io/pypi/v/unsafe)
![Total PyPi Downloads](https://static.pepy.tech/personalized-badge/unsafe?period=total&units=none&left_color=grey&right_color=blue&left_text=Total-PyPi-Downloads)
![Monthly PyPi Downloads](https://static.pepy.tech/personalized-badge/unsafe?period=month&units=none&left_color=grey&right_color=blue&left_text=Monthly-PyPi-Downloads)
![Weekly PyPi Downloads](https://static.pepy.tech/personalized-badge/unsafe?period=week&units=none&left_color=grey&right_color=blue&left_text=Weekly-PyPi-Downloads)
![GitHub repo size](https://img.shields.io/github/repo-size/ahur4/unsafe?label=GitHub-Repo-Size)
![PyPi Size](https://img.shields.io/badge/PyPi%20Size-600kb-blue)
![PyPI - License](https://img.shields.io/pypi/l/unsafe)
[![Telegram-Channel](https://img.shields.io/badge/Telegram--Channel-ExploitPriv8-blue)](https://t.me/ExploitPriv8)
# Unsafe (Advanced Penetration Testing Module)
An Advanced Module for Penetration Testing.
Using This Module, You Can Implement Brute Force Operations and Identification and Anonymity.
This Module is Always Being Developed and There is No Need to Worry About it Becoming Unavailable.
- Author : Ahur4
- 𝗘 𝗫 𝗣 𝗟 𝗢 𝗜 𝗧 : [Telegram Channel](https://t.me/ExploitPriv8)
- Maintainer : MesutFD
# Features
- [x] [Encryption & Decryption](https://github.com/ahur4/unsafe#usage)
- [x] [Proxy](https://github.com/ahur4/unsafe#proxy)
- [x] [BruteForce](https://github.com/ahur4/unsafe#bruteforce)
- [x] [Forensic](https://github.com/ahur4/unsafe#forensic)
- [x] [Wordpress](https://github.com/ahur4/unsafe#wordpress)
- [x] [VulnerabilityScanner](https://github.com/ahur4/unsafe#vulnerabilityscanner)
- [x] [Crawling.](https://github.com/ahur4/unsafe#crawling)
- [x] [Network.](https://github.com/ahur4/unsafe#network)
# Usage
- #### Encryption & Decryption
- **Available Methods:**
( md5 | sha1 | sha224 | sha256 | sha384 | sha512 | sha3-224 | sha3-256 \
sha3-384 | sha3-512 | shake128 | shake256 | base16 | base32 | base64 \
base85 | ascii85 | caesar )
- **Encryption Usage** :
```python
from unsafe import Unsafe
unsafe = Unsafe()
name = "Ahur4"
md5_name = unsafe.text_encrypt(name) # Default hash_method is "md5"
print(md5_name) # Output : 'ada3e80e34da70c99c1acff7f492993c'
base64_name = unsafe.text_encrypt(name, hash_method="base64")
print(base64_name) # Output : b'QWh1cjQ='
caesar_name = unsafe.text_encrypt(name, hash_method="caesar", count=5)
print(caesar_name) # Output : 'Fmzw4'
shake128_name = unsafe.text_encrypt(name, encode='UTF-8', hash_method="shake128", count=15)
print(shake128_name) # Output : ''c8a3ab8ca74720d227550f4f76b71f''
```
- **Decryption Usage** :
```python
from unsafe import Unsafe
unsafe = Unsafe()
hash = "ada3e80e34da70c99c1acff7f492993c" #Md5 - Value : Ahur4
name = unsafe.text_decrypt(hash=hash, word="Ahur4") #Default hash_method is "md5"
print(name) #Output : True
# When Do Not Have any Word or Wordlist Default Wordlist is John The Ripper Wordlist
name = unsafe.text_decrypt(hash=hash, hash_method="sha1")
print(name) #Output : '' ,Cause Not Found Result.
```
---
- #### Proxy
- **Available Protocols** :
(http | socks4 | socks5)
- **Proxy Wrapper Usage**
```python
from unsafe import Unsafe
unsafe = Unsafe()
proxies = unsafe.proxy_wrapper(protocol="http", max_ping=200)
print(proxies) # Output : {'ip':'port', 'ip':'port', ...}
```
- **Proxy Checker Usage**
```python
isActive = unsafe.proxy_checker(proxy_host='127.0.0.1', proxy_port='80', protocol='http', timeout=10)
print(isActive) # Output : True|False
```
---
- #### BruteForce
- **AdminFinder Usage**
```python
from unsafe import Unsafe
unsafe = Unsafe()
admin_panels = unsafe.admin_finder(domain='example.com',
workers=5, # Threads
timeout=10,
ext='php', # Site type
user_agent="AmigaVoyager/2.95 (compatible; MC680x0; AmigaOS; SV1)",
proxy="http://127.0.0.1:80"
)
print(admin_panels) # Output : ['http://example.com/wp-login.php']
```
- **FileManager Finder Usage**
```python
filemanagers = unsafe.filemanager_finder(domain='example.com',
workers=5, #Threads
timeout=10,
user_agent="AmigaVoyager/2.95 (compatible; MC680x0; AmigaOS; SV1)",
proxy="http://127.0.0.1:80"
)
print(filemanagers) # Output : ['https://example.com/filemanager/', 'https://example.com/filemanager/index.php']
```
- **CloudFlare Bypassing Usage**
```python
realip = unsafe.cloudflare_bypasser(domain='google.com',
workers=5, #Threads
)
print(realip) # Output : {'ns4.google.com': '216.239.38.10', 'search.google.com': '142.251.39.14', ....}
```
- **SubDomain Finder**
```python
result = unsafe.subdomain_scanner(
domain="google.com",
workers=5,
subdomains=["ww1", "forum", "download", "product", "search", "cdn", "ns1"], #Also this part have a default subdomains list.
timeout=5,
proxy="http://127.0.0.1:80"
)
print(result) # Output : ["ww1.google.com", ...]
```
---
- #### Forensic.
- **Delete Image Metadata Usage**
```python
from unsafe import Unsafe
unsafe = Unsafe()
isDeleted = unsafe.delete_exif_img(path='/path/of/file.jpg')
print(isDeleted) # Output : True|False
```
- **Edit Image Metadata Usage**
```python
isEdited = unsafe.edit_exif_img(path='/path/of/file.jpg',key='model', value='unsafe')
print(isEdited) # Output : True|False
```
- **Extract Image Metadata Usage**
```python
Exifed = unsafe.extract_exif_img(path='/path/of/file.jpg')
print(Exifed) # Output : {"make": "huawei", "model": "G-750", ...}
```
- **Delete PDF Metadata Usage**
```python
result = unsafe.remove_pdf_metadata(filename="path/of/file.pdf")
print(result) # Output : 'path/of/output.pdf'
```
- **Edit PDF Metadata Usage**
```python
result = unsafe.edit_pdf_metadata(filename="path/of/file.pdf", metadata={"unsafe":"module"})
print(result) # Output : 'path/of/output.pdf'
```
- **Extract PDF Metadata Usage**
```python
result = unsafe.get_pdf_metadata(filename="path/of/file.pdf")
print(result) # Output : {"/data":"values",...}
```
- **Delete Audio Metadata Usage**
```python
result = unsafe.remove_audio_metadata(filename="path/of/file.mp3")
print(result) # Output : 'path/of/output.mp3'
```
- **Edit Audio Metadata Usage**
```python
result = unsafe.edit_audio_metadata(filename="path/of/file.mp3", metadata={"artist": "Ahur4"})
print(result) # Output : 'path/of/output.mp3'
```
- **Extract Audio Metadata Usage**
```python
result = unsafe.get_audio_metadata(filename="path/of/file.mp3")
print(result) # Output : # Output : {"/data":"values",...}
```
---
- #### Wordpress.
- **Extract Admin Users**
```python
from unsafe import Unsafe
unsafe = Unsafe()
site_users = unsafe.wp_get_users(domain="wordpress.org")
print(site_users) # Output : ['admin', 'administrator']
```
- **Plugin Scanner**
```python
site_users = unsafe.wp_plugin_scanner(domain="wordpress.org",
timeout=10,
workers=5,
proxy="http://127.0.0.1:80"
)
print(site_users) # Output : ['http://wordpress.org/wp-content/plugins/wordpress-seo/',....]
```
---
- #### VulnerabilityScanner
- **Xss Vulnerability Scanner**
```python
from unsafe import Unsafe
unsafe = Unsafe()
result = unsafe.xss_scanner(url="https://xsslabs.com/xss-labs-1.php", js_script="<Script>alert('hi')</scripT>")
print(result) # Output : {"is_vulnerable": is_vulnerable, "form_detail": form_details}
```
- **SqlInjection Vulnerability Scanner**
```python
result = unsafe.sql_injection_scanner(url="https://example.com/news.php?id=475433")
print(result) # Output : ["https://example.com/news.php?id=245", "......", ..]
```
---
- #### Crawling.
- **Crawling a single Page and Extract Usernames, Phones, Emails and ...**
```python
from unsafe import Unsafe
unsafe = Unsafe()
result = unsafe.crawl_page(url="https://example.com/contact.php", timeout=5, proxy="http://127.0.0.1:80")
print(result) #Output : {"links": [...], "phones": [...], ...}
```
- **Search in Three Search Engines: Google, Bing and Ask**
```python
# Search a Username in Insatgram
result = unsafe.browser_search(query='"username" site:insatgram.com', timeout=10, proxy="http://127.0.0.1:80")
print(result) # Output : ['https://instagram.com/username', ....]
```
- **Scan Entered Page and Detect Xss Vulnerability.**
```python
result = unsafe.xss_scanner(url="https://xsslabs.com/xss-labs-1.php", js_script="<Script>alert('hi')</scripT>")
print(result) # Output : {'is_vulnerable': True, 'form_detail': {'action': '#', 'method': 'get', 'inputs': [{'type': 'text', 'name': 'name', 'value': "<Script>alert('hi')</scripT>"}]}}
```
---
- #### Network
- **Scan Open Ports.**
```python
from unsafe import Unsafe
unsafe = Unsafe()
result = unsafe.port_scanner(host="127.0.0.1", ports=[80, 53, 443, 127])
print(result) # Output : [80, 443]
```
- **Mac Address Lookup(find owner of device company)**
```python
result = unsafe.mac_address_lookup(mac="00:00:5e:00:53:af")
print(result) #Output : "U.S. Department of Defense (IANA)"
```
# New Features : Coming Soon...
Raw data
{
"_id": null,
"home_page": "https://github.com/ahur4/unsafe",
"name": "unsafe",
"maintainer": "Masoud Nayebi",
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "mesut@gmail.com",
"keywords": "hack,hack-module,pentest,unsafe,osint,osint-python,hacking-python,cryptography,vulnerability-scanner,vulnerability,security,hacker,admin-finder,wordpress-scanner,instagram-osint,cve,proxy-wrapper,proxy-checker,ssh-connect,hydra,cracker,sqlmap,ahur4,mesutfd,crawler,acunetix",
"author": "Ahura Rahmani",
"author_email": "ahur4.rahmani@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/b4/e3/6f2b4bde43fee8826b0a5c3a51b188330101e8f416b1c2614b41f9bbd1f7/unsafe-1.2.71.tar.gz",
"platform": null,
"description": "![PyPI](https://img.shields.io/pypi/v/unsafe)\n![Total PyPi Downloads](https://static.pepy.tech/personalized-badge/unsafe?period=total&units=none&left_color=grey&right_color=blue&left_text=Total-PyPi-Downloads)\n![Monthly PyPi Downloads](https://static.pepy.tech/personalized-badge/unsafe?period=month&units=none&left_color=grey&right_color=blue&left_text=Monthly-PyPi-Downloads)\n![Weekly PyPi Downloads](https://static.pepy.tech/personalized-badge/unsafe?period=week&units=none&left_color=grey&right_color=blue&left_text=Weekly-PyPi-Downloads)\n![GitHub repo size](https://img.shields.io/github/repo-size/ahur4/unsafe?label=GitHub-Repo-Size)\n![PyPi Size](https://img.shields.io/badge/PyPi%20Size-600kb-blue)\n![PyPI - License](https://img.shields.io/pypi/l/unsafe)\n[![Telegram-Channel](https://img.shields.io/badge/Telegram--Channel-ExploitPriv8-blue)](https://t.me/ExploitPriv8)\n\n# Unsafe (Advanced Penetration Testing Module)\n\nAn Advanced Module for Penetration Testing.\nUsing This Module, You Can Implement Brute Force Operations and Identification and Anonymity.\nThis Module is Always Being Developed and There is No Need to Worry About it Becoming Unavailable.\n\n- Author : Ahur4\n - \ud835\uddd8 \ud835\uddeb \ud835\udde3 \ud835\udddf \ud835\udde2 \ud835\udddc \ud835\udde7 : [Telegram Channel](https://t.me/ExploitPriv8)\n\n- Maintainer : MesutFD\n\n# Features\n\n- [x] [Encryption & Decryption](https://github.com/ahur4/unsafe#usage)\n- [x] [Proxy](https://github.com/ahur4/unsafe#proxy)\n- [x] [BruteForce](https://github.com/ahur4/unsafe#bruteforce)\n- [x] [Forensic](https://github.com/ahur4/unsafe#forensic)\n- [x] [Wordpress](https://github.com/ahur4/unsafe#wordpress)\n- [x] [VulnerabilityScanner](https://github.com/ahur4/unsafe#vulnerabilityscanner)\n- [x] [Crawling.](https://github.com/ahur4/unsafe#crawling)\n- [x] [Network.](https://github.com/ahur4/unsafe#network)\n\n# Usage\n\n- #### Encryption & Decryption\n - **Available Methods:**\n\n ( md5 | sha1 | sha224 | sha256 | sha384 | sha512 | sha3-224 | sha3-256 \\\n sha3-384 | sha3-512 | shake128 | shake256 | base16 | base32 | base64 \\\n base85 | ascii85 | caesar )\n\n - **Encryption Usage** :\n ```python\n from unsafe import Unsafe\n unsafe = Unsafe()\n \n name = \"Ahur4\"\n \n md5_name = unsafe.text_encrypt(name) # Default hash_method is \"md5\"\n print(md5_name) # Output : 'ada3e80e34da70c99c1acff7f492993c'\n \n base64_name = unsafe.text_encrypt(name, hash_method=\"base64\")\n print(base64_name) # Output : b'QWh1cjQ='\n \n caesar_name = unsafe.text_encrypt(name, hash_method=\"caesar\", count=5)\n print(caesar_name) # Output : 'Fmzw4'\n \n shake128_name = unsafe.text_encrypt(name, encode='UTF-8', hash_method=\"shake128\", count=15)\n print(shake128_name) # Output : ''c8a3ab8ca74720d227550f4f76b71f''\n \n ```\n - **Decryption Usage** :\n ```python\n from unsafe import Unsafe\n unsafe = Unsafe()\n\n hash = \"ada3e80e34da70c99c1acff7f492993c\" #Md5 - Value : Ahur4\n\n name = unsafe.text_decrypt(hash=hash, word=\"Ahur4\") #Default hash_method is \"md5\"\n print(name) #Output : True\n\n # When Do Not Have any Word or Wordlist Default Wordlist is John The Ripper Wordlist\n name = unsafe.text_decrypt(hash=hash, hash_method=\"sha1\")\n print(name) #Output : '' ,Cause Not Found Result.\n\n ```\n\n---\n\n- #### Proxy\n - **Available Protocols** :\n\n (http | socks4 | socks5)\n - **Proxy Wrapper Usage**\n ```python\n from unsafe import Unsafe\n unsafe = Unsafe()\n\n proxies = unsafe.proxy_wrapper(protocol=\"http\", max_ping=200)\n print(proxies) # Output : {'ip':'port', 'ip':'port', ...}\n ```\n - **Proxy Checker Usage**\n ```python\n isActive = unsafe.proxy_checker(proxy_host='127.0.0.1', proxy_port='80', protocol='http', timeout=10)\n print(isActive) # Output : True|False\n ```\n\n---\n\n- #### BruteForce\n - **AdminFinder Usage**\n ```python\n from unsafe import Unsafe\n unsafe = Unsafe()\n\n admin_panels = unsafe.admin_finder(domain='example.com',\n workers=5, # Threads\n timeout=10,\n ext='php', # Site type\n user_agent=\"AmigaVoyager/2.95 (compatible; MC680x0; AmigaOS; SV1)\",\n proxy=\"http://127.0.0.1:80\"\n )\n print(admin_panels) # Output : ['http://example.com/wp-login.php']\n ```\n - **FileManager Finder Usage**\n ```python\n filemanagers = unsafe.filemanager_finder(domain='example.com',\n workers=5, #Threads\n timeout=10,\n user_agent=\"AmigaVoyager/2.95 (compatible; MC680x0; AmigaOS; SV1)\",\n proxy=\"http://127.0.0.1:80\"\n )\n print(filemanagers) # Output : ['https://example.com/filemanager/', 'https://example.com/filemanager/index.php']\n ```\n - **CloudFlare Bypassing Usage**\n ```python\n realip = unsafe.cloudflare_bypasser(domain='google.com',\n workers=5, #Threads\n )\n print(realip) # Output : {'ns4.google.com': '216.239.38.10', 'search.google.com': '142.251.39.14', ....}\n ```\n - **SubDomain Finder**\n ```python\n result = unsafe.subdomain_scanner(\n domain=\"google.com\",\n workers=5,\n subdomains=[\"ww1\", \"forum\", \"download\", \"product\", \"search\", \"cdn\", \"ns1\"], #Also this part have a default subdomains list.\n timeout=5,\n proxy=\"http://127.0.0.1:80\"\n )\n print(result) # Output : [\"ww1.google.com\", ...]\n ```\n\n---\n\n- #### Forensic.\n - **Delete Image Metadata Usage**\n ```python\n from unsafe import Unsafe\n unsafe = Unsafe()\n\n isDeleted = unsafe.delete_exif_img(path='/path/of/file.jpg')\n print(isDeleted) # Output : True|False\n ```\n - **Edit Image Metadata Usage**\n ```python\n isEdited = unsafe.edit_exif_img(path='/path/of/file.jpg',key='model', value='unsafe')\n print(isEdited) # Output : True|False\n ```\n - **Extract Image Metadata Usage**\n ```python\n Exifed = unsafe.extract_exif_img(path='/path/of/file.jpg')\n print(Exifed) # Output : {\"make\": \"huawei\", \"model\": \"G-750\", ...}\n ```\n - **Delete PDF Metadata Usage**\n ```python\n result = unsafe.remove_pdf_metadata(filename=\"path/of/file.pdf\")\n print(result) # Output : 'path/of/output.pdf'\n ```\n - **Edit PDF Metadata Usage**\n ```python\n result = unsafe.edit_pdf_metadata(filename=\"path/of/file.pdf\", metadata={\"unsafe\":\"module\"})\n print(result) # Output : 'path/of/output.pdf'\n ```\n - **Extract PDF Metadata Usage**\n ```python\n result = unsafe.get_pdf_metadata(filename=\"path/of/file.pdf\")\n print(result) # Output : {\"/data\":\"values\",...}\n ```\n - **Delete Audio Metadata Usage**\n ```python\n result = unsafe.remove_audio_metadata(filename=\"path/of/file.mp3\")\n print(result) # Output : 'path/of/output.mp3'\n ```\n - **Edit Audio Metadata Usage**\n ```python\n result = unsafe.edit_audio_metadata(filename=\"path/of/file.mp3\", metadata={\"artist\": \"Ahur4\"})\n print(result) # Output : 'path/of/output.mp3'\n ```\n - **Extract Audio Metadata Usage**\n ```python\n result = unsafe.get_audio_metadata(filename=\"path/of/file.mp3\")\n print(result) # Output : # Output : {\"/data\":\"values\",...}\n ```\n\n---\n\n- #### Wordpress.\n - **Extract Admin Users**\n ```python\n from unsafe import Unsafe\n unsafe = Unsafe()\n\n site_users = unsafe.wp_get_users(domain=\"wordpress.org\")\n print(site_users) # Output : ['admin', 'administrator']\n ```\n - **Plugin Scanner**\n ```python\n site_users = unsafe.wp_plugin_scanner(domain=\"wordpress.org\",\n timeout=10,\n workers=5,\n proxy=\"http://127.0.0.1:80\"\n )\n print(site_users) # Output : ['http://wordpress.org/wp-content/plugins/wordpress-seo/',....]\n ```\n\n---\n\n- #### VulnerabilityScanner\n - **Xss Vulnerability Scanner**\n ```python\n from unsafe import Unsafe\n unsafe = Unsafe()\n\n result = unsafe.xss_scanner(url=\"https://xsslabs.com/xss-labs-1.php\", js_script=\"<Script>alert('hi')</scripT>\")\n print(result) # Output : {\"is_vulnerable\": is_vulnerable, \"form_detail\": form_details}\n ```\n - **SqlInjection Vulnerability Scanner**\n ```python\n result = unsafe.sql_injection_scanner(url=\"https://example.com/news.php?id=475433\")\n print(result) # Output : [\"https://example.com/news.php?id=245\", \"......\", ..]\n ```\n\n---\n\n- #### Crawling.\n - **Crawling a single Page and Extract Usernames, Phones, Emails and ...**\n ```python\n from unsafe import Unsafe\n unsafe = Unsafe()\n\n result = unsafe.crawl_page(url=\"https://example.com/contact.php\", timeout=5, proxy=\"http://127.0.0.1:80\")\n print(result) #Output : {\"links\": [...], \"phones\": [...], ...}\n ```\n - **Search in Three Search Engines: Google, Bing and Ask**\n ```python\n # Search a Username in Insatgram\n result = unsafe.browser_search(query='\"username\" site:insatgram.com', timeout=10, proxy=\"http://127.0.0.1:80\")\n print(result) # Output : ['https://instagram.com/username', ....]\n ```\n - **Scan Entered Page and Detect Xss Vulnerability.**\n ```python\n result = unsafe.xss_scanner(url=\"https://xsslabs.com/xss-labs-1.php\", js_script=\"<Script>alert('hi')</scripT>\")\n print(result) # Output : {'is_vulnerable': True, 'form_detail': {'action': '#', 'method': 'get', 'inputs': [{'type': 'text', 'name': 'name', 'value': \"<Script>alert('hi')</scripT>\"}]}}\n ```\n\n---\n\n- #### Network\n - **Scan Open Ports.**\n ```python\n from unsafe import Unsafe\n unsafe = Unsafe()\n\n result = unsafe.port_scanner(host=\"127.0.0.1\", ports=[80, 53, 443, 127])\n print(result) # Output : [80, 443]\n ```\n - **Mac Address Lookup(find owner of device company)**\n ```python\n result = unsafe.mac_address_lookup(mac=\"00:00:5e:00:53:af\")\n print(result) #Output : \"U.S. Department of Defense (IANA)\"\n ```\n\n# New Features : Coming Soon...\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A practical and optimal library for those interested in Pentest, cryptography,Vulnerability Scanner and ..",
"version": "1.2.71",
"split_keywords": [
"hack",
"hack-module",
"pentest",
"unsafe",
"osint",
"osint-python",
"hacking-python",
"cryptography",
"vulnerability-scanner",
"vulnerability",
"security",
"hacker",
"admin-finder",
"wordpress-scanner",
"instagram-osint",
"cve",
"proxy-wrapper",
"proxy-checker",
"ssh-connect",
"hydra",
"cracker",
"sqlmap",
"ahur4",
"mesutfd",
"crawler",
"acunetix"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "fa7699fc5fa01b63746560ea965cdc82958af3763c5da67ad14b46699b418c4e",
"md5": "fb3ec172d76f97917809e29ccb1c329d",
"sha256": "3e54087bfd285bc80009c9826612ca4dcf2befdcd7e971565f474a34722af430"
},
"downloads": -1,
"filename": "unsafe-1.2.71-py3-none-any.whl",
"has_sig": false,
"md5_digest": "fb3ec172d76f97917809e29ccb1c329d",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 421925,
"upload_time": "2023-01-10T13:13:53",
"upload_time_iso_8601": "2023-01-10T13:13:53.052010Z",
"url": "https://files.pythonhosted.org/packages/fa/76/99fc5fa01b63746560ea965cdc82958af3763c5da67ad14b46699b418c4e/unsafe-1.2.71-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b4e36f2b4bde43fee8826b0a5c3a51b188330101e8f416b1c2614b41f9bbd1f7",
"md5": "a727b12849527d4469e8d5404826f7f9",
"sha256": "82056c8b56b6c61fda9539eb9ddff8f685526c64a483ba43a02b3b1fb89a248d"
},
"downloads": -1,
"filename": "unsafe-1.2.71.tar.gz",
"has_sig": false,
"md5_digest": "a727b12849527d4469e8d5404826f7f9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 407720,
"upload_time": "2023-01-10T13:13:56",
"upload_time_iso_8601": "2023-01-10T13:13:56.539483Z",
"url": "https://files.pythonhosted.org/packages/b4/e3/6f2b4bde43fee8826b0a5c3a51b188330101e8f416b1c2614b41f9bbd1f7/unsafe-1.2.71.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-01-10 13:13:56",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "ahur4",
"github_project": "unsafe",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "beautifulsoup4",
"specs": [
[
"==",
"4.11.1"
]
]
},
{
"name": "certifi",
"specs": [
[
"==",
"2022.12.7"
]
]
},
{
"name": "charset-normalizer",
"specs": [
[
"==",
"2.1.1"
]
]
},
{
"name": "idna",
"specs": [
[
"==",
"3.4"
]
]
},
{
"name": "mutagen",
"specs": [
[
"==",
"1.46.0"
]
]
},
{
"name": "Pillow",
"specs": [
[
"==",
"9.3.0"
]
]
},
{
"name": "plum-py",
"specs": [
[
"==",
"0.8.5"
]
]
},
{
"name": "PyPDF2",
"specs": [
[
"==",
"3.0.1"
]
]
},
{
"name": "PySocks",
"specs": [
[
"==",
"1.7.1"
]
]
},
{
"name": "requests",
"specs": [
[
"==",
"2.28.1"
]
]
},
{
"name": "soupsieve",
"specs": [
[
"==",
"2.3.2.post1"
]
]
},
{
"name": "urllib3",
"specs": [
[
"==",
"1.26.13"
]
]
}
],
"lcname": "unsafe"
}