Ejemplo n.º 1
0
    def get_activity_record(self, commit: str) -> ActivityRecord:
        """Method to get a single ActivityRecord

        Args:
            commit(str): The commit hash of the activity record

        Returns:
            ActivityRecord
        """
        entry = self.repository.git.log_entry(commit)
        m = self.note_regex.match(entry["message"])
        if m:
            ar = ActivityRecord.from_log_str(m.group(0),
                                             commit,
                                             entry['committed_on'],
                                             username=entry['author']['name'],
                                             email=entry['author']['email'])
            return ar
        else:
            raise ValueError(
                "Activity data not found in commit {}".format(commit))
Ejemplo n.º 2
0
    def test_from_log_str(self):
        """Test the creating from a log string"""

        test_str = """_GTM_ACTIVITY_START_**
msg:added some code**
metadata:{"show":true,"importance":50,"type":2,"linked_commit":"aaaaaaaa","tags":["test"]}**
details:**
4,1,255,my_fake_detail_key,0**
2,0,0,my_fake_detail_key2,3**
_GTM_ACTIVITY_END_"""

        ar = ActivityRecord.from_log_str(test_str, "bbbbbb",
                                         datetime.datetime.utcnow())

        assert type(ar) == ActivityRecord
        assert ar.type == ActivityType.CODE
        assert ar.show is True
        assert ar.importance == 50
        assert ar.linked_commit == "aaaaaaaa"
        assert ar.commit == "bbbbbb"
        assert ar.tags == ['test']

        assert len(ar._detail_objects) == 2
        assert type(ar._detail_objects[0][3]) == ActivityDetailRecord
        assert ar._detail_objects[0][3].type == ActivityDetailType.CODE
        assert ar._detail_objects[0][3].action == ActivityAction.NOACTION
        assert ar._detail_objects[0][3].key == "my_fake_detail_key"
        assert ar._detail_objects[0][3].show is True
        assert ar._detail_objects[0][3].importance == 255
        assert ar._detail_objects[0][3].tags == []
        assert ar._detail_objects[0][3].is_loaded is False

        assert type(ar._detail_objects[1][3]) == ActivityDetailRecord
        assert ar._detail_objects[1][3].type == ActivityDetailType.RESULT
        assert ar._detail_objects[1][3].action == ActivityAction.DELETE
        assert ar._detail_objects[1][3].key == "my_fake_detail_key2"
        assert ar._detail_objects[1][3].show is False
        assert ar._detail_objects[1][3].importance == 0
        assert ar._detail_objects[1][3].tags == []
        assert ar._detail_objects[1][3].is_loaded is False
Ejemplo n.º 3
0
    def get_activity_records(
            self,
            after: Optional[str] = None,
            first: Optional[int] = None) -> List[Optional[ActivityRecord]]:
        """Method to get a list of activity records, with forward paging supported

        Args:
            after(str): Commit hash to page after
            first(int): Number of records to get

        Returns:
            List[ActivityRecord]
        """
        # Get data from the git log
        log_data = self._get_log_records(after=after, first=first)
        if log_data:
            if after:
                # If the "after" record is included. Remove it due to standards on how relay paging works
                log_data = log_data[1:]

            # If first value provided, check for the right amount of data
            if first:
                if len(log_data) > first:
                    # Need to prune due to padding sent into self._get_log_records()
                    log_data = log_data[:first]

        if log_data:
            return [
                ActivityRecord.from_log_str(x[0],
                                            x[1],
                                            x[2],
                                            username=x[3],
                                            email=x[4]) for x in log_data
            ]
        else:
            return []