From 57758c378e284aac6a3269d227733c7a39f2e6c2 Mon Sep 17 00:00:00 2001 From: Erdal Sivri Date: Wed, 8 Oct 2025 03:45:05 +0000 Subject: [PATCH] 2025-10-07 release: Version 0.1.9 Changelog: Add username and slug to SetIamPolicy API --- kagglesdk/__init__.py | 2 +- kagglesdk/security/types/iam_service.py | 48 +++++++++++++++++++++---- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/kagglesdk/__init__.py b/kagglesdk/__init__.py index 88069ba..4aae49c 100644 --- a/kagglesdk/__init__.py +++ b/kagglesdk/__init__.py @@ -1,4 +1,4 @@ -__version__ = "0.1.8" +__version__ = "0.1.9" from kagglesdk.kaggle_client import KaggleClient from kagglesdk.kaggle_creds import KaggleCredentials diff --git a/kagglesdk/security/types/iam_service.py b/kagglesdk/security/types/iam_service.py index c46e27c..09a078b 100644 --- a/kagglesdk/security/types/iam_service.py +++ b/kagglesdk/security/types/iam_service.py @@ -46,17 +46,19 @@ class GroupPrincipal(KaggleObject): r""" Attributes: id (int) + slug (str) avatar (UserManagedGroup) """ def __init__(self): - self._id = 0 + self._id = None + self._slug = None self._avatar = None self._freeze() @property def id(self) -> int: - return self._id + return self._id or 0 @id.setter def id(self, id: int): @@ -65,8 +67,23 @@ def id(self, id: int): return if not isinstance(id, int): raise TypeError('id must be of type int') + del self.slug self._id = id + @property + def slug(self) -> str: + return self._slug or "" + + @slug.setter + def slug(self, slug: str): + if slug is None: + del self.slug + return + if not isinstance(slug, str): + raise TypeError('slug must be of type str') + del self.id + self._slug = slug + @property def avatar(self) -> Optional['UserManagedGroup']: return self._avatar @@ -382,17 +399,19 @@ class UserPrincipal(KaggleObject): r""" Attributes: id (int) + user_name (str) avatar (UserAvatar) """ def __init__(self): - self._id = 0 + self._id = None + self._user_name = None self._avatar = None self._freeze() @property def id(self) -> int: - return self._id + return self._id or 0 @id.setter def id(self, id: int): @@ -401,8 +420,23 @@ def id(self, id: int): return if not isinstance(id, int): raise TypeError('id must be of type int') + del self.user_name self._id = id + @property + def user_name(self) -> str: + return self._user_name or "" + + @user_name.setter + def user_name(self, user_name: str): + if user_name is None: + del self.user_name + return + if not isinstance(user_name, str): + raise TypeError('user_name must be of type str') + del self.id + self._user_name = user_name + @property def avatar(self) -> Optional['UserAvatar']: return self._avatar @@ -422,7 +456,8 @@ def avatar(self, avatar: Optional['UserAvatar']): ] GroupPrincipal._fields = [ - FieldMetadata("id", "id", "_id", int, 0, PredefinedSerializer()), + FieldMetadata("id", "id", "_id", int, None, PredefinedSerializer(), optional=True), + FieldMetadata("slug", "slug", "_slug", str, None, PredefinedSerializer(), optional=True), FieldMetadata("avatar", "avatar", "_avatar", UserManagedGroup, None, KaggleObjectSerializer()), ] @@ -454,7 +489,8 @@ def avatar(self, avatar: Optional['UserAvatar']): ] UserPrincipal._fields = [ - FieldMetadata("id", "id", "_id", int, 0, PredefinedSerializer()), + FieldMetadata("id", "id", "_id", int, None, PredefinedSerializer(), optional=True), + FieldMetadata("userName", "user_name", "_user_name", str, None, PredefinedSerializer(), optional=True), FieldMetadata("avatar", "avatar", "_avatar", UserAvatar, None, KaggleObjectSerializer()), ]