From 766ff5b69de83790993018ab75a983eb8aad5e1b Mon Sep 17 00:00:00 2001 From: simonwt Date: Tue, 7 Apr 2026 21:54:52 +0100 Subject: [PATCH] Tested and fixed trust createorupdate --- .../jobs/trust/createorupdate.py | 2 +- src/trustcafeapiwrapper/utils/__init__.py | 4 +++- .../utils/get_user_slug_from_path.py | 21 ++++++++++++++++++ .../utils/get_userprofile_pksk_from_slug.py | 6 +++++ .../wrappers/trust/__init__.py | 1 + .../wrappers/trust/trust.py | 22 +++++++++++++++++++ testing.py | 10 +++++++-- tests/utils/get_user_slug_from_path.py | 8 +++++++ tests/utils/get_userprofile_pksk_from_slug.py | 11 ++++++++++ tests/wrappers/trust.py | 15 +++++++++++++ unittests.py | 4 ++++ 11 files changed, 100 insertions(+), 4 deletions(-) create mode 100644 src/trustcafeapiwrapper/utils/get_user_slug_from_path.py create mode 100644 src/trustcafeapiwrapper/utils/get_userprofile_pksk_from_slug.py create mode 100644 src/trustcafeapiwrapper/wrappers/trust/__init__.py create mode 100644 src/trustcafeapiwrapper/wrappers/trust/trust.py create mode 100644 tests/utils/get_user_slug_from_path.py create mode 100644 tests/utils/get_userprofile_pksk_from_slug.py create mode 100644 tests/wrappers/trust.py diff --git a/src/trustcafeapiwrapper/jobs/trust/createorupdate.py b/src/trustcafeapiwrapper/jobs/trust/createorupdate.py index 3e1b810..a254103 100644 --- a/src/trustcafeapiwrapper/jobs/trust/createorupdate.py +++ b/src/trustcafeapiwrapper/jobs/trust/createorupdate.py @@ -8,5 +8,5 @@ def createorupdate(API, payload: dict) -> dict: Returns: dict: The trust relationship data. """ - trust_data = API.make_request("POST", "content", "reltrust", data=payload, authenticate=True) + trust_data = API.make_request("PUT", "content", "reltrust", data=payload, authenticate=True) return trust_data \ No newline at end of file diff --git a/src/trustcafeapiwrapper/utils/__init__.py b/src/trustcafeapiwrapper/utils/__init__.py index f0d7955..08e5cba 100644 --- a/src/trustcafeapiwrapper/utils/__init__.py +++ b/src/trustcafeapiwrapper/utils/__init__.py @@ -2,4 +2,6 @@ from .get_parent_pksk_from_path import get_parent_pksk_from_path from .get_post_pksk import get_post_pksk from .make_comment_sk import make_comment_sk from .make_post_sk import make_post_sk -from .get_child_spksk_from_paths import get_child_spksk_from_paths \ No newline at end of file +from .get_child_spksk_from_paths import get_child_spksk_from_paths +from .get_user_slug_from_path import get_user_slug_from_path +from .get_userprofile_pksk_from_slug import get_userprofile_pksk_from_slug \ No newline at end of file diff --git a/src/trustcafeapiwrapper/utils/get_user_slug_from_path.py b/src/trustcafeapiwrapper/utils/get_user_slug_from_path.py new file mode 100644 index 0000000..0bc57e8 --- /dev/null +++ b/src/trustcafeapiwrapper/utils/get_user_slug_from_path.py @@ -0,0 +1,21 @@ +def get_user_slug_from_path(path: str): + """ + Extracts the user slug from a given path. + + Args: + path (str): The path from which to extract the user slug. + + Returns: + str: The extracted user slug. + """ + if not isinstance(path, str): + raise ValueError("Input path must be a string.") + + if '/userprofile/' in path: + return path.split('/userprofile/')[-1] + elif '/user/' in path: + return path.split('/user/')[-1] + elif '/' not in path: + return path + else: + return None \ No newline at end of file diff --git a/src/trustcafeapiwrapper/utils/get_userprofile_pksk_from_slug.py b/src/trustcafeapiwrapper/utils/get_userprofile_pksk_from_slug.py new file mode 100644 index 0000000..150cca0 --- /dev/null +++ b/src/trustcafeapiwrapper/utils/get_userprofile_pksk_from_slug.py @@ -0,0 +1,6 @@ +def get_userprofile_pksk_from_slug(slug: str): + pksk = "userprofile#" + slug + return { + "pk": pksk, + "sk": pksk + } \ No newline at end of file diff --git a/src/trustcafeapiwrapper/wrappers/trust/__init__.py b/src/trustcafeapiwrapper/wrappers/trust/__init__.py new file mode 100644 index 0000000..3da5ff2 --- /dev/null +++ b/src/trustcafeapiwrapper/wrappers/trust/__init__.py @@ -0,0 +1 @@ +from .trust import trust \ No newline at end of file diff --git a/src/trustcafeapiwrapper/wrappers/trust/trust.py b/src/trustcafeapiwrapper/wrappers/trust/trust.py new file mode 100644 index 0000000..3bb5c56 --- /dev/null +++ b/src/trustcafeapiwrapper/wrappers/trust/trust.py @@ -0,0 +1,22 @@ +from trustcafeapiwrapper.utils import get_user_slug_from_path, get_userprofile_pksk_from_slug + +def trust(trustLevel: str, userprofile_path: str): + """ + Creates new or update existing trust entry in the API. + + Args: + + Returns: + dict: A dictionary containing the job name and payload for creating the post + that will be processed by the API client wrapper function. + """ + userProfileSlug = get_user_slug_from_path(userprofile_path) + userPKSK = get_userprofile_pksk_from_slug(userProfileSlug) + return { + "job_function": "trust.createorupdate", + "payload": { + "trustLevel": trustLevel, + "parentSlug": userProfileSlug, + "parent": userPKSK + } + } diff --git a/testing.py b/testing.py index bd8f217..5ede80d 100644 --- a/testing.py +++ b/testing.py @@ -141,7 +141,7 @@ print(feed) # save_response(API.run_job('post.listall')) # save_response(API.run_job('post.listpublic')) -from trustcafeapiwrapper.wrappers.post.create_post import create_post +# from trustcafeapiwrapper.wrappers.post.create_post import create_post # save_response(create_post( # post_text="This is a test post created via the create_post wrapper function.", @@ -181,4 +181,10 @@ from trustcafeapiwrapper.wrappers.post.create_post import create_post # users = API.run_job('trust.listbyuserinit', "simon-little") # print(users) # users = API.run_job('trust.listbyuserhas', "simon-little ") -# print(users) \ No newline at end of file +# print(users) + +from trustcafeapiwrapper.wrappers.trust import trust +save_response(API.wrapped(trust( + 100, + "/user/bossman" +))) \ No newline at end of file diff --git a/tests/utils/get_user_slug_from_path.py b/tests/utils/get_user_slug_from_path.py new file mode 100644 index 0000000..9b59905 --- /dev/null +++ b/tests/utils/get_user_slug_from_path.py @@ -0,0 +1,8 @@ +import unittest +from trustcafeapiwrapper.utils.get_user_slug_from_path import get_user_slug_from_path + +class TestGetUserSlugFromPath(unittest.TestCase): + def test_get_user_slug_from_path(self): + + # Test with a valid user path + self.assertEqual(get_user_slug_from_path('/user/johndoe'), 'johndoe') diff --git a/tests/utils/get_userprofile_pksk_from_slug.py b/tests/utils/get_userprofile_pksk_from_slug.py new file mode 100644 index 0000000..3ce5163 --- /dev/null +++ b/tests/utils/get_userprofile_pksk_from_slug.py @@ -0,0 +1,11 @@ +import unittest +from trustcafeapiwrapper.utils.get_userprofile_pksk_from_slug import get_userprofile_pksk_from_slug + +class TestGetUserprofilePkskFromSlug(unittest.TestCase): + def test_get_userprofile_pksk_from_slug(self): + slug = 'testuser' + expected_result = { + "pk": "userprofile#testuser", + "sk": "userprofile#testuser" + } + self.assertEqual(get_userprofile_pksk_from_slug(slug), expected_result) diff --git a/tests/wrappers/trust.py b/tests/wrappers/trust.py new file mode 100644 index 0000000..fe723f8 --- /dev/null +++ b/tests/wrappers/trust.py @@ -0,0 +1,15 @@ +import unittest +from trustcafeapiwrapper.wrappers.trust.trust import trust + +class TestTrustCreateOrUpdate(unittest.TestCase): + def test_trust(self): + trustLevel = 100 + userprofile_path = '/user/johndoe' + result = trust(trustLevel, userprofile_path) + + self.assertIsInstance(result, dict) + self.assertIn("job_function", result) + self.assertIn("payload", result) + self.assertEqual(result["job_function"], "trust.createorupdate") + self.assertEqual(result["payload"]["trustLevel"], trustLevel) + self.assertEqual(result["payload"]["parentSlug"], "johndoe") \ No newline at end of file diff --git a/unittests.py b/unittests.py index e409dff..f787956 100644 --- a/unittests.py +++ b/unittests.py @@ -7,11 +7,15 @@ from tests.utils.get_parent_pksk_from_path import TestGetParentPkskFromPath from tests.utils.make_comment_sk import TestMakeCommentSk from tests.utils.make_post_sk import TestMakePostSk from tests.utils.get_child_spksk_from_paths import TestGetChildSpkskFromPaths +from tests.utils.get_user_slug_from_path import TestGetUserSlugFromPath +from tests.utils.get_userprofile_pksk_from_slug import TestGetUserprofilePkskFromSlug from tests.wrappers.create_post import TestCreatePost from tests.wrappers.create_comment import TestCreateComment from tests.wrappers.react import TestReact from tests.wrappers.vote import TestVoteCast +from tests.wrappers.trust import TestTrustCreateOrUpdate + from tests.apiclient import TestAPIClient