CircArgs commented on a change in pull request #4016:
URL: https://github.com/apache/iceberg/pull/4016#discussion_r796198759
##########
File path: python/src/iceberg/types.py
##########
@@ -15,61 +15,84 @@
# specific language governing permissions and limitations
# under the License.
"""Data types used in describing Iceberg schemas
-
This module implements the data types described in the Iceberg specification
for Iceberg schemas. To
describe an Iceberg table schema, these classes can be used in the
construction of a StructType instance.
-
Example:
>>> StructType(
[
NestedField(True, 1, "required_field", StringType()),
NestedField(False, 2, "optional_field", IntegerType()),
]
)
-
Notes:
- https://iceberg.apache.org/#spec/#primitive-types
"""
-from typing import Optional
+from typing import Any, Dict, List, Optional, Tuple
-class Type:
- def __init__(self, type_string: str, repr_string: str, is_primitive=False):
- self._type_string = type_string
- self._repr_string = repr_string
- self._is_primitive = is_primitive
+class IcebergType:
+
+ _implemented: Dict[Tuple[str, Tuple[Any]], "IcebergType"] = {}
+
+ def __new__(cls, *args, **kwargs):
Review comment:
I think there's still a case to be made for a single implementation
maybe just one that does not introspect and is more explicit? Say a decorator?
I think something like
```python
@singleton('length')
class FixedType(IcebergType):
# __new__ given via decorator
```
would be doable
`singleton` wouldn't have to do much but set a `new` that looks at what the
decorator was fed. it would still have generic logic though just not
introspection with the hidden attributes as it is currently. Do you think
that's still too much?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]