shareplum
shareplum copied to clipboard
modify date = creation date when downloading a List
Hallo, I created a method which downloads the content of a Sharepoint list according to its structure, even though there are no data stored inside. My strategy (in download_with_schema) is :
- download the schema of the list
- remove all the system columns that I don't need
- create a dataframe with the resulting schema
- fill the dataframe with the list content
- return the dataframe
My problem is the "modify date" ("Data/ora modifica" in the italian version) contains the same values of "creation date" ("Data/ora creazione"). This is because Shareplum is not able to convert "Data/ora modifica" to the correct internal name of the column.
Here is my code:
class SPS_site: def init(self, url: str, usname: str, psw: str):
try:
cred = HttpNtlmAuth(usname, psw)
# 1-set the obj mainSite
self.mainSite = Site(url, auth=cred)
except Exception as e:
raise SPSError('Could not authenticate to SPS site. ' + str(e))
class SPS_list:
def __init__(self, S_Site: SPS_site, SPS_listname: str, user_field_null: str = "Tutti"):
try:
# 4-set the 'schema_sys_tot' property
self._def_Schema_sys_tot = ['ID tipo di contenuto', 'ID',
'Tipo di contenuto', 'Data/ora modifica', 'Data/ora creazione', 'Autore',
'Autore ultima modifica', 'owshiddenversion',
'Versione flusso di lavoro', 'Versione interfaccia utente', 'Versione',
'Allegati',
'Stato approvazione', 'Seleziona', 'Ordine', 'GUID',
'Percorso URL', 'Percorso', 'Tipo di elemento',
'Tipo ordinamento', 'Maschera autorizzazioni valide', 'Nome', 'ID univoco',
'ProgId', 'ScopeId', 'Inizio tabella menu Modifica',
'Fine tabella menu Modifica', 'URL relativo server', 'URL assoluto codificato',
'Nome file', 'Contenitore delle proprietà', 'Livello', 'Versione corrente',
'Conteggio figli elemento', 'Numero figli cartella',
'Autore app', 'Copia origine', 'Commenti responsabile approvazione',
'Tipo di file HTML', 'Tipo', 'Tipo file', 'Modifica', 'ID client',
'Autore modifica app', 'Con destinazioni di copia', 'ID istanza',
'ID istanza flusso di lavoro']
# 5-set the 'schema_sys' property [ID+]
self._def_Schema_sys = ['ID tipo di contenuto',
'Tipo di contenuto', 'owshiddenversion',
'Versione flusso di lavoro', 'Versione interfaccia utente', 'Versione', 'Allegati',
'Stato approvazione', 'Seleziona', 'Ordine', 'GUID',
'Percorso URL', 'Percorso', 'Tipo di elemento',
'Tipo ordinamento', 'Maschera autorizzazioni valide', 'Nome', 'ID univoco',
'ProgId', 'ScopeId', 'Inizio tabella menu Modifica',
'Fine tabella menu Modifica', 'URL relativo server', 'URL assoluto codificato',
'Nome file', 'Contenitore delle proprietà', 'Livello', 'Versione corrente',
'Conteggio figli elemento', 'Numero figli cartella', 'Modifica',
'Autore app', 'Copia origine', 'Commenti responsabile approvazione',
'Tipo di file HTML', 'Tipo', 'Tipo file', 'ID client',
'Autore modifica app', 'Con destinazioni di copia', 'ID istanza',
'ID istanza flusso di lavoro']
# use the method shareplum.Site.GetViewCollection to retrieve the view names
dfi = self.list.GetViewCollection()
dfii = pd.DataFrame(dfi)
for col in dfii.columns:
if dfii.at['DefaultView', col] == 'TRUE':
self._default_view = col
# 5-download the schema
df_schema_compl = pd.DataFrame(self.list.fields)
self.df_schema = df_schema_compl[['DisplayName']]
except Exception as e:
raise SPSError('could not connect to the SPS list', e.args)
@property
def schema_sys_tot(self) -> list:
return self._def_Schema_sys_tot
@property
def schema_sys(self) -> list:
return self._def_Schema_sys
def download_with_schema(self, sysID: str = "ID+", id_schema: list = []) -> pd.DataFrame:
try:
if id_schema == []:
# get al the SPS_List fileds
schema_list_tot = []
for f in self.list.fields:
for key in f.keys():
if key == "DisplayName":
schema_list_tot.append(f[key])
# delete duplicates
convert_list_to_set = set(schema_list_tot)
schema_list_tot = list(convert_list_to_set)
if sysID == "ID+":
schema_sys = self.schema_sys
# delete all the system fileds that I don't use but the 5 system
# columns: "ID" , "Autore", "Autore ultima modifica", "Data/ora modifica" , "Data/ora creazione"
id_schema = schema_list_tot
for item in schema_sys:
id_schema.remove(item)
# create an empty Dataframe with the desired structure
df_out = pd.DataFrame(columns=id_schema, dtype=np.object)
# extract the data from SPSlist and create a Dataframe
# NB: columns without data won't be created
list_data = self.list.GetListItems(fields=id_schema)
df_data = pd.DataFrame(list_data)
# append data from SPSList to the empty Dataframe
# NB: now columns without data will be returned
df_out = df_out.append(df_data, ignore_index=True)
except Exception as e:
raise SPSError('could not dowload data from SPS list. Key Error: ' + str(e))
return df_out