Skip to content

Commit

Permalink
SharePoint model updates, activities namespace enhancements
Browse files Browse the repository at this point in the history
  • Loading branch information
vgrem committed Apr 14, 2024
1 parent 337a697 commit a255892
Show file tree
Hide file tree
Showing 32 changed files with 414 additions and 77 deletions.
2 changes: 1 addition & 1 deletion examples/sharepoint/listitems/attachments/upload.py
Expand Up @@ -12,7 +12,7 @@
# 1. create a new list item
task_item = tasks_list.add_item({"Title": "New Task"}).execute_query()

task_item.attachment_files.delete_all().execute_query()
# task_item.attachment_files.delete_all().execute_query()

# 2. read & upload attachment for a list item
path = "../../../data/Financial Sample.xlsx"
Expand Down
12 changes: 12 additions & 0 deletions examples/sharepoint/userprofile/get_followers.py
@@ -0,0 +1,12 @@
"""
Gets the people who are following the specified user.
"""
from office365.sharepoint.client_context import ClientContext
from tests import test_client_credentials, test_site_url, test_user_principal_name

client = ClientContext(test_site_url).with_credentials(test_client_credentials)
user = client.site.root_web.site_users.get_by_email(test_user_principal_name)

result = client.people_manager.get_followers_for(user).execute_query()
for follower in result:
print(follower)
5 changes: 5 additions & 0 deletions examples/sharepoint/webs/clear_web.py
@@ -1,8 +1,13 @@
"""
"""

from office365.sharepoint.client_context import ClientContext
from tests import test_client_credentials, test_site_url


def print_progress(num_deleted):
# type: (int) -> None
print("{0} deleted.".format(num_deleted))


Expand Down
1 change: 0 additions & 1 deletion examples/sharepoint/webs/get_activities.py
@@ -1,7 +1,6 @@
"""
Gets web activities
"""
from office365.sharepoint.activities.entity import SPActivityEntity
from office365.sharepoint.client_context import ClientContext
from tests import test_client_credentials, test_site_url

Expand Down
6 changes: 6 additions & 0 deletions office365/sharepoint/activities/action_facet.py
Expand Up @@ -7,6 +7,8 @@
from office365.sharepoint.activities.facets.discard_checkout import DiscardCheckoutFacet
from office365.sharepoint.activities.facets.edit import EditFacet
from office365.sharepoint.activities.facets.get_comment import GetCommentFacet
from office365.sharepoint.activities.facets.get_mention import GetMentionFacet
from office365.sharepoint.activities.facets.move import MoveFacet
from office365.sharepoint.activities.facets.rename import RenameFacet
from office365.sharepoint.activities.facets.sharing import SharingFacet

