shareplum icon indicating copy to clipboard operation
shareplum copied to clipboard

modify date = creation date when downloading a List

Open angelof70 opened this issue 3 years ago • 0 comments

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

angelof70 avatar Mar 10 '22 17:03 angelof70