{"action":"created","comment":{"url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/pulls/comments/72015201","id":72015201,"diff_hunk":"@@ -0,0 +1,131 @@\n+from .base import ProducerCarriageImpl, ConsumerCarriageImpl\n+from ebu_tt_live.documents import EBUTT3Document\n+from ebu_tt_live.bindings import CreateFromDocument\n+from ebu_tt_live.strings import ERR_DECODING_XML_FAILED\n+from ebu_tt_live.errors import XMLParsingFailed, EndOfData\n+import logging\n+import os\n+import datetime\n+\n+MANIFEST_TIME_CLOCK_FORMAT = '%H:%M:%S.%f'\n+\n+log = logging.getLogger(__name__)\n+\n+\n+class FilesystemProducerImpl(ProducerCarriageImpl):\n+    \"\"\"\n+    This class implements a carriage mechanism to output produced documents\n+    to the file system. Its constructor takes a mandatory argument : the path to\n+    the desired output folder. If the folder does not exist it will be created.\n+    Each document handled by this carriage implementation is written in an xml file\n+    in the output folder.\n+    Along with the xml files, a manifest.txt file is also written in the output folder.\n+    Each time an xml file is written, a line using the following format is added to the manifest :\n+\n+    `availability_time,path_to_xml_file`\n+\n+    The manifest file gives the availability time for each document along with the path to the\n+    corresponding document.\n+    The timeline used for the availability times is the same as the one used in the documents,\n+    indeed the carriage implementation uses the same clock (or time reference) as the node that\n+    produces the documents.\n+    The writing order and thus the reading order is from top to bottom. Please note that depending on the\n+    timebase used by the producer node time may loop (going to the next day). It can loop with\n+    `ttp:timeBase=\"clock\"` or `ttp:timeBase=\"smpte\"`, but not with `ttp:timeBase=\"media\"`.\n+    \"\"\"\n+\n+    _manifest_path = None\n+    _dirpath = None\n+    _manifest_file = None\n+    _manifest_content = None\n+    _manifest_time_format = None\n+\n+    def __init__(self, dirpath):\n+        self._dirpath = dirpath\n+        if not os.path.exists(self._dirpath):\n+            os.makedirs(self._dirpath)\n+        self._manifest_path = os.path.join(dirpath, 'manifest.txt')\n+        self._manifest_content = ''\n+\n+    def resume_producing(self):\n+        while True:\n+            try:\n+                self._node.process_document(document=None)\n+            except EndOfData:\n+                break\n+        self.write_manifest()\n+\n+    def emit_document(self, document):\n+        # Handle there the switch and checks to handle the string format to use\n+        # for times in the manifest file depending on your time base.\n+        if not self._manifest_time_format:\n+            self._manifest_time_format = MANIFEST_TIME_CLOCK_FORMAT\n+        filename = '{}_{}.xml'.format(document.sequence_identifier, document.sequence_number)\n+        filepath = os.path.join(self._dirpath, filename)\n+        with open(filepath, 'w') as f:\n+            f.write(document.get_xml())\n+        # To be able to format the output we need a datetime.time object and\n+        # not a datetime.timedelta. The next line serves as a converter (adding\n+        # a time with a timedelta gives a time)\n+        time = (datetime.datetime.min + self._node.reference_clock.get_time()).time()\n+        self._manifest_content += '{},{}\\n'.format(time.strftime(self._manifest_time_format), filename)","path":"ebu_tt_live/carriage/filesystem.py","position":71,"original_position":71,"commit_id":"3add13a969d6236752993a11efed7a012bb6f0e6","original_commit_id":"3add13a969d6236752993a11efed7a012bb6f0e6","user":{"login":"gilbrechbuhler","id":8790148,"avatar_url":"https://avatars.githubusercontent.com/u/8790148?v=3","gravatar_id":"","url":"https://api.github.com/users/gilbrechbuhler","html_url":"https://github.com/gilbrechbuhler","followers_url":"https://api.github.com/users/gilbrechbuhler/followers","following_url":"https://api.github.com/users/gilbrechbuhler/following{/other_user}","gists_url":"https://api.github.com/users/gilbrechbuhler/gists{/gist_id}","starred_url":"https://api.github.com/users/gilbrechbuhler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gilbrechbuhler/subscriptions","organizations_url":"https://api.github.com/users/gilbrechbuhler/orgs","repos_url":"https://api.github.com/users/gilbrechbuhler/repos","events_url":"https://api.github.com/users/gilbrechbuhler/events{/privacy}","received_events_url":"https://api.github.com/users/gilbrechbuhler/received_events","type":"User","site_admin":false},"body":"Indeed, when I wrote this, I never thought about the possibility to read the manifest file as it is written. I will change that.","created_at":"2016-07-25T06:47:09Z","updated_at":"2016-07-25T06:47:09Z","html_url":"https://github.com/ebu/ebu-tt-live-toolkit/pull/59#discussion_r72015201","pull_request_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/pulls/59","_links":{"self":{"href":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/pulls/comments/72015201"},"html":{"href":"https://github.com/ebu/ebu-tt-live-toolkit/pull/59#discussion_r72015201"},"pull_request":{"href":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/pulls/59"}}},"pull_request":{"url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/pulls/59","id":76941587,"html_url":"https://github.com/ebu/ebu-tt-live-toolkit/pull/59","diff_url":"https://github.com/ebu/ebu-tt-live-toolkit/pull/59.diff","patch_url":"https://github.com/ebu/ebu-tt-live-toolkit/pull/59.patch","issue_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/issues/59","number":59,"state":"open","locked":false,"title":"Simple producer filesystem export","user":{"login":"gilbrechbuhler","id":8790148,"avatar_url":"https://avatars.githubusercontent.com/u/8790148?v=3","gravatar_id":"","url":"https://api.github.com/users/gilbrechbuhler","html_url":"https://github.com/gilbrechbuhler","followers_url":"https://api.github.com/users/gilbrechbuhler/followers","following_url":"https://api.github.com/users/gilbrechbuhler/following{/other_user}","gists_url":"https://api.github.com/users/gilbrechbuhler/gists{/gist_id}","starred_url":"https://api.github.com/users/gilbrechbuhler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gilbrechbuhler/subscriptions","organizations_url":"https://api.github.com/users/gilbrechbuhler/orgs","repos_url":"https://api.github.com/users/gilbrechbuhler/repos","events_url":"https://api.github.com/users/gilbrechbuhler/events{/privacy}","received_events_url":"https://api.github.com/users/gilbrechbuhler/received_events","type":"User","site_admin":false},"body":"Quite a lot of changes here. First, to test it, simply launch :\r\n```\r\nebu-simple-producer --folder-export fs_output\r\n```\r\nYou can name the folder as you want, it will be created in your current directory. It contains one xml file per document and a **manifest.txt** file that has the following format :\r\n```\r\navailability_time,filename \r\n```\r\nWe can discuss the format. Note that the manifest file is written using the producer-node's clock in order for the availability times to be coherent with the timing of the documents.\r\n\r\nI had to add a \"carriage\" package, as this is a new carriage mechanism, and it clearly did not have his place in \"twisted\" package. Also, I moved twisted's carriage implementations in the carriage package and left the rest, that is using twisted more directly, in the twisted package. We might need to discuss about code organization here. I talked with @kozmaz87 quickly, we agreed that we cannot put the whole \"twisted\" package in the \"carriage\" package as it does more (event loop, ...).\r\n\r\nNow I'm wondering how to use it efficiently for futur tests.\r\n\r\nFor issue #50 \r\n","created_at":"2016-07-11T11:57:51Z","updated_at":"2016-07-25T06:47:09Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b3599a592a7140d9e1fff7dcfd5aed51359a1430","assignee":{"login":"kozmaz87","id":4070837,"avatar_url":"https://avatars.githubusercontent.com/u/4070837?v=3","gravatar_id":"","url":"https://api.github.com/users/kozmaz87","html_url":"https://github.com/kozmaz87","followers_url":"https://api.github.com/users/kozmaz87/followers","following_url":"https://api.github.com/users/kozmaz87/following{/other_user}","gists_url":"https://api.github.com/users/kozmaz87/gists{/gist_id}","starred_url":"https://api.github.com/users/kozmaz87/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kozmaz87/subscriptions","organizations_url":"https://api.github.com/users/kozmaz87/orgs","repos_url":"https://api.github.com/users/kozmaz87/repos","events_url":"https://api.github.com/users/kozmaz87/events{/privacy}","received_events_url":"https://api.github.com/users/kozmaz87/received_events","type":"User","site_admin":false},"assignees":[{"login":"kozmaz87","id":4070837,"avatar_url":"https://avatars.githubusercontent.com/u/4070837?v=3","gravatar_id":"","url":"https://api.github.com/users/kozmaz87","html_url":"https://github.com/kozmaz87","followers_url":"https://api.github.com/users/kozmaz87/followers","following_url":"https://api.github.com/users/kozmaz87/following{/other_user}","gists_url":"https://api.github.com/users/kozmaz87/gists{/gist_id}","starred_url":"https://api.github.com/users/kozmaz87/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kozmaz87/subscriptions","organizations_url":"https://api.github.com/users/kozmaz87/orgs","repos_url":"https://api.github.com/users/kozmaz87/repos","events_url":"https://api.github.com/users/kozmaz87/events{/privacy}","received_events_url":"https://api.github.com/users/kozmaz87/received_events","type":"User","site_admin":false},{"login":"frans-ebu","id":4577613,"avatar_url":"https://avatars.githubusercontent.com/u/4577613?v=3","gravatar_id":"","url":"https://api.github.com/users/frans-ebu","html_url":"https://github.com/frans-ebu","followers_url":"https://api.github.com/users/frans-ebu/followers","following_url":"https://api.github.com/users/frans-ebu/following{/other_user}","gists_url":"https://api.github.com/users/frans-ebu/gists{/gist_id}","starred_url":"https://api.github.com/users/frans-ebu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/frans-ebu/subscriptions","organizations_url":"https://api.github.com/users/frans-ebu/orgs","repos_url":"https://api.github.com/users/frans-ebu/repos","events_url":"https://api.github.com/users/frans-ebu/events{/privacy}","received_events_url":"https://api.github.com/users/frans-ebu/received_events","type":"User","site_admin":false},{"login":"nigelmegitt","id":4988915,"avatar_url":"https://avatars.githubusercontent.com/u/4988915?v=3","gravatar_id":"","url":"https://api.github.com/users/nigelmegitt","html_url":"https://github.com/nigelmegitt","followers_url":"https://api.github.com/users/nigelmegitt/followers","following_url":"https://api.github.com/users/nigelmegitt/following{/other_user}","gists_url":"https://api.github.com/users/nigelmegitt/gists{/gist_id}","starred_url":"https://api.github.com/users/nigelmegitt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nigelmegitt/subscriptions","organizations_url":"https://api.github.com/users/nigelmegitt/orgs","repos_url":"https://api.github.com/users/nigelmegitt/repos","events_url":"https://api.github.com/users/nigelmegitt/events{/privacy}","received_events_url":"https://api.github.com/users/nigelmegitt/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/pulls/59/commits","review_comments_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/pulls/59/comments","review_comment_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/issues/59/comments","statuses_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/statuses/3add13a969d6236752993a11efed7a012bb6f0e6","head":{"label":"ebu:simple_producer_filesystem_export","ref":"simple_producer_filesystem_export","sha":"3add13a969d6236752993a11efed7a012bb6f0e6","user":{"login":"ebu","id":2692549,"avatar_url":"https://avatars.githubusercontent.com/u/2692549?v=3","gravatar_id":"","url":"https://api.github.com/users/ebu","html_url":"https://github.com/ebu","followers_url":"https://api.github.com/users/ebu/followers","following_url":"https://api.github.com/users/ebu/following{/other_user}","gists_url":"https://api.github.com/users/ebu/gists{/gist_id}","starred_url":"https://api.github.com/users/ebu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ebu/subscriptions","organizations_url":"https://api.github.com/users/ebu/orgs","repos_url":"https://api.github.com/users/ebu/repos","events_url":"https://api.github.com/users/ebu/events{/privacy}","received_events_url":"https://api.github.com/users/ebu/received_events","type":"Organization","site_admin":false},"repo":{"id":49490064,"name":"ebu-tt-live-toolkit","full_name":"ebu/ebu-tt-live-toolkit","owner":{"login":"ebu","id":2692549,"avatar_url":"https://avatars.githubusercontent.com/u/2692549?v=3","gravatar_id":"","url":"https://api.github.com/users/ebu","html_url":"https://github.com/ebu","followers_url":"https://api.github.com/users/ebu/followers","following_url":"https://api.github.com/users/ebu/following{/other_user}","gists_url":"https://api.github.com/users/ebu/gists{/gist_id}","starred_url":"https://api.github.com/users/ebu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ebu/subscriptions","organizations_url":"https://api.github.com/users/ebu/orgs","repos_url":"https://api.github.com/users/ebu/repos","events_url":"https://api.github.com/users/ebu/events{/privacy}","received_events_url":"https://api.github.com/users/ebu/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ebu/ebu-tt-live-toolkit","description":"","fork":false,"url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit","forks_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/forks","keys_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/teams","hooks_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/hooks","issue_events_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/issues/events{/number}","events_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/events","assignees_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/assignees{/user}","branches_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/branches{/branch}","tags_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/tags","blobs_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/git/refs{/sha}","trees_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/statuses/{sha}","languages_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/languages","stargazers_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/stargazers","contributors_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/contributors","subscribers_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/subscribers","subscription_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/subscription","commits_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/commits{/sha}","git_commits_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/git/commits{/sha}","comments_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/comments{/number}","issue_comment_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/issues/comments{/number}","contents_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/contents/{+path}","compare_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/merges","archive_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/downloads","issues_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/issues{/number}","pulls_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/pulls{/number}","milestones_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/milestones{/number}","notifications_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/labels{/name}","releases_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/releases{/id}","deployments_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/deployments","created_at":"2016-01-12T09:41:21Z","updated_at":"2016-07-20T09:48:15Z","pushed_at":"2016-07-22T18:08:45Z","git_url":"git://github.com/ebu/ebu-tt-live-toolkit.git","ssh_url":"git@github.com:ebu/ebu-tt-live-toolkit.git","clone_url":"https://github.com/ebu/ebu-tt-live-toolkit.git","svn_url":"https://github.com/ebu/ebu-tt-live-toolkit","homepage":null,"size":1811,"stargazers_count":5,"watchers_count":5,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":4,"mirror_url":null,"open_issues_count":41,"forks":4,"open_issues":41,"watchers":5,"default_branch":"master"}},"base":{"label":"ebu:master","ref":"master","sha":"d0756d69cfd7957e44820b638f24952baeabddb7","user":{"login":"ebu","id":2692549,"avatar_url":"https://avatars.githubusercontent.com/u/2692549?v=3","gravatar_id":"","url":"https://api.github.com/users/ebu","html_url":"https://github.com/ebu","followers_url":"https://api.github.com/users/ebu/followers","following_url":"https://api.github.com/users/ebu/following{/other_user}","gists_url":"https://api.github.com/users/ebu/gists{/gist_id}","starred_url":"https://api.github.com/users/ebu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ebu/subscriptions","organizations_url":"https://api.github.com/users/ebu/orgs","repos_url":"https://api.github.com/users/ebu/repos","events_url":"https://api.github.com/users/ebu/events{/privacy}","received_events_url":"https://api.github.com/users/ebu/received_events","type":"Organization","site_admin":false},"repo":{"id":49490064,"name":"ebu-tt-live-toolkit","full_name":"ebu/ebu-tt-live-toolkit","owner":{"login":"ebu","id":2692549,"avatar_url":"https://avatars.githubusercontent.com/u/2692549?v=3","gravatar_id":"","url":"https://api.github.com/users/ebu","html_url":"https://github.com/ebu","followers_url":"https://api.github.com/users/ebu/followers","following_url":"https://api.github.com/users/ebu/following{/other_user}","gists_url":"https://api.github.com/users/ebu/gists{/gist_id}","starred_url":"https://api.github.com/users/ebu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ebu/subscriptions","organizations_url":"https://api.github.com/users/ebu/orgs","repos_url":"https://api.github.com/users/ebu/repos","events_url":"https://api.github.com/users/ebu/events{/privacy}","received_events_url":"https://api.github.com/users/ebu/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ebu/ebu-tt-live-toolkit","description":"","fork":false,"url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit","forks_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/forks","keys_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/teams","hooks_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/hooks","issue_events_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/issues/events{/number}","events_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/events","assignees_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/assignees{/user}","branches_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/branches{/branch}","tags_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/tags","blobs_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/git/refs{/sha}","trees_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/statuses/{sha}","languages_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/languages","stargazers_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/stargazers","contributors_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/contributors","subscribers_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/subscribers","subscription_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/subscription","commits_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/commits{/sha}","git_commits_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/git/commits{/sha}","comments_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/comments{/number}","issue_comment_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/issues/comments{/number}","contents_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/contents/{+path}","compare_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/merges","archive_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/downloads","issues_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/issues{/number}","pulls_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/pulls{/number}","milestones_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/milestones{/number}","notifications_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/labels{/name}","releases_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/releases{/id}","deployments_url":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/deployments","created_at":"2016-01-12T09:41:21Z","updated_at":"2016-07-20T09:48:15Z","pushed_at":"2016-07-22T18:08:45Z","git_url":"git://github.com/ebu/ebu-tt-live-toolkit.git","ssh_url":"git@github.com:ebu/ebu-tt-live-toolkit.git","clone_url":"https://github.com/ebu/ebu-tt-live-toolkit.git","svn_url":"https://github.com/ebu/ebu-tt-live-toolkit","homepage":null,"size":1811,"stargazers_count":5,"watchers_count":5,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":4,"mirror_url":null,"open_issues_count":41,"forks":4,"open_issues":41,"watchers":5,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/pulls/59"},"html":{"href":"https://github.com/ebu/ebu-tt-live-toolkit/pull/59"},"issue":{"href":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/issues/59"},"comments":{"href":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/issues/59/comments"},"review_comments":{"href":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/pulls/59/comments"},"review_comment":{"href":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/pulls/59/commits"},"statuses":{"href":"https://api.github.com/repos/ebu/ebu-tt-live-toolkit/statuses/3add13a969d6236752993a11efed7a012bb6f0e6"}}}}
{"actor":{"display_login":"gilbrechbuhler"}}