Created
April 2, 2020 20:45
-
-
Save greghaynes/307719de2c32c9f6d09952222f2a47b9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from collections import namedtuple | |
import dataclasses | |
# BEWARE this is not 3.7+ compatible. For python 3.7+ we need to use the built | |
# in dataclass module | |
@dataclasses.dataclass | |
class IssueData: | |
id: str | |
container_id: str | |
root_cause_id: str | |
title: str | |
description: str | |
issue_type_id: str | |
issue_subtype_id: str | |
staus: str | |
assigned_to: str | |
assigned_to_type: str | |
due_date: str | |
location_id: str | |
location_details: str | |
snapshot_urn: str | |
linked_documents: list | |
links: list | |
official_response: dict | |
permitted_attributes: list | |
permitted_actions: list | |
comment_count: int | |
attachment_count: int | |
opened_by: str | |
opened_at: str | |
closed_at: str | |
created_by: str | |
created_at: str | |
updated_by: str | |
updated_at: str | |
issue_template_id: str | |
pemitted_statuses: list | |
class IdenticalField: | |
def __init__(self, data_field, cis_pg_field): | |
self.data_field = data_field | |
self.cis_field = cis_pg_field | |
self.pg_field = cis_pg_field | |
def pg_data(self, issue_data: IssueData): | |
return issue_data[self.pg_field] | |
class RenamedField: | |
def __init__(self, data_field, pg_field, cis_field): | |
self.data_field = data_field | |
self.pg_field = pg_field | |
self.cis_field = cis_field | |
def pg_data(self, issue_data: IssueData): | |
return issue_data[self.data_field] | |
class AssignedToMapper: | |
def __init__(self, data_field): | |
self.data_field = data_field | |
self.pg_field = 'assigned_to' | |
def pg_data(self, issue_data: IssueData): | |
return { | |
'uid': issue_data['assigned_to'], | |
'type': issue_data['assigned_to_type'] | |
} | |
class Issue: | |
_fields = ( | |
RenamedField('id', 'uid', 'id'), | |
RenamedField('root_cause_id', 'root_cause_uid', 'root_cause_id'), | |
IdenticalField('title', 'title'), | |
IdenticalField('description', 'description'), | |
IdenticalField('status', 'status'), | |
AssignedToMapper('assigned_to') | |
) | |
def __init__(self, data: IssueData): | |
self.data = data | |
def to_cis_dict(self) -> dict: | |
return { | |
field.cis_field: self.data[field.data_field] | |
for field in Issue._fields | |
} | |
def to_pg_dict(self) -> dict: | |
return { | |
field.pg_field: field.pg_data(self.data) | |
for field in Issue._fields | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment