GitHub PullRequestReviewCommentEvent at 2014-07-25 11:53:40
Repository: django
Actor: timgraham
Payload: {"action":"created","comment":{"url":"https://api.github.com/repos/django/django/pulls/comments/15397249","id":15397249,"diff_hunk":"@@ -0,0 +1,286 @@\n+=======================\n+Model ``_meta`` options\n+=======================\n+\n+.. module:: django.db.models.options\n+   :synopsis: Model meta-class layer\n+\n+.. currentmodule:: django.db.models.options\n+\n+The Options API is at the core of Django, it enables introspection of Django\n+Models with the rest of the system. This enables lookups, queries, forms,\n+admin to understand the capabilities of every model. The Options API is\n+hidden under the _meta attribute of each model class.\n+\n+Options can be used for the following:\n+\n+* You need to retreive all field names of a model\n+* You need to retreive all field instances names of a model\n+* You need to retreive a single field by name\n+\n+Field Types\n+===========\n+\n+A model can have 5 types of fields:\n+\n+Data fields\n+~~~~~~~~~~~~\n+\n+A data field is any field that has an entry on the database,\n+for example a CharField, BooleanField, a ForeignKey.\n+\n+.. code-block:: python\n+\n+    class Person(models.Model):\n+        data_abstract = models.CharField(max_length=10)\n+\n+Many-to-many fields\n+~~~~~~~~~~\n+\n+A many-to-many field that is defined on the current model.\n+\n+.. code-block:: python\n+\n+    class Person(models.Model):\n+        friends = models.ManyToManyField('self', related_name='friends', symmetrical=True)\n+\n+Related Object\n+~~~~~~~~~~~~~~\n+\n+A Related Object is a one-to-many relation from another model\n+(such as a :class:`django.db.models.ForeignKey`) that points\n+to the current model.\n+\n+.. code-block:: python\n+\n+    class City(models.Model):\n+        name = models.CharField(max_length=100)\n+\n+    class Person(models.Model):\n+        city = models.ForeignKey(City)\n+\n+In this case, City has a related object from Person\n+\n+Related many-to-many objects\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+A Related M2M object is a M2M relation from another model that points to the current model.\n+\n+.. code-block:: python\n+\n+    class City(models.Model):\n+        name = models.CharField(max_length=100)\n+\n+    class Person(models.Model):\n+        cities_lived_in = models.ManyToManyField(City)\n+\n+In this case, City has a related m2m from Person\n+\n+Virtual fields\n+~~~~~~~~~~~~~~\n+\n+ Virtual fields are model fields that do not necessarily have a\n+corresponding database column. they are \"Django fields\" such as\n+a :class:`django.contrib.contenttypes.fields.GenericForeignKey`.\n+\n+.. code-block:: python\n+\n+    class Person(models.Model):\n+        content_type = models.ForeignKey(ContentType, related_name='+')\n+        object_id_ = models.PositiveIntegerField()\n+        item = GenericForeignKey('content_type', 'object_id')\n+\n+:class:`django.contrib.contenttypes.fields.GenericForeignKey` uses ``content_type`` and\n+``object_id`` to keep track of what model type and id is set to ``item``,\n+but ``item`` itself does not have a concrete presence on the database.\n+In this case, ``item`` is a virtual field.\n+\n+Field Filters\n+=============\n+\n+There are 5 properties that each field can have.\n+We can use these properties as filters for ``get_fields``.\n+\n+Local\n+~~~~~\n+\n+A local field is when is not derived from inheritance. Fields from models that\n+directly inherit from abstract models or proxy classes are still local.\n+\n+.. code-block:: python\n+\n+    class Person(models.Model):\n+        name = models.CharField(max_length=50)\n+\n+    class Londoner(Person):\n+        overdraft = models.DecimalField()\n+\n+``Londoner`` has two fields (name and overdraft) but only one local field (overdraft).\n+\n+Hidden\n+~~~~~~\n+\n+Hidden fields are only referred to related objects and related m2m.\n+When a relational model (such as :class:`django.db.models.ManyToManyField`,\n+or :class:`django.db.models.ForeignKey`) specifies a related_name that\n+starts with a \"+\", it tells Django to not create a reverse relation.\n+\n+.. code-block:: python\n+\n+    class City(models.Model):\n+        name = models.CharField(max_length=100)\n+\n+    class Person(models.Model):\n+        city = models.ForeignKey(City, related_name='+')\n+\n+``City`` has a related hidden object from ``Person`` (as you can't access person_set)\n+\n+Concrete\n+~~~~~~~~\n+\n+Concrete fields are fields that have a column\n+\n+Proxied relations\n+~~~~~~~~~~~~~~~~~\n+\n+Proxied relations are relations that point to a proxy of a model.\n+\n+.. code-block:: python\n+\n+    class Person(models.Model):\n+        pass\n+\n+    class ProxyPerson(Person):\n+        class Meta:\n+            proxy = True\n+\n+    class RelationToProxy(models.Model):\n+         proxy_person = models.ForeignKey(ProxyPerson)\n+\n+In this case, ``Person`` has no related objects, but it has 1 proxied related\n+object from ``RelationToProxy``.\n+\n+``Options API``\n+===============\n+\n+Retrieve a field instance by name\n+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+.. method:: Options.get_field(field_name, m2m=True, data=True, related_m2m=False, related_objects=False, virtual=False)\n+\n+    Returns the field instance given a name of a field.\n+\n+    ``field_name`` can be the name of a field on a model or it can also be a reverse relation\n+    name (related query name).\n+\n+    ``field_name`` is the only **required** field. All the other arguments\n+    are flags that are used internally to optimize the lookup. By default, ``get_field``\n+    will only look up data and m2m fields, but all field types can be activated.\n+    Hidden and proxied relations are not available. If a given name is not found\n+    it will raise a `FieldDoesNotExist`` error.\n+\n+    .. code-block:: python\n+\n+        from django.contrib.auth.models import User\n+\n+        >>> User._meta.get_field('username') # A data field\n+        <django.db.models.fields.CharField: username>\n+\n+        >>> User._meta.get_field('logentry', related_objects=True) # A related object\n+        <RelatedObject: admin:logentry related to user>\n+\n+        >>> LogEntry._meta.get_field('user') # ForeignKey can be queried by field name\n+        <django.db.models.fields.related.ForeignKey: user>\n+        >>> LogEntry._meta.get_field('user_id') # .. and also by database column name\n+        <django.db.models.fields.related.ForeignKey: user>\n+\n+        >>> User._meta.get_field('does_not_exist') # A non existent field\n+        *** FieldDoesNotExist: User has no field named 'does_not_exist'\n+\n+    .. note::\n+        The default arguments of ``get_field`` might not be what you expect.\n+        ``get_fields`` only enables data fields, while ``get_field``\n+        enables data and m2m. This is because of backwards-compatibility\n+        issues (read more below).\n+\n+Retrieve all field names\n+~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+.. attribute:: Options.field_names\n+\n+    Returns a list of all field names (including reverse relations) on the\n+    current model.\n+\n+    .. code-block:: python\n+\n+        >>> User._meta.field_names\n+        ['username', 'first_name', 'last_name', 'logentry',\n+         'is_active', 'email', 'is_superuser', 'is_staff',\n+         'last_login', 'groups', 'user_permissions', 'password',\n+         'id', 'date_joined']\n+\n+Retrieve field instances\n+~~~~~~~~~~~~~~~~~~~~~~~~\n+\n+.. method:: Options.get_fields(m2m=False, data=True, related_m2m=False, related_objects=False, virtual=False, include_parents=True, include_non_concrete=True, include_hidden=False, include_proxy=False, export_map=False)\n+\n+    Returns a list of fields given a list of field types and filters.\n+\n+    get_fields takes a set of flags as parameters, and returns a tuple\n+    of field instances. The flags are a combination of field types\n+    and field filters. All possible combinations of filters and fields\n+    are possible, although some will have no effect (such as\n+    include_proxy combined with data or m2m by itself).\n+\n+    .. code-block:: python\n+\n+        >>> User._meta.get_fields() # Only data by default\n+        (<django.db.models.fields.AutoField: id>,\n+         <django.db.models.fields.CharField: password>,\n+         <django.db.models.fields.DateTimeField: last_login>,\n+         <django.db.models.fields.BooleanField: is_superuser>,\n+         <django.db.models.fields.CharField: username>,\n+         <django.db.models.fields.CharField: first_name>,\n+         <django.db.models.fields.CharField: last_name>,\n+         <django.db.models.fields.EmailField: email>,\n+         <django.db.models.fields.BooleanField: is_staff>,\n+         <django.db.models.fields.BooleanField: is_active>,\n+         <django.db.models.fields.DateTimeField: date_joined>)\n+\n+        >>> User._meta.get_fields(data=False, related_objects=True) # only related_objects\n+        (<RelatedObject: admin:logentry related to user>,)\n+\n+        >>> User._meta.get_fields(data=False, related_objects=True, include_hidden=True) # only related_objects including hidden\n+        (<RelatedObject: auth:user_groups related to user>,\n+         <RelatedObject: auth:user_user_permissions related to user>,\n+         <RelatedObject: admin:logentry related to user>)\n+\n+``Fast-Access API``\n+===================\n+\n+In order to provide a simple and usable API for developers to use,\n+Django provides some Fast-access endpoints that are used\n+by Django internally. The reason these APIs exist is to ensure\n+field access is always fast. This API is composed of a specific set\n+of properties that are cached on first access, and are guaranteed to\n+be fast.\n+If you have the choice between using a fast-access API, or using one of the","path":"docs/ref/models/meta.txt","position":267,"original_position":267,"commit_id":"17d84e106cbe1b9fcca55fc66bb57fa844be99c5","original_commit_id":"17d84e106cbe1b9fcca55fc66bb57fa844be99c5","user":{"login":"timgraham","id":411869,"avatar_url":"https://avatars.githubusercontent.com/u/411869?","gravatar_id":"fa170777273ca7b235bdde7d80e9f8a6","url":"https://api.github.com/users/timgraham","html_url":"https://github.com/timgraham","followers_url":"https://api.github.com/users/timgraham/followers","following_url":"https://api.github.com/users/timgraham/following{/other_user}","gists_url":"https://api.github.com/users/timgraham/gists{/gist_id}","starred_url":"https://api.github.com/users/timgraham/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/timgraham/subscriptions","organizations_url":"https://api.github.com/users/timgraham/orgs","repos_url":"https://api.github.com/users/timgraham/repos","events_url":"https://api.github.com/users/timgraham/events{/privacy}","received_events_url":"https://api.github.com/users/timgraham/received_events","type":"User","site_admin":false},"body":"no comma after API","created_at":"2014-07-25T11:53:40Z","updated_at":"2014-07-25T11:53:40Z","html_url":"https://github.com/django/django/pull/2894#discussion_r15397249","pull_request_url":"https://api.github.com/repos/django/django/pulls/2894","_links":{"self":{"href":"https://api.github.com/repos/django/django/pulls/comments/15397249"},"html":{"href":"https://github.com/django/django/pull/2894#discussion_r15397249"},"pull_request":{"href":"https://api.github.com/repos/django/django/pulls/2894"}}},"pull_request":{"url":"https://api.github.com/repos/django/django/pulls/2894","id":18102141,"html_url":"https://github.com/django/django/pull/2894","diff_url":"https://github.com/django/django/pull/2894.diff","patch_url":"https://github.com/django/django/pull/2894.patch","issue_url":"https://api.github.com/repos/django/django/issues/2894","number":2894,"state":"open","title":"[Soc2014] The new Options API","user":{"login":"PirosB3","id":847179,"avatar_url":"https://avatars.githubusercontent.com/u/847179?","gravatar_id":"d547949cc9256f649a3519c8a1673f14","url":"https://api.github.com/users/PirosB3","html_url":"https://github.com/PirosB3","followers_url":"https://api.github.com/users/PirosB3/followers","following_url":"https://api.github.com/users/PirosB3/following{/other_user}","gists_url":"https://api.github.com/users/PirosB3/gists{/gist_id}","starred_url":"https://api.github.com/users/PirosB3/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PirosB3/subscriptions","organizations_url":"https://api.github.com/users/PirosB3/orgs","repos_url":"https://api.github.com/users/PirosB3/repos","events_url":"https://api.github.com/users/PirosB3/events{/privacy}","received_events_url":"https://api.github.com/users/PirosB3/received_events","type":"User","site_admin":false},"body":"# Main API\r\nOfficial Wiki page: https://code.djangoproject.com/wiki/new_meta_api\r\n\r\nget_fields(m2m, data, related_m2m, related_objects, virtual,\r\ninclude_parents, include_non_concrete, include_hidden, include_proxy) -> (field, field, ...)\r\n\r\nget_field(field_name, m2m, data, related_m2m, related_objects, virtual) -> field\r\n\r\n# Cached properties for fast access\r\nfields -> (field, field, ..)\r\nconcrete_fields -> (field, field, ...)\r\nlocal_concrete_fields -> (field, field, ...)\r\nfield_names (field_name, field_name, ..)\r\n\r\n# Benchmarks\r\n(compared to master)\r\n\r\n| Benchmark Name | Control | Experiment | Diff |\r\n| -------------- | ------- | ---------- | ---- |\r\n| url_resolve_flat_i18n_off | 0.3224664569 | 0.3128736854 | 0.0095927715 (2.97% faster) |\r\n| url_resolve_flat | 0.2262115002 | 0.2201457143 | 0.0060657859 (2.68% faster) |\r\n| query_prefetch_related | 0.1185187101 | 0.1131614804 | 0.0053572297 (4.52% faster) |\r\n| query_all | 0.0260368466 | 0.0244047880 | 0.0016320586 (6.27% faster) |\r\n| query_select_related | 0.0590585470 | 0.0582756639 | 0.0007828832 (1.33% faster) |\r\n| query_raw | 0.0150311589 | 0.0149269700 | 0.0001041889 (0.69% faster) |\r\n| query_distinct | 0.0003427148 | 0.0003322124 | 0.0000105023 (3.06% faster) |\r\n| url_resolve | 0.0174066782 | 0.0174011946 | 0.0000054836 (0.03% faster) |\r\n| template_render_simple | 0.0001164556 | 0.0001118183 | 0.0000046372 (3.98% faster) |\r\n| query_delete_related | 0.0003562689 | 0.0003521204 | 0.0000041485 (1.16% faster) |\r\n| form_create | 0.0001154184 | 0.0001116633 | 0.0000037551 (3.25% faster) |\r\n| model_creation | 0.0002620935 | 0.0002592921 | 0.0000028014 (1.07% faster) |\r\n| query_iterator | 0.0002910018 | 0.0002886057 | 0.0000023961 (0.82% faster) |\r\n| form_clean | 0.0000283957 | 0.0000273466 | 0.0000010490 (3.69% faster) |\r\n| url_resolve_nested | 0.0001253605 | 0.0001250029 | 0.0000003576 (0.29% faster) |\r\n| query_delete | 0.0002635837 | 0.0002634764 | 0.0000001073 (0.04% faster) |\r\n| raw_sql | 0.0000513077 | 0.0000515938 | -0.0000002861 (0.56% slower) |\r\n| template_render | 0.0123201489 | 0.0123205304 | -0.0000003815 (0.00% slower) |\r\n| query_none | 0.0001389146 | 0.0001396894 | -0.0000007749 (0.56% slower) |\r\n| query_all_multifield | 0.0442516685 | 0.0442527294 | -0.0000010610 (0.00% slower) |\r\n| multi_value_dict | 0.0001797199 | 0.0001827717 | -0.0000030518 (1.70% slower) |\r\n| query_count | 0.0002346754 | 0.0002384424 | -0.0000037670 (1.61% slower) |\r\n| locale_from_request | 0.0008673787 | 0.0008715868 | -0.0000042081 (0.49% slower) |\r\n| query_exclude | 0.0005133271 | 0.0005178809 | -0.0000045538 (0.89% slower) |\r\n| query_latest | 0.0003925323 | 0.0003977776 | -0.0000052452 (1.34% slower) |\r\n| model_delete | 0.0004462004 | 0.0004532099 | -0.0000070095 (1.57% slower) |\r\n| query_order_by | 0.0003699422 | 0.0003770232 | -0.0000070810 (1.91% slower) |\r\n| query_aggregate | 0.0003185034 | 0.0003258467 | -0.0000073433 (2.31% slower) |\r\n| default_middleware | 0.0004270792 | 0.0004346967 | -0.0000076175 (1.78% slower) |\r\n| query_filter | 0.0004306793 | 0.0004388094 | -0.0000081301 (1.89% slower) |\r\n| query_update | 0.0002333641 | 0.0002430677 | -0.0000097036 (4.16% slower) |\r\n| query_in_bulk | 0.0004901409 | 0.0005011201 | -0.0000109792 (2.24% slower) |\r\n| query_dates | 0.0005465746 | 0.0005576730 | -0.0000110984 (2.03% slower) |\r\n| query_annotate | 0.0006684303 | 0.0006795764 | -0.0000111461 (1.67% slower) |\r\n| query_values | 0.0003065467 | 0.0003197312 | -0.0000131845 (4.30% slower) |\r\n| query_complex_filter | 0.0001333117 | 0.0001471758 | -0.0000138640 (10.40% slower) |\r\n| query_values_list | 0.0002993703 | 0.0003140211 | -0.0000146508 (4.89% slower) |\r\n| template_compilation | 0.0005861163 | 0.0006127477 | -0.0000266314 (4.54% slower) |\r\n| query_get_or_create | 0.0013090134 | 0.0013397813 | -0.0000307679 (2.35% slower) |\r\n| l10n_render | 0.0063407421 | 0.0063731670 | -0.0000324249 (0.51% slower) |\r\n| query_exists | 0.0009287477 | 0.0009753466 | -0.0000465989 (5.02% slower) |\r\n| qs_filter_chaining | 0.0008348227 | 0.0009381652 | -0.0001033425 (12.38% slower) |\r\n| query_raw_deferred | 0.0182870388 | 0.0186469555 | -0.0003599167 (1.97% slower) |\r\n| model_save_new | 0.0142104745 | 0.0145826817 | -0.0003722072 (2.62% slower) |\r\n| model_save_existing | 0.0140855193 | 0.0145498991 | -0.0004643798 (3.30% slower) |\r\n| query_get | 0.0273179531 | 0.0280359745 | -0.0007180214 (2.63% slower) |\r\nSum of all benchmarks (bigger is better): 0.0212707281","created_at":"2014-07-08T13:37:41Z","updated_at":"2014-07-25T11:53:40Z","closed_at":null,"merged_at":null,"merge_commit_sha":"77893f4b49e54b655849728fabb4ecbf75a8f2a3","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/django/django/pulls/2894/commits","review_comments_url":"https://api.github.com/repos/django/django/pulls/2894/comments","review_comment_url":"https://api.github.com/repos/django/django/pulls/comments/{number}","comments_url":"https://api.github.com/repos/django/django/issues/2894/comments","statuses_url":"https://api.github.com/repos/django/django/statuses/17d84e106cbe1b9fcca55fc66bb57fa844be99c5","head":{"label":"PirosB3:soc2014_meta_refactor_upgrade_flags_get_field","ref":"soc2014_meta_refactor_upgrade_flags_get_field","sha":"17d84e106cbe1b9fcca55fc66bb57fa844be99c5","user":{"login":"PirosB3","id":847179,"avatar_url":"https://avatars.githubusercontent.com/u/847179?","gravatar_id":"d547949cc9256f649a3519c8a1673f14","url":"https://api.github.com/users/PirosB3","html_url":"https://github.com/PirosB3","followers_url":"https://api.github.com/users/PirosB3/followers","following_url":"https://api.github.com/users/PirosB3/following{/other_user}","gists_url":"https://api.github.com/users/PirosB3/gists{/gist_id}","starred_url":"https://api.github.com/users/PirosB3/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PirosB3/subscriptions","organizations_url":"https://api.github.com/users/PirosB3/orgs","repos_url":"https://api.github.com/users/PirosB3/repos","events_url":"https://api.github.com/users/PirosB3/events{/privacy}","received_events_url":"https://api.github.com/users/PirosB3/received_events","type":"User","site_admin":false},"repo":{"id":17481434,"name":"django","full_name":"PirosB3/django","owner":{"login":"PirosB3","id":847179,"avatar_url":"https://avatars.githubusercontent.com/u/847179?","gravatar_id":"d547949cc9256f649a3519c8a1673f14","url":"https://api.github.com/users/PirosB3","html_url":"https://github.com/PirosB3","followers_url":"https://api.github.com/users/PirosB3/followers","following_url":"https://api.github.com/users/PirosB3/following{/other_user}","gists_url":"https://api.github.com/users/PirosB3/gists{/gist_id}","starred_url":"https://api.github.com/users/PirosB3/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PirosB3/subscriptions","organizations_url":"https://api.github.com/users/PirosB3/orgs","repos_url":"https://api.github.com/users/PirosB3/repos","events_url":"https://api.github.com/users/PirosB3/events{/privacy}","received_events_url":"https://api.github.com/users/PirosB3/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/PirosB3/django","description":"The Web framework for perfectionists with deadlines.","fork":true,"url":"https://api.github.com/repos/PirosB3/django","forks_url":"https://api.github.com/repos/PirosB3/django/forks","keys_url":"https://api.github.com/repos/PirosB3/django/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PirosB3/django/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PirosB3/django/teams","hooks_url":"https://api.github.com/repos/PirosB3/django/hooks","issue_events_url":"https://api.github.com/repos/PirosB3/django/issues/events{/number}","events_url":"https://api.github.com/repos/PirosB3/django/events","assignees_url":"https://api.github.com/repos/PirosB3/django/assignees{/user}","branches_url":"https://api.github.com/repos/PirosB3/django/branches{/branch}","tags_url":"https://api.github.com/repos/PirosB3/django/tags","blobs_url":"https://api.github.com/repos/PirosB3/django/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PirosB3/django/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PirosB3/django/git/refs{/sha}","trees_url":"https://api.github.com/repos/PirosB3/django/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PirosB3/django/statuses/{sha}","languages_url":"https://api.github.com/repos/PirosB3/django/languages","stargazers_url":"https://api.github.com/repos/PirosB3/django/stargazers","contributors_url":"https://api.github.com/repos/PirosB3/django/contributors","subscribers_url":"https://api.github.com/repos/PirosB3/django/subscribers","subscription_url":"https://api.github.com/repos/PirosB3/django/subscription","commits_url":"https://api.github.com/repos/PirosB3/django/commits{/sha}","git_commits_url":"https://api.github.com/repos/PirosB3/django/git/commits{/sha}","comments_url":"https://api.github.com/repos/PirosB3/django/comments{/number}","issue_comment_url":"https://api.github.com/repos/PirosB3/django/issues/comments/{number}","contents_url":"https://api.github.com/repos/PirosB3/django/contents/{+path}","compare_url":"https://api.github.com/repos/PirosB3/django/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PirosB3/django/merges","archive_url":"https://api.github.com/repos/PirosB3/django/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PirosB3/django/downloads","issues_url":"https://api.github.com/repos/PirosB3/django/issues{/number}","pulls_url":"https://api.github.com/repos/PirosB3/django/pulls{/number}","milestones_url":"https://api.github.com/repos/PirosB3/django/milestones{/number}","notifications_url":"https://api.github.com/repos/PirosB3/django/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PirosB3/django/labels{/name}","releases_url":"https://api.github.com/repos/PirosB3/django/releases{/id}","created_at":"2014-03-06T15:01:29Z","updated_at":"2014-06-24T15:06:48Z","pushed_at":"2014-07-24T10:22:29Z","git_url":"git://github.com/PirosB3/django.git","ssh_url":"git@github.com:PirosB3/django.git","clone_url":"https://github.com/PirosB3/django.git","svn_url":"https://github.com/PirosB3/django","homepage":"http://www.djangoproject.com/","size":105598,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"django:master","ref":"master","sha":"4e424084e6d796f7ed5f215330cd0b98287c1300","user":{"login":"django","id":27804,"avatar_url":"https://avatars.githubusercontent.com/u/27804?","gravatar_id":"fd542381031aa84dca86628ece84fc07","url":"https://api.github.com/users/django","html_url":"https://github.com/django","followers_url":"https://api.github.com/users/django/followers","following_url":"https://api.github.com/users/django/following{/other_user}","gists_url":"https://api.github.com/users/django/gists{/gist_id}","starred_url":"https://api.github.com/users/django/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/django/subscriptions","organizations_url":"https://api.github.com/users/django/orgs","repos_url":"https://api.github.com/users/django/repos","events_url":"https://api.github.com/users/django/events{/privacy}","received_events_url":"https://api.github.com/users/django/received_events","type":"Organization","site_admin":false},"repo":{"id":4164482,"name":"django","full_name":"django/django","owner":{"login":"django","id":27804,"avatar_url":"https://avatars.githubusercontent.com/u/27804?","gravatar_id":"fd542381031aa84dca86628ece84fc07","url":"https://api.github.com/users/django","html_url":"https://github.com/django","followers_url":"https://api.github.com/users/django/followers","following_url":"https://api.github.com/users/django/following{/other_user}","gists_url":"https://api.github.com/users/django/gists{/gist_id}","starred_url":"https://api.github.com/users/django/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/django/subscriptions","organizations_url":"https://api.github.com/users/django/orgs","repos_url":"https://api.github.com/users/django/repos","events_url":"https://api.github.com/users/django/events{/privacy}","received_events_url":"https://api.github.com/users/django/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/django/django","description":"The Web framework for perfectionists with deadlines.","fork":false,"url":"https://api.github.com/repos/django/django","forks_url":"https://api.github.com/repos/django/django/forks","keys_url":"https://api.github.com/repos/django/django/keys{/key_id}","collaborators_url":"https://api.github.com/repos/django/django/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/django/django/teams","hooks_url":"https://api.github.com/repos/django/django/hooks","issue_events_url":"https://api.github.com/repos/django/django/issues/events{/number}","events_url":"https://api.github.com/repos/django/django/events","assignees_url":"https://api.github.com/repos/django/django/assignees{/user}","branches_url":"https://api.github.com/repos/django/django/branches{/branch}","tags_url":"https://api.github.com/repos/django/django/tags","blobs_url":"https://api.github.com/repos/django/django/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/django/django/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/django/django/git/refs{/sha}","trees_url":"https://api.github.com/repos/django/django/git/trees{/sha}","statuses_url":"https://api.github.com/repos/django/django/statuses/{sha}","languages_url":"https://api.github.com/repos/django/django/languages","stargazers_url":"https://api.github.com/repos/django/django/stargazers","contributors_url":"https://api.github.com/repos/django/django/contributors","subscribers_url":"https://api.github.com/repos/django/django/subscribers","subscription_url":"https://api.github.com/repos/django/django/subscription","commits_url":"https://api.github.com/repos/django/django/commits{/sha}","git_commits_url":"https://api.github.com/repos/django/django/git/commits{/sha}","comments_url":"https://api.github.com/repos/django/django/comments{/number}","issue_comment_url":"https://api.github.com/repos/django/django/issues/comments/{number}","contents_url":"https://api.github.com/repos/django/django/contents/{+path}","compare_url":"https://api.github.com/repos/django/django/compare/{base}...{head}","merges_url":"https://api.github.com/repos/django/django/merges","archive_url":"https://api.github.com/repos/django/django/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/django/django/downloads","issues_url":"https://api.github.com/repos/django/django/issues{/number}","pulls_url":"https://api.github.com/repos/django/django/pulls{/number}","milestones_url":"https://api.github.com/repos/django/django/milestones{/number}","notifications_url":"https://api.github.com/repos/django/django/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/django/django/labels{/name}","releases_url":"https://api.github.com/repos/django/django/releases{/id}","created_at":"2012-04-28T02:47:18Z","updated_at":"2014-07-25T11:50:17Z","pushed_at":"2014-07-25T10:27:57Z","git_url":"git://github.com/django/django.git","ssh_url":"git@github.com:django/django.git","clone_url":"https://github.com/django/django.git","svn_url":"https://github.com/django/django","homepage":"http://www.djangoproject.com/","size":219067,"stargazers_count":10597,"watchers_count":10597,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":false,"forks_count":4059,"mirror_url":null,"open_issues_count":117,"forks":4059,"open_issues":117,"watchers":10597,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/django/django/pulls/2894"},"html":{"href":"https://github.com/django/django/pull/2894"},"issue":{"href":"https://api.github.com/repos/django/django/issues/2894"},"comments":{"href":"https://api.github.com/repos/django/django/issues/2894/comments"},"review_comments":{"href":"https://api.github.com/repos/django/django/pulls/2894/comments"},"review_comment":{"href":"https://api.github.com/repos/django/django/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/django/django/pulls/2894/commits"},"statuses":{"href":"https://api.github.com/repos/django/django/statuses/17d84e106cbe1b9fcca55fc66bb57fa844be99c5"}}}}