Ich muss diese Fehler innerhalb der DLT-Pipeline verwalten
Code: Select all
import gitlab
gl = gitlab.Gitlab(url="https://gitlab.xxx.xxx.com/",private_token=token)
import dlt
from dlt.destinations import postgres
@dlt.source
def gitlab_source():
@dlt.resource(table_name="repositories",
primary_key=("id"))
def get_repositories():
projects = gl.projects.list(get_all=True)
for project in projects :
yield project
@dlt.resource(table_name="members")
@dlt.transformer(data_from=get_repositories)
def get_members(repo_item):
try :
members = repo_item.members_all.list(iterator=True)
except Exception as e:
print("Members",e)
members = []
for member in members :
yield {'project_id' : repo_item.id,
'id' : member.id,
'name' : member.name,
'username' : member.username,
'acces_level' :member.access_level
}
@dlt.resource(table_name="runners")
@dlt.transformer(data_from=get_repositories)
def get_runners(repo_item):
try :
runners = repo_item.runners.list(iterator=True)
except Exception as e:
print(repo_item.name,e)
runners = []
for runner in runners :
print(repo_item.name, "Coucou !!")
data = runner.attributes
data['project_id'] = repo_item.id
yield data
return [get_repositories,
get_members,
get_runners]
def run_pipeline() :
print('Pipeline lancée')
pipeline = dlt.pipeline(
pipeline_name="gitlab_pipeline",
destination=postgres(credentials="postgres://postgres:password@localhost:5432/postgres"),
dataset_name="gitlab"
)
load_info = pipeline.run(gitlab_source())
print(load_info)
run_pipeline()
Ich möchte Commits, Branches, merge_requets und vieles mehr hinzufügen, und die Codestruktur ist immer dieselbe: Wählen Sie eine Methode (repo.members_all, repo.runners, repo.mergerequests...), einige Attribute zum Auffüllen meiner Postgres-Datenbank (ID, Name, Benutzername oder andere) und fügen Sie dann einige Try/Exceptions hinzu, um Fehler zu verhindern und meine Datenbank mit Nullwerten zu füllen.
Ich frage mich, ob es eine cleverere Methode dafür gibt.
Ich habe versucht, eine Dekoratorfunktion für Try/Exceptions zu erstellen, bin mir aber nicht sicher, ob das mit dlt der richtige Weg ist.
Verfügt DLT über integrierte Funktionen, die mir für die Behandlung von API-Aufruffehlern nicht bekannt sind? ?
Vielen Dank
Mobile version