'Create a tag in this repository.
By default, this method creates an annotated tag. If you wish to
create a lightweight tag instead, pass ``lightweight=True``.
If you are creating an annotated tag, this method makes **2 calls** to
the API:
1. Creates the tag object
2. Creates the reference for the tag
This behaviour is required by the GitHub API.
:param str tag: (required), name of the tag
:param str message: (required), tag message
:param str sha: (required), SHA of the git object this is tagging
:param str obj_type: (required), type of object being tagged, e.g.,
\'commit\', \'tree\', \'blob\'
:param dict tagger: (required), containing the name, email of the
tagger and the date it was tagged
:param bool lightweight: (optional), if False, create an annotated
tag, otherwise create a lightweight tag (a Reference).
:returns: If lightweight == False: :class:`Tag <github3.git.Tag>` if
successful, else None. If lightweight == True: :class:`Reference
<github3.git.Reference>`'

@requires_auth
def create_tag(self, tag, message, sha, obj_type, tagger, lightweight=False):

    if (lightweight and tag and sha):
        return self.create_ref((u'refs/tags/' + tag), sha)
    json = None
    if (tag and message and sha and obj_type and (len(tagger) == 3)):
        data = {u'tag': tag, u'message': message, u'object': sha, u'type': obj_type, u'tagger': tagger}
        url = self._build_url(u'git', u'tags', base_url=self._api)
        json = self._json(self._post(url, data=data), 201)
        if json:
            self.create_ref((u'refs/tags/' + tag), json.get(u'sha'))
    return self._instance_or_null(Tag, json)
