initial commit

This commit is contained in:
Hazel 2024-11-19 14:51:55 +01:00
parent 8cfaef4088
commit 4a8468f014
4 changed files with 136 additions and 2 deletions

View File

@ -1,3 +1,72 @@
# Pycountry-Wrapper # Pycountry-Wrapper
This is a wrapper for pycountry, to make said library more usable. This is a wrapper for pycountry, to make said library more usable.
## Installation
You can install the library by using pip:
```bash
pip install pycountry-wrapper
```
## Usage
```python
from pycountry_wrapper import Country, CountryDoesNotExist
germany = Country.from_alpha_2("DE")
print(germany)
print(germany.name)
try:
does_not_exist = Country.from_alpha_2("EN")
except CountryDoesNotExist:
# if the country wasn't found, this exception is thrown
pass
```
### Creating country class
You can call create an instance of `pycountry_wrapper.Country` in three ways.
Using **ISO 3166-1** with either 2 or 3 letters:
```python
from pycountry_wrapper import Country
Country.from_alpha_2("DE")
Country.from_alpha_2("DEU")
```
Or you can do a fuzzy search in a similar way:
```python
from pycountry_wrapper import Country
Country.from_fuzzy("Deutschland")
```
Or you can pass a pycountry object in the constructor:
```python
import pycountry
from pycountry_wrapper import Country
Country(pycountry.countries.get(alpha_2="DE"))
```
### Accessing information
There are only a handful (readonly) attributes.
```python
from pycountry_wrapper import Country
country = Country.from_alpha_2("DE")
country.name
country.alpha_2
country.alpha_3
country.official_name
```

View File

@ -0,0 +1,60 @@
from __future__ import annotations
import pycountry
class CountryDoesNotExist(Exception): pass
class Country:
"""
This gets countries based on the ISO 3166-1 standart.
Two examples are:
- Country.from_alpha_2("DE")
- Country.from_alpha_3("DEU")
If the country couldn't be found, it raises the pycountry_wrapper.CountryDoesNotExist exception.
"""
def __init__(self, pycountry_object):
if pycountry_object is None:
raise CountryDoesNotExist()
self.pycountry_object = pycountry_object
@classmethod
def from_alpha_2(cls, alpha_2: str) -> Country:
return cls(pycountry.countries.get(alpha_2=alpha_2.upper()))
@classmethod
def from_alpha_3(cls, alpha_3: str) -> Country:
return cls(pycountry.countries.get(alpha_3=alpha_3.upper()))
@classmethod
def from_fuzzy(cls, fuzzy: str) -> Country:
return cls(pycountry.countries.search_fuzzy(fuzzy))
@property
def name(self) -> str:
return self.pycountry_object.name
@property
def alpha_2(self) -> str:
return self.pycountry_object.alpha_2
@property
def alpha_3(self) -> str:
return self.pycountry_object.alpha_3
@property
def numeric(self) -> str:
return self.pycountry_object.numeric
@property
def official_name(self) -> str:
return self.pycountry_object.official_name
def __str__(self) -> str:
return self.pycountry_object.__str__()
def __repr__(self) -> str:
return self.pycountry_object.__repr__()

View File

@ -1,5 +1,8 @@
from .__about__ import __name__, __version__ from .__about__ import __name__, __version__
from . import Country
def cli(): def cli():
print(f"Running {__name__} version {__version__} from __main__.py") print(f"Running {__name__} version {__version__} from __main__.py")
print(Country.from_alpha_2("DE"))

View File

@ -1,6 +1,8 @@
[project] [project]
name = "pycountry-wrapper" name = "pycountry-wrapper"
dependencies = [] dependencies = [
"pycountry~=24.6.1",
]
dynamic = ["version"] dynamic = ["version"]
authors = [] authors = []
description = "This is a wrapper for pycountry, to make said library more usable." description = "This is a wrapper for pycountry, to make said library more usable."