Python 3 arcgis.gis.user для доступа lastLogin к ArcGIS Portal - PullRequest
1 голос
/ 22 апреля 2020

Это выполняется на Windows 10 64-битной машине с использованием Python 3, jupyter labs version 1.6.1.

Я работаю над небольшим сценарием, используя Jupyter Notebook для доступа к моему локальному порталу сайт. С фрагментом кода ниже вы можете видеть, что я собираюсь получить группы портала и пользователей в каждой группе.

Информация, над которой я работаю, - это когда каждый пользователь был создан (не так важен) и последний доступ к нему. Кажется, это работает просто отлично, сценарий выводит пользователей и даты, для которых были созданы их учетные записи, но то же самое для последней доступной даты выдает ошибку.

Я просмотрел модуль arcgis.gis , чтобы узнать о параметрах класса arcgis.gis.users, и LastLogin существует. Еще одно замечание, которое я должен включить, заключается в том, что когда я использую отдельного пользователя, такого как я, если бы я был вошедшим в систему пользователем, функция последнего доступа работает. Просто кажется, что когда я передаю зацикленные пользователи, используя переменную "user2", сценарию это не нравится.

Я также проверил .get () для приемлемых параметров, которые "username" и это кажется нормальным.

import time
from arcgis.gis import GIS
portal = r"*" #this would be the portal or arcgis online url
username = "*" #using admin credentials here
password = "*"
gis = GIS(portal, username, password)
groups = gis.groups.search()

for group in groups:
    print(group)
    accounts = gis.users.search()
    for account in accounts:
        #user = gis.users.account
        #user = gis.users.search(query="username = {}".format(account.username))
        #print(account.email)
        user2 = gis.users.get(username="{}".format(account.username))
        print(account.username)
        created_time = time.localtime(user2.created/1000)
        print("Created: {}/{}/{}".format(created_time[0], created_time[1], created_time[2]))
        last_accessed = time.localtime(user2.lastLogin/1000)
        print("Last active: {}/{}/{}".format(last_accessed[0], last_accessed[1], last_accessed[2]))

Ошибка - это то, что я получил при попытке передать «user2» в строке 23 для переменной last_accessed.

 OSError                                   Traceback (most recent call last)
    <ipython-input-3-3a539a5c371d> in <module>
         21         created_time = time.localtime(user2.created/1000)
         22         print("Created: {}/{}/{}".format(created_time[0], created_time[1], created_time[2]))
    ---> 23         last_accessed = time.localtime(user2.lastLogin/1000)
         24         print("Last active: {}/{}/{}".format(last_accessed[0], last_accessed[1], 
    last_accessed[2]))
         25 

OSError: [Errno 22] Invalid argument

1 Ответ

0 голосов
/ 27 апреля 2020

После дальнейшего исследования кажется, что фрагмент .lastLogin работает. Проблема была в среде портала ArcGIS, где был пользователь, который еще не выполнил вход с использованием своих учетных данных (обычно с использованием прав администратора). Значение, переданное в код, передавало -1, и преобразование этого значения не учитывалось в базовой библиотеке, поэтому мы добавили оператор if, чтобы убедиться, что значение должно быть> 0, если это не так мы регистрируем, что пользователь еще не вошел в систему.

Вот обновленный код для скрипта.

accounts = gis.users.search ()

для учетной записи в account: user = gis.users.get ("{}". format (account.username))

if account.username.startswith("esri"): # Disregard any generic named accounts such as those that do not seem user specific like esri_boundaries, etc... 
    pass
elif account.username.startswith("system_"): # Disregard any system related IDs such as "system_publisher" otherwise the parameter is not valid to pass for the last login.
    pass
else:
    print("Full Name: {}".format(user.fullName))
    print("Username: {}".format(user.username))
    created = time.localtime(user.created/1000)
    print("User created: {}/{}/{}".format(created[0], created[1], created[2]))
    if user.lastLogin > 0:
        last_accessed = time.localtime(user.lastLogin/1000)
        print("Last active: {}/{}/{}".format(last_accessed[0], last_accessed[1], last_accessed[2]))
    else:
        print("***{} Has not yet logged in".format(account.username))
    print()

print ("Процесс завершен")

...