Repository: litestar-org/polyfactory (python)

Issue:
Bug: `time` and `UUID` fields return string instead of the expected types
### Description

If `datetime.time` or `uuid.UUID` is specified as the type in a dataclass or typeddict then the field doesn't get an instance of `datetime.time` or `uuid.UUID` as expected. The field gets a string instead. This is due to `faker.time()` and `faker.uuid4()` returning strings.

### URL to code causing the issue

_No response_

### MCVE

```python
from dataclasses import dataclass
from uuid import UUID
from datetime import time

from polyfactory.factories import DataclassFactory

@dataclass
class Foo:

    t: time
    uuid: UUID

class FooFactory(DataclassFactory):

    __model__ = Foo


foo = FooFactory.build()

# NOTE: Both assertions fail.
assert isinstance(foo.t, time)
assert isinstance(foo.uuid, UUID)
```


### Steps to reproduce

```bash
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
```


### Screenshots

"In the format of: `![SCREENSHOT_DESCRIPTION](SCREENSHOT_LINK.png)`"


### Logs

_No response_

### Litestar Version

2.1.1

### Platform

- [X] Linux
- [ ] Mac
- [ ] Windows
- [ ] Other (Please specify in the description above)

Pull request:
Correct the Provider Logic
[//]: # "By submitting this pull request, you agree to:"
[//]: # "- follow [Litestar's Code of Conduct](https://github.com/litestar-org/.github/blob/main/CODE_OF_CONDUCT.md)"
[//]: # "- follow [Litestar's contribution guidelines](https://github.com/litestar-org/.github/blob/main/CONTRIBUTING.md)"

### Pull Request Checklist

[//]: # "Please review the [Litestar contribution guidelines](https://github.com/litestar-org/.github/blob/main/CONTRIBUTING.md) for this repository."

- [x ] New code has 100% test coverage
- [ ] (If applicable) The prose documentation has been updated to reflect the changes introduced by this PR
- [ ] (If applicable) The reference documentation has been updated to reflect the changes introduced by this PR

### Description

[//]: # "Please describe your pull request for new release changelog purposes"

### Close Issue(s)

[//]: # "Please add in issue numbers this pull request will close, if applicable"
[//]: # "Examples: Fixes #4321 or Closes #1234"

Fixes #223 


Patch:
diff --git a/polyfactory/factories/base.py b/polyfactory/factories/base.py
index 989d9bb..b7709e2 100644
--- a/polyfactory/factories/base.py
+++ b/polyfactory/factories/base.py
@@ -15,6 +15,9 @@ from ipaddress import (
     IPv6Address,
     IPv6Interface,
     IPv6Network,
+    ip_address,
+    ip_network,
+    ip_interface,
 )
 from os.path import realpath
 from pathlib import Path
@@ -412,19 +415,19 @@ class BaseFactory(ABC, Generic[T]):
             # standard library objects
             Path: lambda: Path(realpath(__file__)),
             Decimal: cls.__faker__.pydecimal,
-            UUID: cls.__faker__.uuid4,
+            UUID: lambda: UUID(cls.__faker__.uuid4()),
             # datetime
             datetime: cls.__faker__.date_time_between,
             date: cls.__faker__.date_this_decade,
-            time: cls.__faker__.time,
+            time: cls.__faker__.time_object,
             timedelta: cls.__faker__.time_delta,
             # ip addresses
-            IPv4Address: cls.__faker__.ipv4,
-            IPv4Interface: cls.__faker__.ipv4,
-            IPv4Network: lambda: cls.__faker__.ipv4(network=True),
-            IPv6Address: cls.__faker__.ipv6,
-            IPv6Interface: cls.__faker__.ipv6,
-            IPv6Network: lambda: cls.__faker__.ipv6(network=True),
+            IPv4Address: lambda: ip_address(cls.__faker__.ipv4()),
+            IPv4Interface: lambda: ip_interface(cls.__faker__.ipv4()),
+            IPv4Network: lambda: ip_network(cls.__faker__.ipv4(network=True)),
+            IPv6Address: lambda: ip_address(cls.__faker__.ipv6()),
+            IPv6Interface: lambda: ip_interface(cls.__faker__.ipv6()),
+            IPv6Network: lambda: ip_network(cls.__faker__.ipv6(network=True)),
             # types
             Callable: _create_generic_fn,
             Counter: lambda: Counter(cls.__faker__.pystr()),


Test patch:
diff --git a/tests/test_provider_map.py b/tests/test_provider_map.py
new file mode 100644
index 0000000..83a9603
--- /dev/null
+++ b/tests/test_provider_map.py
@@ -0,0 +1,15 @@
+from typing import Any
+
+from polyfactory.factories.base import BaseFactory
+from polyfactory.factories.base import _create_pydantic_type_map
+
+
+def test_provider_map() -> None:
+    provider_map = BaseFactory.get_provider_map()
+    provider_map.pop(Any)
+    for key in _create_pydantic_type_map(BaseFactory):  # type: ignore[type-abstract]
+        provider_map.pop(key)
+
+    for type_, handler in provider_map.items():
+        value = handler()
+        assert isinstance(value, type_)