microsoftgraph / msgraph-sdk-python

MIT License
373 stars 54 forks source link

service_principals_with_app_id().get() returns invalid syntax #637

Closed jurw2201 closed 1 month ago

jurw2201 commented 7 months ago

When trying to retrieve the service principal behind an application id using function

await graph_client.service_principals_with_app_id(app_id = service_principal.application_id).get()

a syntax error is returned:

SyntaxError: invalid syntax. Perhaps you forgot a comma? (service_principals_with_app_id_request_builder.py, line 101)

"/lib/python3.10/site-packages/msgraph/generated/service_principals_with_app_id/service_principals_with_app_id_request_builder.py:101 request_info = RequestInformation(Method.DELETE, '{+baseurl}/servicePrincipals(appId='{appId}')', self.path_parameters)"

The msgraph-sdk version used is 1.2.0.

The function is working when using version 1.1.0

yavuzkaymak commented 6 months ago

i got the same problem as a work around use this: ` from msgraph.generated.service_principals.service_principals_request_builder import ServicePrincipalsRequestBuilder app_id = "xxxx"

query_params = ServicePrincipalsRequestBuilder.ServicePrincipalsRequestBuilderGetQueryParameters(
    search=f'\"appId:{app_id}\"'
)
request_configuration = ServicePrincipalsRequestBuilder.ServicePrincipalsRequestBuilderGetRequestConfiguration(
    query_parameters=query_params,
)
request_configuration.headers.add("ConsistencyLevel", "eventual")

response = await client.service_principals.get(request_configuration=request_configuration)`
pamelafox commented 6 months ago

Similar error with:

app = await graph_client.applications_with_app_id(app_id).get()

The incorrect code:

def to_delete_request_information(self,request_configuration: Optional[ApplicationsWithAppIdRequestBuilderDeleteRequestConfiguration] = None) -> RequestInformation:
    """
    Delete an application object. When deleted, apps are moved to a temporary container and can be restored within 30 days. After that time, they are permanently deleted.
    param request_configuration: Configuration for the request such as headers, query parameters, and middleware options.
    Returns: RequestInformation
    """
    request_info = RequestInformation(Method.DELETE, '{+baseurl}/applications(appId='{appId}')', self.path_parameters)
    request_info.configure(request_configuration)
    request_info.headers.try_add("Accept", "application/json")
    return request_info

I'm guessing the code generator is missing logic to escape quotes.

shemogumbe commented 1 month ago

Hello @jurw2201 Thanks for using the SDK and for generating this.

Sorry for the inconvenience caused by this, running this with the latest version of the SDK, I get:

async def get_service_principal_by_app_id():
    try:
        service_principals = await user_client.service_principals_with_app_id(
            "ab3be6b7-f5df-413d-ac2d-abf1e3fd9c0b").get()
        print(service_principals)

    except APIError as api_error:
        print(f"api error {api_error}")

asyncio.run(get_service_principal_by_app_id())

Gives:

