Skip to content

Commit

Permalink
enabeld to tap merge requests
Browse files Browse the repository at this point in the history
  • Loading branch information
tomoo-morikawa committed Jan 10, 2023
1 parent 06ce1ec commit d46f0b3
Show file tree
Hide file tree
Showing 2 changed files with 174 additions and 1 deletion.
27 changes: 26 additions & 1 deletion tap_gitlab/__init__.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@ def load_schema(entity):
'schema': load_schema('groups'), 'schema': load_schema('groups'),
'key_properties': ['id'], 'key_properties': ['id'],
}, },
'merge_requests': {
'url': '/projects/{}/merge_requests',
'schema': load_schema('merge_requests'),
'key_properties': ['id'],
},
} }




Expand Down Expand Up @@ -130,7 +135,7 @@ def gen_request(url):


def format_timestamp(data, typ, schema): def format_timestamp(data, typ, schema):
result = data result = data
if typ == 'string' and schema.get('format') == 'date-time': if typ == 'string' and schema.get('format') == 'date-time' and data is not None:
rfc3339_ts = rfc3339_to_timestamp(data) rfc3339_ts = rfc3339_to_timestamp(data)
utc_dt = datetime.datetime.utcfromtimestamp(rfc3339_ts).replace(tzinfo=pytz.UTC) utc_dt = datetime.datetime.utcfromtimestamp(rfc3339_ts).replace(tzinfo=pytz.UTC)
result = utils.strftime(utc_dt) result = utils.strftime(utc_dt)
Expand Down Expand Up @@ -219,6 +224,25 @@ def sync_group(gid, pids):
singer.write_record("groups", group, time_extracted=time_extracted) singer.write_record("groups", group, time_extracted=time_extracted)




def sync_merge_request(project):
url = get_url('merge_requests', project['id'])
with Transformer(pre_hook=format_timestamp) as transformer:
for row in gen_request(url):
flatten_id(row, 'merged_by')
flatten_id(row, 'closed_by')
flatten_id(row, 'merge_user')
flatten_id(row, 'assignee')
flatten_id(row, 'author')
transformed_row = transformer.transform(
row, RESOURCES['merge_requests']['schema']
)

if row['updated_at'] >= get_start('project_{}'.format(project['id'])):
singer.write_record(
'merge_requests', transformed_row, time_extracted=utils.now()
)


def sync_project(pid): def sync_project(pid):
url = get_url("projects", pid) url = get_url("projects", pid)
data = request(url).json() data = request(url).json()
Expand Down Expand Up @@ -246,6 +270,7 @@ def sync_project(pid):
sync_issues(project) sync_issues(project)
sync_milestones(project) sync_milestones(project)
sync_users(project) sync_users(project)
sync_merge_request(project)


singer.write_record("projects", project, time_extracted=time_extracted) singer.write_record("projects", project, time_extracted=time_extracted)
utils.update_state(STATE, state_key, last_activity_at) utils.update_state(STATE, state_key, last_activity_at)
Expand Down
148 changes: 148 additions & 0 deletions tap_gitlab/schemas/merge_requests.json
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,148 @@
{
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"iid": {
"type": "integer"
},
"project_id": {
"type": "integer"
},
"title": {
"type": "string"
},
"name": {
"type": [
"null",
"string"
]
},
"description": {
"type": "string"
},
"state": {
"type": "string"
},
"created_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"updated_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"merged_by_id": {
"type": [
"null",
"integer"
]
},
"merge_user_id": {
"type": [
"null",
"integer"
]
},
"merged_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"closed_by_id": {
"type": [
"null",
"integer"
]
},
"closed_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
]
},
"author_id": {
"type": [
"null",
"integer"
]
},
"assignee_id": {
"type": [
"null",
"integer"
]
},
"target_branch": {
"type": "string"
},
"source_branch": {
"type": "string"
},
"user_notes_count": {
"type": [
"null",
"integer"
]
},
"upvotes": {
"type": [
"null",
"integer"
]
},
"downvotes": {
"type": [
"null",
"integer"
]
},
"merge_status": {
"type": "string"
},
"has_conflicts": {
"type": [
"null",
"boolean"
]
},
"squash": {
"type": [
"null",
"boolean"
]
},
"merge_when_pipeline_succeeds": {
"type": [
"null",
"boolean"
]
}
}
}

0 comments on commit d46f0b3

Please sign in to comment.