{"action":"created","comment":{"url":"https://api.github.com/repos/pymedusa/SickRage/pulls/comments/70187738","id":70187738,"diff_hunk":"@@ -0,0 +1,1951 @@\n+#!/usr/bin/env python\n+# -*- coding: utf-8 -*-\n+\"\"\"Rules: This section contains rules that enhances guessit behavior.\n+\n+Coding guidelines:\n+For each rule:\n+  - Provide an explanation\n+  - An example of the guessit output without it\n+  - An example of the guessit output with it\n+  - Each rule should handle only one issue\n+  - Remember that the input might be a filepath: /Show Name/Season 1/Show Name S01E02.ext\n+  - Use rule.priority = POST_PROCESSOR (DO NOT change this*)\n+  - DO NOT use rule.dependency**\n+  - DO NOT change match.value. Just remove the match and append a new one with the amended value***\n+  - Try to avoid using `private`, `parent` and `children` matches.\n+    Their behaviour might change a lot in each new version\n+\n+Rebulk API is really powerful. It's always good to spend some time reading about it: https://github.com/Toilal/rebulk\n+\n+The main idea about the rules in this section is to navigate between the `matches` and `holes` and change the matches\n+according to our needs.\n+\n+* Our rules should run only after all standard and default guessit rules have finished (not before that!).\n+** Adding several dependencies to our rules will make an implicit execution order. It could be hard to debug. Better to\n+have a fixed execution order, that's why the rules() method should add the rules in the correct order (explicit).\n+*** Rebulk API relies on the match.value, if you change them you'll get exceptions.\n+\"\"\"\n+import copy\n+import re\n+\n+from guessit.rules.common import seps\n+from guessit.rules.common.comparators import marker_sorted\n+from guessit.rules.common.formatters import cleanup\n+from guessit.rules.common.validators import int_coercable\n+from guessit.rules.properties.release_group import clean_groupname\n+from rebulk.processors import POST_PROCESS\n+from rebulk.rebulk import Rebulk\n+from rebulk.rules import Rule, AppendMatch, RemoveMatch, RenameMatch\n+\n+\n+simple_separator = ('.', 'and', ',.', '.,', '.,.', ',')\n+range_separator = ('-', '~', '_-_', 'to', '.to.')\n+season_range_separator = range_separator + ('_-_s', '-s', '.to.s', '_to_s')\n+episode_range_separator = range_separator + ('_-_e', '-e', '.to.e', '_to_e')\n+\n+\n+class FixAnimeReleaseGroup(Rule):\n+    \"\"\"Choose the correct Anime release group.\n+\n+    Anime release group is at the beginning and inside square brackets. If this pattern is found at the start of the\n+    filepart, use it as a release group.\n+\n+    guessit -t episode \"[RealGroup].Show.Name.-.462.[720p].[10bit].[SOMEPERSON].[Something]\"\n+\n+    without this fix:\n+        For: [RealGroup].Show.Name.-.462.[720p].[10bit].[SOMEPERSON].[Something]\n+        GuessIt found: {\n+            \"title\": \"Show Name\",\n+            \"season\": 4,\n+            \"episode\": 62,\n+            \"screen_size\": \"720p\",\n+            \"video_profile\": \"10bit\",\n+            \"release_group\": \"[SOMEPERSON].[Something]\",\n+            \"type\": \"episode\"\n+        }\n+\n+    with this fix:\n+        For: [RealGroup].Show.Name.-.462.[720p].[10bit].[SOMEPERSON].[Something]\n+        GuessIt found: {\n+            \"title\": \"Show Name\",\n+            \"season\": 4,\n+            \"episode\": 62,\n+            \"screen_size\": \"720p\",\n+            \"video_profile\": \"10bit\",\n+            \"release_group\": \"RealGroup\",\n+            \"type\": \"episode\"\n+        }\n+    \"\"\"\n+\n+    priority = POST_PROCESS\n+    consequence = [RemoveMatch, AppendMatch]\n+    release_group_re = re.compile(r'^\\[(?P<release_group>\\w+(\\-\\w+)?)\\]$', flags=re.IGNORECASE)\n+    blacklist = ('private', 'req')\n+\n+    def when(self, matches, context):\n+        \"\"\"Evaluate the rule.\n+\n+        :param matches:\n+        :type matches: rebulk.match.Matches\n+        :param context:\n+        :type context: dict\n+        :return:\n+        \"\"\"\n+        if context.get('show_type') == 'regular':\n+            return\n+\n+        fileparts = matches.markers.named('path')\n+        for filepart in marker_sorted(fileparts, matches):\n+            # get the group (e.g.: [abc]) at the beginning of this filepart\n+            group = matches.markers.at_index(filepart.start, index=0, predicate=lambda marker: marker.name == 'group')\n+\n+            # if there's no group or there's already a match at this position, skip it...\n+            if not group or matches.at_match(group):\n+                continue\n+\n+            m = self.release_group_re.match(group.raw)\n+            # if the group matches the anime's release group pattern and it's not blacklisted\n+            if m and m.group('release_group').lower() not in self.blacklist:\n+                new_release_group = copy.copy(group)\n+                new_release_group.marker = None\n+                new_release_group.name = 'release_group'\n+                new_release_group.value = m.group('release_group')\n+                new_release_group.tags = ['anime']\n+\n+                to_append = new_release_group\n+                to_remove = matches.named('release_group')\n+\n+                # remove the old release_group, append the new one\n+                return to_remove, to_append\n+\n+\n+class SpanishNewpctReleaseName(Rule):\n+    \"\"\"Detect newpct release names.\n+\n+    This rule is to handle the newpct release name style.\n+\n+    e.g.: Show.Name.-.Temporada.1.720p.HDTV.x264[Cap.102]SPANISH.AUDIO-NEWPCT\n+\n+    guessit -t episode \"Show.Name.-.Temporada.1.720p.HDTV.x264[Cap.102]SPANISH.AUDIO-NEWPCT\"\n+\n+    without this rule:\n+        For: Show.Name.-.Temporada.1.720p.HDTV.x264[Cap.102]SPANISH.AUDIO-NEWPCT\n+        GuessIt found: {\n+            \"title\": \"Show Name\",\n+            \"alternative_title\": \"Temporada\",\n+            \"episode\": [\n+                1,\n+                2\n+            ],\n+            \"screen_size\": \"720p\",\n+            \"format\": \"HDTV\",\n+            \"video_codec\": \"h264\",\n+            \"season\": 1,\n+            \"language\": \"Spanish\",\n+            \"episode_title\": \"AUDIO-NEWPCT\",\n+            \"type\": \"episode\"\n+        }\n+\n+\n+    with this rule:\n+        For: Show.Name.-.Temporada.1.720p.HDTV.x264[Cap.102]SPANISH.AUDIO-NEWPCT\n+        GuessIt found: {\n+            \"title\": \"Show Name\",\n+            \"season\": 1,\n+            \"episode\": 2\n+            \"screen_size\": \"720p\",\n+            \"format\": \"HDTV\",\n+            \"video_codec\": \"h264\",\n+            \"language\": \"Spanish\",\n+            \"release_group\": \"NEWPCT\"\n+            \"type\": \"episode\"\n+        }\n+\n+    \"\"\"\n+\n+    priority = POST_PROCESS\n+    consequence = [RemoveMatch, AppendMatch]\n+    season_re = re.compile(r'^tem(p|porada)?\\W*\\d*$', flags=re.IGNORECASE)\n+    prefix = '[cap.'\n+    episode_re = re.compile(r'^\\[cap\\.(?P<season>\\d{1,2})(?P<episode>\\d{2})'\n+                            r'(_((?P<end_season>\\d{1,2})(?P<end_episode>\\d{2})))?.*\\]', flags=re.IGNORECASE)\n+\n+    def when(self, matches, context):\n+        \"\"\"Evaluate the rule.\n+\n+        :param matches:\n+        :type matches: rebulk.match.Matches\n+        :param context:\n+        :type context: dict\n+        :return:\n+        \"\"\"\n+        season = matches.named('season', index=0)\n+        if not season:\n+            return\n+\n+        alternative_titles = matches.named('alternative_title', predicate=\n+                                           lambda match: self.season_re.match(match.value.lower()))\n+        episode_titles = matches.named('episode_title', predicate=\n+                                       lambda match: self.season_re.match(match.value.lower()))\n+\n+        # skip if there isn't an alternative_title or episode_title with the word season in spanish\n+        if not alternative_titles and not episode_titles:\n+            return\n+\n+        fileparts = matches.markers.named('path')\n+        for filepart in marker_sorted(fileparts, matches):\n+            # retrieve all groups\n+            groups = matches.markers.range(filepart.start, filepart.end, predicate=lambda mk: mk.name == 'group')\n+            for group in groups:\n+                # then search the season and episode numbers: [Cap.102_103]\n+                m = self.episode_re.search(group.raw)\n+                g = m.groupdict() if m else None\n+                # if found and the season numbers match...\n+                if not g or int(g['season']) != season.value or (\n+                        g['end_season'] and int(g['end_season']) != season.value):\n+                    continue\n+\n+                if not context.get('show_type'):\n+                    # fix the show_type as this is not anime\n+                    context['show_type'] = 'regular'\n+\n+                to_remove = []\n+                to_append = []\n+\n+                # remove \"[Cap.] match, if any\n+                to_remove.extend(matches.range(group.start, group.start + len(self.prefix)))\n+                # remove the wrong alternative title\n+                to_remove.extend(alternative_titles)\n+                # remove the wrong episode title\n+                to_remove.extend(episode_titles)\n+                to_remove.extend(matches.range(filepart.start, filepart.end, predicate=lambda match:\n+                                               match.name == 'episode_title' and\n+                                               match.value.lower() == 'audio'))\n+                # remove all episode matches, since we're rebuild them\n+                to_remove.extend(matches.named('episode'))\n+\n+                first_ep_num = int(g['episode'])\n+                last_ep_num = int(g['end_episode']) if g['end_episode'] else first_ep_num\n+                if 0 <= first_ep_num <= last_ep_num < 100:\n+                    start_index = group.start + len(g['season']) + len(self.prefix)\n+\n+                    # rebuild all episode matches\n+                    for ep_num in range(first_ep_num, last_ep_num + 1):\n+                        new_episode = copy.copy(season)\n+                        new_episode.name = 'episode'\n+                        new_episode.tags = ['newpct']\n+                        new_episode.value = ep_num\n+                        if ep_num == first_ep_num:\n+                            new_episode.start = start_index\n+                            new_episode.end = new_episode.start + len(g['episode'])\n+                        elif ep_num != last_ep_num:\n+                            new_episode.start = start_index + len(g['episode'])\n+                            new_episode.end = new_episode.start + 1\n+                        else:\n+                            new_episode.start = start_index + len(g['episode']) + len(g['end_season']) + 1\n+                            new_episode.end = new_episode.start + len(g['end_episode'])\n+                        to_append.append(new_episode)\n+\n+                return to_remove, to_append\n+\n+\n+class FixSeasonAndEpisodeConflicts(Rule):\n+    \"\"\"Fix season and episode conflict.\n+\n+    - Fix release group conflict with episode and or season.\n+    - Certain release names contains a conflicting screen_size (e.g.: 720 without p). It confuses guessit: the guessed\n+    season and episode needs to be removed.\n+    Bug: https://github.com/guessit-io/guessit/issues/308\n+\n+    e.g.: \"Show.Name.S02.REPACK.720p.BluRay.DD5.1.x264-4EVERHD\"\n+          \"[SuperGroup].Show.Name.-.06.[720.Hi10p][1F5578AC]\"\n+\n+    guessit -t episode -G 4EVERHD \"Show.Name.S02.REPACK.720p.BluRay.DD5.1.x264-4EVERHD\"\n+    guessit -t episode \"[SuperGroup].Show.Name.-.06.[720.Hi10p][1F5578AC]\"\n+\n+    without this fix:\n+        For: [SuperGroup].Show.Name.-.06.[720.Hi10p][1F5578AC]\n+        GuessIt found: {\n+            \"release_group\": \"SuperGroup\",\n+            \"title\": \"Show Name\",\n+            \"episode\": [\n+                6,\n+                20\n+            ],\n+            \"season\": 7,\n+            \"screen_size\": \"720p\",\n+            \"video_profile\": \"10bit\",\n+            \"crc32\": \"1F5578AC\",\n+            \"type\": \"episode\"\n+        }\n+\n+    with this fix:\n+        For: [SuperGroup].Show.Name.-.06.[720.Hi10p][1F5578AC]\n+        GuessIt found: {\n+            \"release_group\": \"SuperGroup\",\n+            \"title\": \"Show Name\",\n+            \"episode\": 6,\n+            \"screen_size\": \"720p\",\n+            \"video_profile\": \"10bit\",\n+            \"crc32\": \"1F5578AC\",\n+            \"type\": \"episode\"\n+        }\n+\n+    \"\"\"\n+\n+    priority = POST_PROCESS\n+    consequence = RemoveMatch\n+\n+    def when(self, matches, context):","path":"sickbeard/name_parser/rules/rules.py","position":299,"original_position":299,"commit_id":"d8e15ecd6610849796d0f10ab3b9902a7f4ed91a","original_commit_id":"d8e15ecd6610849796d0f10ab3b9902a7f4ed91a","user":{"login":"codacy-bot","id":19940114,"avatar_url":"https://avatars.githubusercontent.com/u/19940114?v=3","gravatar_id":"","url":"https://api.github.com/users/codacy-bot","html_url":"https://github.com/codacy-bot","followers_url":"https://api.github.com/users/codacy-bot/followers","following_url":"https://api.github.com/users/codacy-bot/following{/other_user}","gists_url":"https://api.github.com/users/codacy-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/codacy-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codacy-bot/subscriptions","organizations_url":"https://api.github.com/users/codacy-bot/orgs","repos_url":"https://api.github.com/users/codacy-bot/repos","events_url":"https://api.github.com/users/codacy-bot/events{/privacy}","received_events_url":"https://api.github.com/users/codacy-bot/received_events","type":"User","site_admin":false},"body":"![Codacy](https://www.codacy.com/assets/images/favicon.png) Issue found: [Method could be a function](https://www.codacy.com/app/labrys-git/sickrage/file/2950128890/issues/source?bid=3183969&fileBranchId=3386620#l299)","created_at":"2016-07-10T20:21:58Z","updated_at":"2016-07-10T20:21:58Z","html_url":"https://github.com/pymedusa/SickRage/pull/714#discussion_r70187738","pull_request_url":"https://api.github.com/repos/pymedusa/SickRage/pulls/714","_links":{"self":{"href":"https://api.github.com/repos/pymedusa/SickRage/pulls/comments/70187738"},"html":{"href":"https://github.com/pymedusa/SickRage/pull/714#discussion_r70187738"},"pull_request":{"href":"https://api.github.com/repos/pymedusa/SickRage/pulls/714"}}},"pull_request":{"url":"https://api.github.com/repos/pymedusa/SickRage/pulls/714","id":75238114,"html_url":"https://github.com/pymedusa/SickRage/pull/714","diff_url":"https://github.com/pymedusa/SickRage/pull/714.diff","patch_url":"https://github.com/pymedusa/SickRage/pull/714.patch","issue_url":"https://api.github.com/repos/pymedusa/SickRage/issues/714","number":714,"state":"open","locked":false,"title":"Guessit name parser implementation","user":{"login":"ratoaq2","id":9292886,"avatar_url":"https://avatars.githubusercontent.com/u/9292886?v=3","gravatar_id":"","url":"https://api.github.com/users/ratoaq2","html_url":"https://github.com/ratoaq2","followers_url":"https://api.github.com/users/ratoaq2/followers","following_url":"https://api.github.com/users/ratoaq2/following{/other_user}","gists_url":"https://api.github.com/users/ratoaq2/gists{/gist_id}","starred_url":"https://api.github.com/users/ratoaq2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ratoaq2/subscriptions","organizations_url":"https://api.github.com/users/ratoaq2/orgs","repos_url":"https://api.github.com/users/ratoaq2/repos","events_url":"https://api.github.com/users/ratoaq2/events{/privacy}","received_events_url":"https://api.github.com/users/ratoaq2/received_events","type":"User","site_admin":false},"body":"- **NameParser**: flag `use_guessit` that enables guessit name parser (default `true` on this branch). Setting it to false will keep the current parser without any change.\r\n- **GuessitNameParser**: This should be the new API and it should be really small and straightforward. Right now, it plugs in our own `rules` and it calls `guessit.guess(..)` with the correct parameters and adapt the response property names to the same ones `NameParseResult` has. I'm planning to move the `expected_titles` and `expected_groups` out of this file to a yaml file. But this list should always be short and simple. Another idea is to use the shows library to collect all shows that has numbers (since these are the problematic ones) and add them to `expected_titles`. Add all shows names is a valid option as well.\r\n- **rules/properties.py**: Additional property matches that guessit doesn't support (SATRip, BDMux, etc)\r\n- **rules/rulespy**: Manipulate `matches`. I wrote some instructions and guidelines to always have each rule simple and maintainable. Some rules are fixes/workarounds for guessit bugs. I have flagged them with each issue url, so we can remove then when guessit is fixed.\r\n- **Tests**: I have created a simple unit test that executes against an yaml file. For each regex in regexes.py and each rule in our rules.py, I added an entry in this yaml file, so they will work will regression tests. There are positive and negative test cases.\r\n","created_at":"2016-06-26T19:20:07Z","updated_at":"2016-07-10T20:21:58Z","closed_at":null,"merged_at":null,"merge_commit_sha":"67097f9194e090b2e84cba171ed775c04968b54d","assignee":{"login":"ratoaq2","id":9292886,"avatar_url":"https://avatars.githubusercontent.com/u/9292886?v=3","gravatar_id":"","url":"https://api.github.com/users/ratoaq2","html_url":"https://github.com/ratoaq2","followers_url":"https://api.github.com/users/ratoaq2/followers","following_url":"https://api.github.com/users/ratoaq2/following{/other_user}","gists_url":"https://api.github.com/users/ratoaq2/gists{/gist_id}","starred_url":"https://api.github.com/users/ratoaq2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ratoaq2/subscriptions","organizations_url":"https://api.github.com/users/ratoaq2/orgs","repos_url":"https://api.github.com/users/ratoaq2/repos","events_url":"https://api.github.com/users/ratoaq2/events{/privacy}","received_events_url":"https://api.github.com/users/ratoaq2/received_events","type":"User","site_admin":false},"assignees":[{"login":"ratoaq2","id":9292886,"avatar_url":"https://avatars.githubusercontent.com/u/9292886?v=3","gravatar_id":"","url":"https://api.github.com/users/ratoaq2","html_url":"https://github.com/ratoaq2","followers_url":"https://api.github.com/users/ratoaq2/followers","following_url":"https://api.github.com/users/ratoaq2/following{/other_user}","gists_url":"https://api.github.com/users/ratoaq2/gists{/gist_id}","starred_url":"https://api.github.com/users/ratoaq2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ratoaq2/subscriptions","organizations_url":"https://api.github.com/users/ratoaq2/orgs","repos_url":"https://api.github.com/users/ratoaq2/repos","events_url":"https://api.github.com/users/ratoaq2/events{/privacy}","received_events_url":"https://api.github.com/users/ratoaq2/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/pymedusa/SickRage/milestones/9","html_url":"https://github.com/pymedusa/SickRage/milestones/0.1.3","labels_url":"https://api.github.com/repos/pymedusa/SickRage/milestones/9/labels","id":1821680,"number":9,"title":"0.1.3","description":null,"creator":{"login":"p0psicles","id":1331394,"avatar_url":"https://avatars.githubusercontent.com/u/1331394?v=3","gravatar_id":"","url":"https://api.github.com/users/p0psicles","html_url":"https://github.com/p0psicles","followers_url":"https://api.github.com/users/p0psicles/followers","following_url":"https://api.github.com/users/p0psicles/following{/other_user}","gists_url":"https://api.github.com/users/p0psicles/gists{/gist_id}","starred_url":"https://api.github.com/users/p0psicles/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/p0psicles/subscriptions","organizations_url":"https://api.github.com/users/p0psicles/orgs","repos_url":"https://api.github.com/users/p0psicles/repos","events_url":"https://api.github.com/users/p0psicles/events{/privacy}","received_events_url":"https://api.github.com/users/p0psicles/received_events","type":"User","site_admin":false},"open_issues":4,"closed_issues":1,"state":"open","created_at":"2016-06-11T19:14:08Z","updated_at":"2016-07-08T10:19:53Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/pymedusa/SickRage/pulls/714/commits","review_comments_url":"https://api.github.com/repos/pymedusa/SickRage/pulls/714/comments","review_comment_url":"https://api.github.com/repos/pymedusa/SickRage/pulls/comments{/number}","comments_url":"https://api.github.com/repos/pymedusa/SickRage/issues/714/comments","statuses_url":"https://api.github.com/repos/pymedusa/SickRage/statuses/d8e15ecd6610849796d0f10ab3b9902a7f4ed91a","head":{"label":"pymedusa:guessit2","ref":"guessit2","sha":"d8e15ecd6610849796d0f10ab3b9902a7f4ed91a","user":{"login":"pymedusa","id":16712498,"avatar_url":"https://avatars.githubusercontent.com/u/16712498?v=3","gravatar_id":"","url":"https://api.github.com/users/pymedusa","html_url":"https://github.com/pymedusa","followers_url":"https://api.github.com/users/pymedusa/followers","following_url":"https://api.github.com/users/pymedusa/following{/other_user}","gists_url":"https://api.github.com/users/pymedusa/gists{/gist_id}","starred_url":"https://api.github.com/users/pymedusa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pymedusa/subscriptions","organizations_url":"https://api.github.com/users/pymedusa/orgs","repos_url":"https://api.github.com/users/pymedusa/repos","events_url":"https://api.github.com/users/pymedusa/events{/privacy}","received_events_url":"https://api.github.com/users/pymedusa/received_events","type":"Organization","site_admin":false},"repo":{"id":52334681,"name":"SickRage","full_name":"pymedusa/SickRage","owner":{"login":"pymedusa","id":16712498,"avatar_url":"https://avatars.githubusercontent.com/u/16712498?v=3","gravatar_id":"","url":"https://api.github.com/users/pymedusa","html_url":"https://github.com/pymedusa","followers_url":"https://api.github.com/users/pymedusa/followers","following_url":"https://api.github.com/users/pymedusa/following{/other_user}","gists_url":"https://api.github.com/users/pymedusa/gists{/gist_id}","starred_url":"https://api.github.com/users/pymedusa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pymedusa/subscriptions","organizations_url":"https://api.github.com/users/pymedusa/orgs","repos_url":"https://api.github.com/users/pymedusa/repos","events_url":"https://api.github.com/users/pymedusa/events{/privacy}","received_events_url":"https://api.github.com/users/pymedusa/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/pymedusa/SickRage","description":"Now with the most wanted feature: **Manual Search**. You can choose what to download! IRC: #pymedusa","fork":false,"url":"https://api.github.com/repos/pymedusa/SickRage","forks_url":"https://api.github.com/repos/pymedusa/SickRage/forks","keys_url":"https://api.github.com/repos/pymedusa/SickRage/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pymedusa/SickRage/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pymedusa/SickRage/teams","hooks_url":"https://api.github.com/repos/pymedusa/SickRage/hooks","issue_events_url":"https://api.github.com/repos/pymedusa/SickRage/issues/events{/number}","events_url":"https://api.github.com/repos/pymedusa/SickRage/events","assignees_url":"https://api.github.com/repos/pymedusa/SickRage/assignees{/user}","branches_url":"https://api.github.com/repos/pymedusa/SickRage/branches{/branch}","tags_url":"https://api.github.com/repos/pymedusa/SickRage/tags","blobs_url":"https://api.github.com/repos/pymedusa/SickRage/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pymedusa/SickRage/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pymedusa/SickRage/git/refs{/sha}","trees_url":"https://api.github.com/repos/pymedusa/SickRage/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pymedusa/SickRage/statuses/{sha}","languages_url":"https://api.github.com/repos/pymedusa/SickRage/languages","stargazers_url":"https://api.github.com/repos/pymedusa/SickRage/stargazers","contributors_url":"https://api.github.com/repos/pymedusa/SickRage/contributors","subscribers_url":"https://api.github.com/repos/pymedusa/SickRage/subscribers","subscription_url":"https://api.github.com/repos/pymedusa/SickRage/subscription","commits_url":"https://api.github.com/repos/pymedusa/SickRage/commits{/sha}","git_commits_url":"https://api.github.com/repos/pymedusa/SickRage/git/commits{/sha}","comments_url":"https://api.github.com/repos/pymedusa/SickRage/comments{/number}","issue_comment_url":"https://api.github.com/repos/pymedusa/SickRage/issues/comments{/number}","contents_url":"https://api.github.com/repos/pymedusa/SickRage/contents/{+path}","compare_url":"https://api.github.com/repos/pymedusa/SickRage/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pymedusa/SickRage/merges","archive_url":"https://api.github.com/repos/pymedusa/SickRage/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pymedusa/SickRage/downloads","issues_url":"https://api.github.com/repos/pymedusa/SickRage/issues{/number}","pulls_url":"https://api.github.com/repos/pymedusa/SickRage/pulls{/number}","milestones_url":"https://api.github.com/repos/pymedusa/SickRage/milestones{/number}","notifications_url":"https://api.github.com/repos/pymedusa/SickRage/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pymedusa/SickRage/labels{/name}","releases_url":"https://api.github.com/repos/pymedusa/SickRage/releases{/id}","deployments_url":"https://api.github.com/repos/pymedusa/SickRage/deployments","created_at":"2016-02-23T06:02:11Z","updated_at":"2016-06-16T06:16:28Z","pushed_at":"2016-07-10T19:39:18Z","git_url":"git://github.com/pymedusa/SickRage.git","ssh_url":"git@github.com:pymedusa/SickRage.git","clone_url":"https://github.com/pymedusa/SickRage.git","svn_url":"https://github.com/pymedusa/SickRage","homepage":"","size":56973,"stargazers_count":12,"watchers_count":12,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":9,"mirror_url":null,"open_issues_count":83,"forks":9,"open_issues":83,"watchers":12,"default_branch":"master"}},"base":{"label":"pymedusa:develop","ref":"develop","sha":"b980026c684c8f603e4bdcff253434041ad6da56","user":{"login":"pymedusa","id":16712498,"avatar_url":"https://avatars.githubusercontent.com/u/16712498?v=3","gravatar_id":"","url":"https://api.github.com/users/pymedusa","html_url":"https://github.com/pymedusa","followers_url":"https://api.github.com/users/pymedusa/followers","following_url":"https://api.github.com/users/pymedusa/following{/other_user}","gists_url":"https://api.github.com/users/pymedusa/gists{/gist_id}","starred_url":"https://api.github.com/users/pymedusa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pymedusa/subscriptions","organizations_url":"https://api.github.com/users/pymedusa/orgs","repos_url":"https://api.github.com/users/pymedusa/repos","events_url":"https://api.github.com/users/pymedusa/events{/privacy}","received_events_url":"https://api.github.com/users/pymedusa/received_events","type":"Organization","site_admin":false},"repo":{"id":52334681,"name":"SickRage","full_name":"pymedusa/SickRage","owner":{"login":"pymedusa","id":16712498,"avatar_url":"https://avatars.githubusercontent.com/u/16712498?v=3","gravatar_id":"","url":"https://api.github.com/users/pymedusa","html_url":"https://github.com/pymedusa","followers_url":"https://api.github.com/users/pymedusa/followers","following_url":"https://api.github.com/users/pymedusa/following{/other_user}","gists_url":"https://api.github.com/users/pymedusa/gists{/gist_id}","starred_url":"https://api.github.com/users/pymedusa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pymedusa/subscriptions","organizations_url":"https://api.github.com/users/pymedusa/orgs","repos_url":"https://api.github.com/users/pymedusa/repos","events_url":"https://api.github.com/users/pymedusa/events{/privacy}","received_events_url":"https://api.github.com/users/pymedusa/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/pymedusa/SickRage","description":"Now with the most wanted feature: **Manual Search**. You can choose what to download! IRC: #pymedusa","fork":false,"url":"https://api.github.com/repos/pymedusa/SickRage","forks_url":"https://api.github.com/repos/pymedusa/SickRage/forks","keys_url":"https://api.github.com/repos/pymedusa/SickRage/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pymedusa/SickRage/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pymedusa/SickRage/teams","hooks_url":"https://api.github.com/repos/pymedusa/SickRage/hooks","issue_events_url":"https://api.github.com/repos/pymedusa/SickRage/issues/events{/number}","events_url":"https://api.github.com/repos/pymedusa/SickRage/events","assignees_url":"https://api.github.com/repos/pymedusa/SickRage/assignees{/user}","branches_url":"https://api.github.com/repos/pymedusa/SickRage/branches{/branch}","tags_url":"https://api.github.com/repos/pymedusa/SickRage/tags","blobs_url":"https://api.github.com/repos/pymedusa/SickRage/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pymedusa/SickRage/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pymedusa/SickRage/git/refs{/sha}","trees_url":"https://api.github.com/repos/pymedusa/SickRage/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pymedusa/SickRage/statuses/{sha}","languages_url":"https://api.github.com/repos/pymedusa/SickRage/languages","stargazers_url":"https://api.github.com/repos/pymedusa/SickRage/stargazers","contributors_url":"https://api.github.com/repos/pymedusa/SickRage/contributors","subscribers_url":"https://api.github.com/repos/pymedusa/SickRage/subscribers","subscription_url":"https://api.github.com/repos/pymedusa/SickRage/subscription","commits_url":"https://api.github.com/repos/pymedusa/SickRage/commits{/sha}","git_commits_url":"https://api.github.com/repos/pymedusa/SickRage/git/commits{/sha}","comments_url":"https://api.github.com/repos/pymedusa/SickRage/comments{/number}","issue_comment_url":"https://api.github.com/repos/pymedusa/SickRage/issues/comments{/number}","contents_url":"https://api.github.com/repos/pymedusa/SickRage/contents/{+path}","compare_url":"https://api.github.com/repos/pymedusa/SickRage/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pymedusa/SickRage/merges","archive_url":"https://api.github.com/repos/pymedusa/SickRage/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pymedusa/SickRage/downloads","issues_url":"https://api.github.com/repos/pymedusa/SickRage/issues{/number}","pulls_url":"https://api.github.com/repos/pymedusa/SickRage/pulls{/number}","milestones_url":"https://api.github.com/repos/pymedusa/SickRage/milestones{/number}","notifications_url":"https://api.github.com/repos/pymedusa/SickRage/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pymedusa/SickRage/labels{/name}","releases_url":"https://api.github.com/repos/pymedusa/SickRage/releases{/id}","deployments_url":"https://api.github.com/repos/pymedusa/SickRage/deployments","created_at":"2016-02-23T06:02:11Z","updated_at":"2016-06-16T06:16:28Z","pushed_at":"2016-07-10T19:39:18Z","git_url":"git://github.com/pymedusa/SickRage.git","ssh_url":"git@github.com:pymedusa/SickRage.git","clone_url":"https://github.com/pymedusa/SickRage.git","svn_url":"https://github.com/pymedusa/SickRage","homepage":"","size":56973,"stargazers_count":12,"watchers_count":12,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":9,"mirror_url":null,"open_issues_count":83,"forks":9,"open_issues":83,"watchers":12,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/pymedusa/SickRage/pulls/714"},"html":{"href":"https://github.com/pymedusa/SickRage/pull/714"},"issue":{"href":"https://api.github.com/repos/pymedusa/SickRage/issues/714"},"comments":{"href":"https://api.github.com/repos/pymedusa/SickRage/issues/714/comments"},"review_comments":{"href":"https://api.github.com/repos/pymedusa/SickRage/pulls/714/comments"},"review_comment":{"href":"https://api.github.com/repos/pymedusa/SickRage/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/pymedusa/SickRage/pulls/714/commits"},"statuses":{"href":"https://api.github.com/repos/pymedusa/SickRage/statuses/d8e15ecd6610849796d0f10ab3b9902a7f4ed91a"}}}}
{"actor":{"display_login":"codacy-bot"}}