Expand All @@ -22,6 +24,8 @@ def __init__(
delete=DeleteFacet(),
discard_checkout=DiscardCheckoutFacet(),
edit=EditFacet(),
mention=GetMentionFacet(),
move=MoveFacet(),
rename=RenameFacet(),
share=SharingFacet(),
):
Expand All @@ -42,6 +46,8 @@ def __init__(
self.delete = delete
self.discardCheckout = discard_checkout
self.edit = edit
self.mention = mention
self.move = move
self.rename = rename
self.share = share

Expand Down
10 changes: 10 additions & 0 deletions office365/sharepoint/activities/entity.py
Expand Up @@ -34,6 +34,16 @@ def resource(self):
def times(self):
return self.properties.get("times", ActivityTimeFacet())

@property
def property_ref_name(self):
return "id"

@property
def entity_type_name(self):
return "Microsoft.SharePoint.Activities.SPActivityEntity"

def set_property(self, name, value, persist_changes=True):
super(SPActivityEntity, self).set_property(name, value, persist_changes)
if name == self.property_ref_name:
self._resource_path.patch(value)
return self
10 changes: 10 additions & 0 deletions office365/sharepoint/activities/facets/get_mention.py
@@ -0,0 +1,10 @@
from office365.runtime.client_value import ClientValue
from office365.runtime.client_value_collection import ClientValueCollection
from office365.sharepoint.activities.identity import ActivityIdentity


class GetMentionFacet(ClientValue):
""""""

def __init__(self, mentionees=None):
self.mentionees = ClientValueCollection(ActivityIdentity, mentionees)
14 changes: 14 additions & 0 deletions office365/sharepoint/activities/facets/move.py
@@ -0,0 +1,14 @@
from office365.runtime.client_value import ClientValue
from office365.sharepoint.types.resource_path import ResourcePath as SPResPath


class MoveFacet(ClientValue):
""""""

def __init__(self, from_=SPResPath(), to=SPResPath()):
self.from_ = from_
self.to = to

@property
def entity_type_name(self):
return "Microsoft.SharePoint.Activities.MoveFacet"
17 changes: 16 additions & 1 deletion office365/sharepoint/activities/identity_item.py
Expand Up @@ -2,11 +2,26 @@


class ActivityIdentityItem(ClientValue):
def __init__(self, client_id=None):
def __init__(
self,
client_id=None,
clientIdProvider=None,
displayName=None,
email=None,
userPrincipalName=None,
):
"""
:param str client_id:
:param str clientIdProvider:
:param str displayName:
:param str email:
:param str userPrincipalName:
"""
self.clientId = client_id
self.clientIdProvider = clientIdProvider
self.displayName = displayName
self.email = email
self.userPrincipalName = userPrincipalName

@property
def entity_type_name(self):
Expand Down
29 changes: 29 additions & 0 deletions office365/sharepoint/client_context.py
Expand Up @@ -410,6 +410,16 @@ def announcements(self):

return AnnouncementsController(self, ResourcePath("Announcements"))

@property
def client_people_picker(self):
"""Query principals service alias"""

from office365.sharepoint.ui.applicationpages.peoplepicker.web_service_interface import (
ClientPeoplePickerWebServiceInterface,
)

return ClientPeoplePickerWebServiceInterface(self)

@property
def consumer_permissions(self):
"""Consumer permissions alias"""
Expand All @@ -431,6 +441,15 @@ def ee(self):

return EmployeeEngagement(self)

@property
def directory_provider(self):
"""Alias to SharePointDirectoryProvider"""
from office365.sharepoint.directory.provider.provider import (
SharePointDirectoryProvider,
)

return SharePointDirectoryProvider(self)

@property
def employee_experience(self):
"""Alias to EmployeeExperience"""
Expand Down Expand Up @@ -612,6 +631,16 @@ def home_site(self):

return SPHSite(self, ResourcePath("SPHSite"))

@property
def people_picker(self):
"""Query principals service alias"""

from office365.sharepoint.ui.applicationpages.peoplepicker.web_service_interface import (
PeoplePickerWebServiceInterface,
)

return PeoplePickerWebServiceInterface(self)

@property
def publications(self):
from office365.sharepoint.contentcenter.machinelearning.publications.publication import (
Expand Down
43 changes: 43 additions & 0 deletions office365/sharepoint/compliance/store_proxy.py
@@ -1,12 +1,55 @@
from typing import TYPE_CHECKING, Optional

from office365.runtime.client_result import ClientResult
from office365.runtime.client_value_collection import ClientValueCollection
from office365.runtime.queries.service_operation import ServiceOperationQuery
from office365.runtime.types.collections import StringCollection
from office365.sharepoint.compliance.tag import ComplianceTag
from office365.sharepoint.entity import Entity

if TYPE_CHECKING:
from office365.sharepoint.client_context import ClientContext


class SPPolicyStoreProxy(Entity):
@staticmethod
def check_site_is_deletable_by_id(context, site_id, return_type=None):
# type: (ClientContext, str, Optional[ClientResult[bool]]) -> ClientResult[bool]
""" """
if return_type is None:
return_type = ClientResult(context, bool())
payload = {"siteId": site_id}
qry = ServiceOperationQuery(
SPPolicyStoreProxy(context),
"CheckSiteIsDeletableById",
None,
payload,
None,
return_type,
True,
)
context.add_query(qry)
return return_type

@staticmethod
def is_site_deletable(context, site_url, return_type=None):
# type: (ClientContext, str, Optional[ClientResult[bool]]) -> ClientResult[bool]
""" """
if return_type is None:
return_type = ClientResult(context, bool())
payload = {"siteUrl": site_url}
qry = ServiceOperationQuery(
SPPolicyStoreProxy(context),
"IsSiteDeletable",
None,
payload,
None,
return_type,
True,
)
context.add_query(qry)
return return_type

@staticmethod
def get_available_tags_for_site(context, site_url, return_type=None):
"""
Expand Down
9 changes: 9 additions & 0 deletions office365/sharepoint/directory/provider/alternate_id_data.py
@@ -0,0 +1,9 @@
from office365.runtime.client_value import ClientValue


class AlternateIdData(ClientValue):
""""""

@property
def entity_type_name(self):
return "SP.Directory.Provider.AlternateIdData"
15 changes: 15 additions & 0 deletions office365/sharepoint/directory/provider/notification.py
@@ -0,0 +1,15 @@
from office365.runtime.paths.resource_path import ResourcePath
from office365.sharepoint.entity import Entity


class DirectoryNotification(Entity):
""""""

def __init__(self, context, resource_path=None):
if resource_path is None:
resource_path = ResourcePath("SP.Directory.Provider.DirectoryNotification")
super(DirectoryNotification, self).__init__(context, resource_path)

@property
def entity_type_name(self):
return "SP.Directory.Provider.DirectoryNotification"
14 changes: 14 additions & 0 deletions office365/sharepoint/directory/provider/object_data.py
@@ -0,0 +1,14 @@
from office365.runtime.client_value import ClientValue
from office365.sharepoint.directory.provider.alternate_id_data import AlternateIdData


class DirectoryObjectData(ClientValue):
""""""

def __init__(self, AlternateId=AlternateIdData(), Id=None):
self.AlternateId = AlternateId
self.Id = Id

@property
def entity_type_name(self):
return "SP.Directory.Provider.DirectoryObjectData"
13 changes: 13 additions & 0 deletions office365/sharepoint/directory/provider/provider.py
@@ -1,4 +1,7 @@
from office365.runtime.client_result import ClientResult
from office365.runtime.paths.resource_path import ResourcePath
from office365.runtime.queries.service_operation import ServiceOperationQuery
from office365.sharepoint.directory.provider.object_data import DirectoryObjectData
from office365.sharepoint.entity import Entity


Expand All @@ -10,6 +13,16 @@ def __init__(self, context, resource_path=None):
)
super(SharePointDirectoryProvider, self).__init__(context, resource_path)

def read_directory_object(self, data):
""""""
return_type = ClientResult(self.context, DirectoryObjectData())
payload = {"data": data}
qry = ServiceOperationQuery(
self, "ReadDirectoryObject", None, payload, None, return_type
)
self.context.add_query(qry)
return return_type

@property
def entity_type_name(self):
return "SP.Directory.Provider.SharePointDirectoryProvider"
9 changes: 9 additions & 0 deletions office365/sharepoint/multigeo/move_job_entity_data.py
@@ -0,0 +1,9 @@
from office365.sharepoint.entity import Entity


class MoveJobEntityData(Entity):
""""""

@property
def entity_type_name(self):
return "Microsoft.Online.SharePoint.MultiGeo.Service.MoveJobEntityData"
9 changes: 9 additions & 0 deletions office365/sharepoint/multigeo/site_move_job_entity_data.py
@@ -0,0 +1,9 @@
from office365.sharepoint.multigeo.move_job_entity_data import MoveJobEntityData


class SiteMoveJobEntityData(MoveJobEntityData):
""""""

@property
def entity_type_name(self):
return "Microsoft.Online.SharePoint.MultiGeo.Service.SiteMoveJobEntityData"
9 changes: 9 additions & 0 deletions office365/sharepoint/multigeo/user_personal_site_location.py
@@ -0,0 +1,9 @@
from office365.sharepoint.entity import Entity


class UserPersonalSiteLocation(Entity):
""""""

@property
def entity_type_name(self):
return "Microsoft.Online.SharePoint.MultiGeo.Service.UserPersonalSiteLocation"
Expand Up @@ -13,3 +13,8 @@ def __init__(self, email=None, loginName=None, userPrincipalName=None):
self.email = email
self.loginName = loginName
self.userPrincipalName = userPrincipalName

@property
def entity_type_name(self):
# type: () -> str
return "Microsoft.Online.SharePoint.TenantAdministration.SecondaryAdministratorsInfo"
14 changes: 14 additions & 0 deletions office365/sharepoint/tenant/administration/tenant.py
Expand Up @@ -587,6 +587,14 @@ def send_email(self, site_url):
self.context.add_query(qry)
return return_type

@property
def admin_settings(self):
from office365.sharepoint.tenant.administration.settings_service import (
TenantAdminSettingsService,
)

return TenantAdminSettingsService(self.context)

@property
def ai_builder_enabled(self):
# type: () -> Optional[str]
Expand Down Expand Up @@ -656,6 +664,12 @@ def sites(self):
),
)

@property
def cdn_api(self):
from office365.sharepoint.tenant.cdn_api import TenantCdnApi

return TenantCdnApi(self.context)

@property
def syntex_billing_subscription_settings(self):
""""""
Expand Down

0 comments on commit a255892

Please sign in to comment.