ServicePrincipal(additional_data={'@odata.context': 'https://graph.microsoft.com/v1.0/$metadata#servicePrincipals/$entity', 'createdDateTime': DateTime(2024, 4, 19, 15, 17, 46, tzinfo=Timezone('UTC'))}, id='00d56cd3-a55b-44b2-bf6b-d1efdfda898f', odata_type='#microsoft.graph.servicePrincipal', deleted_date_time=None, account_enabled=True, add_ins=[], alternative_names=[], app_description=None, app_display_name='Microsoft Teams Graph Service', app_id='ab3be6b7-f5df-413d-ac2d-abf1e3fd9c0b', app_management_policies=None, app_owner_organization_id=UUID('f8cdef31-a31e-4b4a-93e4-5f571e91255a'), app_role_assigned_to=None, app_role_assignment_required=False, app_role_assignments=None, app_roles=[AppRole(additional_data={}, allowed_member_types=['Application'], description="Allows Microsoft Graph to call into the service to perform operations on application's behalf", display_name='Access APIs exposed by Teams Graph worload', id=UUID('ed20b8a8-12e9-45f5-b3e5-69f25572d7be'), is_enabled=True, odata_type=None, origin='Application', value='Graph.ReadWrite.All'), AppRole(additional_data={}, allowed_member_types=['Application'], description='Allows reading resource specific permissions for an application', display_name='Allow reading resource specific permissions', id=UUID('226fe4b3-a51b-403f-887c-b4f10a79c5aa'), is_enabled=True, odata_type=None, origin='Application', value='ResourceSpecificPermission.Read.All'), AppRole(additional_data={}, allowed_member_types=['Application'], description='Allows reading and writing resource specific permissions for an application, without a signed-in user.', display_name='ResourceSpecificPermission.ReadWrite.All', id=UUID('610a1fb0-5de2-4e6c-923b-b01b49ae9c54'), is_enabled=True, odata_type=None, origin='Application', value='ResourceSpecificPermission.ReadWrite.All'), AppRole(additional_data={}, allowed_member_types=['Application'], description='Allows publishing of life cycle events, such as deletion and migration, of a tenant.', display_name='TenantLifeCycleEvent.Publish', id=UUID('dc4b90ad-de81-4835-8e77-ce5b1a60cbcb'), is_enabled=True, odata_type=None, origin='Application', value='TenantLifeCycleEvent.Publish'), AppRole(additional_data={}, allowed_member_types=['Application'], description='Allows reading unredacted Teams App Api secret registrations', display_name='Allows reading unredacted Teams App Api secret registrations', id=UUID('af8f2fa3-fc06-41b1-aed5-e2645bfe886f'), is_enabled=True, odata_type=None, origin='Application', value='ApiSecretRegistration.ReadUnredacted.All')], application_template_id=None, claims_mapping_policies=None, created_objects=None, custom_security_attributes=None, delegated_permission_classifications=None, description=None, disabled_by_microsoft_status=None, display_name='Microsoft Teams Graph Service', endpoints=None, federated_identity_credentials=None, home_realm_discovery_policies=None, homepage=None, info=InformationalUrl(additional_data={}, logo_url=None, marketing_url=None, odata_type=None, privacy_statement_url=None, support_url=None, terms_of_service_url=None), key_credentials=[], login_url=None, logout_url=None, member_of=None, notes=None, notification_email_addresses=[], oauth2_permission_grants=None, oauth2_permission_scopes=[PermissionScope(additional_data={}, admin_consent_description="Allows Microsoft Graph to call into the service to perform operations on application's behalf", admin_consent_display_name='Access APIs exposed by Teams Graph worload', id=UUID('ed20b8a8-12e9-45f5-b3e5-69f25572d7be'), is_enabled=True, odata_type=None, origin=None, type='Admin', user_consent_description="Allows Microsoft Graph to call into the service to perform operations on application's behalf", user_consent_display_name='Access APIs exposed by Teams Graph worload', value='Graph.ReadWrite.All'), PermissionScope(additional_data={}, admin_consent_description='Allows reading resource specific permissions for an application', admin_consent_display_name='Allow reading resource specific permissions', id=UUID('df563937-6d21-4fa5-8284-f8cd6ff567fe'), is_enabled=True, odata_type=None, origin=None, type='Admin', user_consent_description='Allows the user to read resource specific permissions for an application', user_consent_display_name='Allow reading resource specific permissions', value='ResourceSpecificPermission.Read'), PermissionScope(additional_data={}, admin_consent_description='Allows reading and writing resource specific permissions for an application', admin_consent_display_name='Allow reading and writing resource specific permissions', id=UUID('0cf5e046-95b4-47da-83d3-b9ca4fb97744'), is_enabled=True, odata_type=None, origin=None, type='Admin', user_consent_description='Allows the user to read and write resource specific permissions for an application', user_consent_display_name='Allow reading and writing resource specific permissions', value='ResourceSpecificPermission.ReadWrite'), PermissionScope(additional_data={}, admin_consent_description='Submit an app for running Teams App validation routines', admin_consent_display_name='Submit Teams app for validation', id=UUID('59146b7c-ba55-445c-ad99-b0ae77e28992'), is_enabled=True, odata_type=None, origin=None, type='Admin', user_consent_description='Submit an app for running Teams App validation routines', user_consent_display_name='Submit Teams app for validation', value='TeamsAppValidation.Submit'), PermissionScope(additional_data={}, admin_consent_description='Runs Teams app validation for submitted app', admin_consent_display_name='Run Teams app validation', id=UUID('c433c028-68c7-4c20-9f86-f974e820dcec'), is_enabled=True, odata_type=None, origin=None, type='Admin', user_consent_description='Runs Teams app validation for submitted app', user_consent_display_name='Run Teams app validation', value='TeamsAppValidation.Execute'), PermissionScope(additional_data={}, admin_consent_description='Allow reading and writing Teams App API secret registrations', admin_consent_display_name='Allow reading and writing Teams App API secret registrations', id=UUID('7d00ce87-dff2-46f7-8cec-977df77a9e33'), is_enabled=True, odata_type=None, origin=None, type='Admin', user_consent_description='Allows the user to read and write Teams App API secret registrations', user_consent_display_name='Allow reading and writing Teams App API secret registrations', value='ApiSecretRegistration.ReadWrite')], owned_objects=None, owners=None, password_credentials=[], preferred_single_sign_on_mode=None, preferred_token_signing_key_thumbprint=None, remote_desktop_security_configuration=None, reply_urls=[], resource_specific_application_permissions=[], saml_single_sign_on_settings=None, service_principal_names=['ab3be6b7-f5df-413d-ac2d-abf1e3fd9c0b', 'https://teamsgraph.gov.teams.microsoft.us', 'https://teamsgraph.dod.teams.microsoft.us', 'https://teamsgraph.teams.microsoft.com', 'https://teamsgraph.teams.microsoft.com/', 'https://teamsgraph.dod.teams.microsoft.us/', 'https://teamsgraph.gov.teams.microsoft.us/', 'https://teamsgraph.gcc.teams.microsoft.com', 'https://tabs.teams.microsoft.com'], service_principal_type='Application', sign_in_audience='AzureADMultipleOrgs', synchronization=None, tags=[], token_encryption_key_id=None, token_issuance_policies=None, token_lifetime_policies=None, transitive_member_of=None, verified_publisher=VerifiedPublisher(additional_data={}, added_date_time=None, display_name=None, odata_type=None, verified_publisher_id=None))

Also, have you considered moving to 1.4.0, the latest version?