{"action":"created","comment":{"url":"https://api.github.com/repos/openstacknetsdk/openstack.net/pulls/comments/25113854","id":25113854,"diff_hunk":"@@ -0,0 +1,309 @@\n+﻿namespace OpenStack.Services.ContentDelivery.V1\n+{\n+    using System;\n+    using System.Collections.Generic;\n+    using System.Linq;\n+    using System.Net.Http;\n+    using System.Net.Http.Headers;\n+    using System.Threading;\n+    using System.Threading.Tasks;\n+    using Newtonsoft.Json;\n+    using Newtonsoft.Json.Linq;\n+    using OpenStack.Collections;\n+    using OpenStack.Net;\n+    using OpenStack.ObjectModel.JsonHome;\n+    using OpenStack.Security.Authentication;\n+    using OpenStack.Services.Identity;\n+    using Rackspace.Net;\n+    using Rackspace.Threading;\n+\n+    /// <summary>\n+    /// This class provides a default implementation of <see cref=\"IContentDeliveryService\"/> suitable for connecting to\n+    /// OpenStack-compatible installations of the Content Delivery Service V1.\n+    /// </summary>\n+    /// <threadsafety static=\"true\" instance=\"false\"/>\n+    /// <preliminary/>\n+    public class ContentDeliveryClient : ServiceClient, IContentDeliveryService\n+    {\n+        /// <summary>\n+        /// Initializes a new instance of the <see cref=\"ContentDeliveryClient\"/> class with the specified\n+        /// authentication service, default region, and value indicating whether an internal or public endpoint should\n+        /// be used for communicating with the service.\n+        /// </summary>\n+        /// <param name=\"authenticationService\">The authentication service to use for authenticating requests made to\n+        /// this service.</param>\n+        /// <param name=\"defaultRegion\">The preferred region for the service. Unless otherwise specified for a specific\n+        /// client, derived service clients will not use a default region if this value is <see langword=\"null\"/> (i.e.\n+        /// only region-less or \"global\" service endpoints will be considered acceptable).</param>\n+        /// <param name=\"internalUrl\"><see langword=\"true\"/> to access the service over a local network; otherwise,\n+        /// <see langword=\"false\"/> to access the service over a public network (the Internet).</param>\n+        /// <exception cref=\"ArgumentNullException\">\n+        /// If <paramref name=\"authenticationService\"/> is <see langword=\"null\"/>.\n+        /// </exception>\n+        public ContentDeliveryClient(IAuthenticationService authenticationService, string defaultRegion, bool internalUrl)\n+            : base(authenticationService, defaultRegion, internalUrl)\n+        {\n+        }\n+\n+        #region IContentDeliveryService Members\n+\n+        /// <inheritdoc/>\n+        public virtual Task<GetHomeApiCall> PrepareGetHomeAsync(CancellationToken cancellationToken)\n+        {\n+            UriTemplate template = new UriTemplate(string.Empty);\n+            Dictionary<string, string> parameters = new Dictionary<string, string>();\n+            return GetBaseUriAsync(cancellationToken)\n+                .Then(PrepareRequestAsyncFunc(HttpMethod.Get, template, parameters, cancellationToken))\n+                .Select(task => new GetHomeApiCall(CreateJsonApiCall<HomeDocument>(task.Result)));\n+        }\n+\n+        /// <inheritdoc/>\n+        public virtual Task<GetHealthApiCall> PrepareGetHealthAsync(CancellationToken cancellationToken)\n+        {\n+            throw new NotImplementedException();\n+        }\n+\n+        /// <inheritdoc/>\n+        public virtual Task<GetSubsystemHealthApiCall> PrepareGetSubsystemHealthAsync(SubsystemId subsystemId, CancellationToken cancellationToken)\n+        {\n+            throw new NotImplementedException();\n+        }\n+\n+        /// <inheritdoc/>\n+        public virtual Task<PingApiCall> PreparePingAsync(CancellationToken cancellationToken)\n+        {\n+            UriTemplate template = new UriTemplate(\"ping\");\n+            Dictionary<string, string> parameters = new Dictionary<string, string>();\n+            return GetBaseUriAsync(cancellationToken)\n+                .Then(PrepareRequestAsyncFunc(HttpMethod.Get, template, parameters, cancellationToken))\n+                .Select(RemoveAcceptHeader)\n+                .Select(task => new PingApiCall(CreateBasicApiCall(task.Result)));\n+        }\n+\n+        /// <inheritdoc/>\n+        public virtual Task<ListServicesApiCall> PrepareListServicesAsync(CancellationToken cancellationToken)\n+        {\n+            UriTemplate template = new UriTemplate(\"services\");\n+            Dictionary<string, string> parameters = new Dictionary<string, string>();\n+\n+            Func<HttpResponseMessage, CancellationToken, Task<ReadOnlyCollectionPage<Service>>> deserializeResult =\n+                (responseMessage, innerCancellationToken) =>\n+                {\n+                    if (!HttpApiCall.IsAcceptable(responseMessage))\n+                        throw new HttpWebException(responseMessage);\n+\n+                    return responseMessage.Content.ReadAsStringAsync()\n+                        .Select(\n+                            innerTask =>\n+                            {\n+                                JObject resultObject = JsonConvert.DeserializeObject<JObject>(innerTask.Result);\n+                                JArray servicesArray = resultObject[\"services\"] as JArray;\n+\n+                                IList<Service> list = servicesArray.ToObject<Service[]>();\n+                                Func<CancellationToken, Task<IHttpApiCall<ReadOnlyCollectionPage<Service>>>> prepareGetNextPageAsync = null;\n+\n+                                JArray linksArray = resultObject[\"links\"] as JArray;\n+                                Uri nextPage = null;\n+                                Link[] links = linksArray != null ? linksArray.ToObject<Link[]>() : null;\n+                                if (links != null)\n+                                {\n+                                    Link nextPageLink = links.FirstOrDefault(i => string.Equals(\"next\", i.Relation, StringComparison.OrdinalIgnoreCase));\n+                                    nextPage = nextPageLink != null ? nextPageLink.Target : null;\n+                                }\n+\n+                                if (nextPage != null)\n+                                {\n+                                    prepareGetNextPageAsync =\n+                                        innerCancellationToken2 =>\n+                                        {\n+                                            return PrepareListServicesAsync(innerCancellationToken2)\n+                                                .WithUri(nextPage)\n+                                                .Select(_ => _.Result.AsHttpApiCall());\n+                                        };\n+                                }\n+\n+                                ReadOnlyCollectionPage<Service> results = new BasicReadOnlyCollectionPage<Service>(list, prepareGetNextPageAsync);\n+                                return results;\n+                            });\n+                };\n+\n+            return GetBaseUriAsync(cancellationToken)\n+                .Then(PrepareRequestAsyncFunc(HttpMethod.Get, template, parameters, cancellationToken))\n+                .Select(task => new ListServicesApiCall(CreateCustomApiCall(task.Result, HttpCompletionOption.ResponseContentRead, deserializeResult)));\n+        }\n+\n+        /// <inheritdoc/>\n+        public virtual Task<GetServiceApiCall> PrepareGetServiceAsync(ServiceId serviceId, CancellationToken cancellationToken)\n+        {\n+            if (serviceId == null)\n+                throw new ArgumentNullException(\"serviceId\");\n+\n+            UriTemplate template = new UriTemplate(\"services/{service_id}\");\n+            Dictionary<string, string> parameters = new Dictionary<string, string> { { \"service_id\", serviceId.Value } };\n+            return GetBaseUriAsync(cancellationToken)\n+                .Then(PrepareRequestAsyncFunc(HttpMethod.Get, template, parameters, cancellationToken))\n+                .Select(task => new GetServiceApiCall(CreateJsonApiCall<Service>(task.Result)));\n+        }\n+\n+        /// <inheritdoc/>\n+        public virtual Task<AddServiceApiCall> PrepareAddServiceAsync(ServiceData serviceData, CancellationToken cancellationToken)\n+        {\n+            UriTemplate template = new UriTemplate(\"services\");\n+            Dictionary<string, string> parameters = new Dictionary<string, string>();\n+\n+            Func<HttpResponseMessage, CancellationToken, Task<ServiceId>> deserializeResult =\n+                (responseMessage, innerCancellationToken) =>\n+                {\n+                    string absolutePath = responseMessage.Headers.Location.AbsolutePath;\n+                    int lastSlash = absolutePath.LastIndexOf('/');\n+                    return CompletedTask.FromResult(new ServiceId(absolutePath.Substring(lastSlash + 1)));\n+                };\n+\n+            return GetBaseUriAsync(cancellationToken)\n+                .Then(PrepareRequestAsyncFunc(HttpMethod.Post, template, parameters, serviceData, cancellationToken))\n+                .Select(task => new AddServiceApiCall(CreateCustomApiCall(task.Result, HttpCompletionOption.ResponseContentRead, deserializeResult)));\n+        }\n+\n+        /// <inheritdoc/>\n+        public virtual Task<UpdateServiceApiCall> PrepareUpdateServiceAsync(ServiceId serviceId, ServiceData serviceData, CancellationToken cancellationToken)\n+        {\n+            throw new NotImplementedException();\n+        }\n+\n+        /// <inheritdoc/>\n+        public virtual Task<RemoveServiceApiCall> PrepareRemoveServiceAsync(ServiceId serviceId, CancellationToken cancellationToken)\n+        {\n+            if (serviceId == null)\n+                throw new ArgumentNullException(\"serviceId\");\n+\n+            UriTemplate template = new UriTemplate(\"services/{service_id}\");\n+            Dictionary<string, string> parameters = new Dictionary<string, string> { { \"service_id\", serviceId.Value } };\n+            return GetBaseUriAsync(cancellationToken)\n+                .Then(PrepareRequestAsyncFunc(HttpMethod.Delete, template, parameters, cancellationToken))\n+                .Select(task => new RemoveServiceApiCall(CreateBasicApiCall(task.Result)));\n+        }\n+\n+        /// <inheritdoc/>\n+        public virtual Task<RemoveAssetApiCall> PrepareRemoveAssetAsync(ServiceId serviceId, CancellationToken cancellationToken)\n+        {\n+            throw new NotImplementedException();\n+        }\n+\n+        /// <inheritdoc/>\n+        public virtual Task<ListFlavorsApiCall> PrepareListFlavorsAsync(CancellationToken cancellationToken)\n+        {\n+            UriTemplate template = new UriTemplate(\"flavors\");\n+            Dictionary<string, string> parameters = new Dictionary<string, string>();\n+\n+            Func<HttpResponseMessage, CancellationToken, Task<ReadOnlyCollectionPage<Flavor>>> deserializeResult =\n+                (responseMessage, innerCancellationToken) =>\n+                {\n+                    if (!HttpApiCall.IsAcceptable(responseMessage))\n+                        throw new HttpWebException(responseMessage);\n+\n+                    return responseMessage.Content.ReadAsStringAsync()\n+                        .Select(\n+                            innerTask =>\n+                            {\n+                                JObject resultObject = JsonConvert.DeserializeObject<JObject>(innerTask.Result);\n+                                JArray flavorsArray = resultObject[\"flavors\"] as JArray;\n+\n+                                IList<Flavor> list = flavorsArray.ToObject<Flavor[]>();\n+                                Func<CancellationToken, Task<IHttpApiCall<ReadOnlyCollectionPage<Flavor>>>> prepareGetNextPageAsync = null;\n+\n+                                JArray linksArray = resultObject[\"links\"] as JArray;\n+                                Uri nextPage = null;\n+                                Link[] links = linksArray != null ? linksArray.ToObject<Link[]>() : null;\n+                                if (links != null)\n+                                {\n+                                    Link nextPageLink = links.FirstOrDefault(i => string.Equals(\"next\", i.Relation, StringComparison.OrdinalIgnoreCase));\n+                                    nextPage = nextPageLink != null ? nextPageLink.Target : null;\n+                                }\n+\n+                                if (nextPage != null)\n+                                {\n+                                    prepareGetNextPageAsync =\n+                                        innerCancellationToken2 =>\n+                                        {\n+                                            return PrepareListFlavorsAsync(innerCancellationToken2)\n+                                                .WithUri(nextPage)\n+                                                .Select(_ => _.Result.AsHttpApiCall());\n+                                        };\n+                                }\n+\n+                                ReadOnlyCollectionPage<Flavor> results = new BasicReadOnlyCollectionPage<Flavor>(list, prepareGetNextPageAsync);\n+                                return results;\n+                            });\n+                };\n+\n+            return GetBaseUriAsync(cancellationToken)\n+                .Then(PrepareRequestAsyncFunc(HttpMethod.Get, template, parameters, cancellationToken))\n+                .Select(task => new ListFlavorsApiCall(CreateCustomApiCall(task.Result, HttpCompletionOption.ResponseContentRead, deserializeResult)));\n+        }\n+\n+        /// <inheritdoc/>\n+        public virtual Task<GetFlavorApiCall> PrepareGetFlavorAsync(FlavorId flavorId, CancellationToken cancellationToken)\n+        {\n+            throw new NotImplementedException();\n+        }\n+\n+        /// <inheritdoc/>\n+        public virtual Task<AddFlavorApiCall> PrepareAddFlavorAsync(FlavorData flavorData, CancellationToken cancellationToken)\n+        {\n+            UriTemplate template = new UriTemplate(\"flavors\");\n+            Dictionary<string, string> parameters = new Dictionary<string, string>();\n+\n+            Func<HttpResponseMessage, CancellationToken, Task<FlavorId>> deserializeResult =\n+                (responseMessage, innerCancellationToken) =>\n+                {\n+                    string absolutePath = responseMessage.Headers.Location.AbsolutePath;\n+                    int lastSlash = absolutePath.LastIndexOf('/');\n+                    return CompletedTask.FromResult(new FlavorId(absolutePath.Substring(lastSlash + 1)));\n+                };\n+\n+            return GetBaseUriAsync(cancellationToken)\n+                .Then(PrepareRequestAsyncFunc(HttpMethod.Post, template, parameters, flavorData, cancellationToken))\n+                .Select(task => new AddFlavorApiCall(CreateCustomApiCall(task.Result, HttpCompletionOption.ResponseContentRead, deserializeResult)));\n+        }\n+\n+        /// <inheritdoc/>\n+        public virtual Task<RemoveFlavorApiCall> PrepareRemoveFlavorAsync(FlavorId flavorId, CancellationToken cancellationToken)\n+        {\n+            throw new NotImplementedException();","path":"src/OpenStack.Net/OpenStack/Services/ContentDelivery/V1/ContentDeliveryClient.cs","position":272,"original_position":272,"commit_id":"f7f4357157f8c1d2db6ca6bd8f116734b04fed8c","original_commit_id":"f7f4357157f8c1d2db6ca6bd8f116734b04fed8c","user":{"login":"sharwell","id":1408396,"avatar_url":"https://avatars.githubusercontent.com/u/1408396?v=3","gravatar_id":"","url":"https://api.github.com/users/sharwell","html_url":"https://github.com/sharwell","followers_url":"https://api.github.com/users/sharwell/followers","following_url":"https://api.github.com/users/sharwell/following{/other_user}","gists_url":"https://api.github.com/users/sharwell/gists{/gist_id}","starred_url":"https://api.github.com/users/sharwell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sharwell/subscriptions","organizations_url":"https://api.github.com/users/sharwell/orgs","repos_url":"https://api.github.com/users/sharwell/repos","events_url":"https://api.github.com/users/sharwell/events{/privacy}","received_events_url":"https://api.github.com/users/sharwell/received_events","type":"User","site_admin":false},"body":":exclamation: This needs to be implemented.","created_at":"2015-02-20T23:57:34Z","updated_at":"2015-02-20T23:57:34Z","html_url":"https://github.com/openstacknetsdk/openstack.net/pull/475#discussion_r25113854","pull_request_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/pulls/475","_links":{"self":{"href":"https://api.github.com/repos/openstacknetsdk/openstack.net/pulls/comments/25113854"},"html":{"href":"https://github.com/openstacknetsdk/openstack.net/pull/475#discussion_r25113854"},"pull_request":{"href":"https://api.github.com/repos/openstacknetsdk/openstack.net/pulls/475"}}},"pull_request":{"url":"https://api.github.com/repos/openstacknetsdk/openstack.net/pulls/475","id":28950370,"html_url":"https://github.com/openstacknetsdk/openstack.net/pull/475","diff_url":"https://github.com/openstacknetsdk/openstack.net/pull/475.diff","patch_url":"https://github.com/openstacknetsdk/openstack.net/pull/475.patch","issue_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/issues/475","number":475,"state":"open","locked":false,"title":"OpenStack Content Delivery V1 support (SDK V2)","user":{"login":"sharwell","id":1408396,"avatar_url":"https://avatars.githubusercontent.com/u/1408396?v=3","gravatar_id":"","url":"https://api.github.com/users/sharwell","html_url":"https://github.com/sharwell","followers_url":"https://api.github.com/users/sharwell/followers","following_url":"https://api.github.com/users/sharwell/following{/other_user}","gists_url":"https://api.github.com/users/sharwell/gists{/gist_id}","starred_url":"https://api.github.com/users/sharwell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sharwell/subscriptions","organizations_url":"https://api.github.com/users/sharwell/orgs","repos_url":"https://api.github.com/users/sharwell/repos","events_url":"https://api.github.com/users/sharwell/events{/privacy}","received_events_url":"https://api.github.com/users/sharwell/received_events","type":"User","site_admin":false},"body":"# Work in Progress\r\n\r\nThis pull request adds support for the basic functionality of the OpenStack Content Delivery Service V1 to the V2 SDK.","created_at":"2015-02-09T19:47:22Z","updated_at":"2015-02-20T23:57:34Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1b9d65a0eab369ebe5243348e0fc782a82e73b2a","assignee":null,"milestone":{"url":"https://api.github.com/repos/openstacknetsdk/openstack.net/milestones/14","labels_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/milestones/14/labels","id":568810,"number":14,"title":"v2.0.0","description":"#### [Goals / Design Wiki Page](https://github.com/openstacknetsdk/openstack.net/wiki/V2.0)\r\n\r\n* Refactoring for consistency with common .NET development practices\r\n* Implement base providers for OpenStack (non-provider-specific) services, and use provider-specific services only when the base providers need to be extended\r\n* Relocate Rackspace-specific features to their own assembly","creator":{"login":"sharwell","id":1408396,"avatar_url":"https://avatars.githubusercontent.com/u/1408396?v=3","gravatar_id":"","url":"https://api.github.com/users/sharwell","html_url":"https://github.com/sharwell","followers_url":"https://api.github.com/users/sharwell/followers","following_url":"https://api.github.com/users/sharwell/following{/other_user}","gists_url":"https://api.github.com/users/sharwell/gists{/gist_id}","starred_url":"https://api.github.com/users/sharwell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sharwell/subscriptions","organizations_url":"https://api.github.com/users/sharwell/orgs","repos_url":"https://api.github.com/users/sharwell/repos","events_url":"https://api.github.com/users/sharwell/events{/privacy}","received_events_url":"https://api.github.com/users/sharwell/received_events","type":"User","site_admin":false},"open_issues":8,"closed_issues":13,"state":"open","created_at":"2014-02-13T19:33:01Z","updated_at":"2015-02-11T15:15:52Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/pulls/475/commits","review_comments_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/pulls/475/comments","review_comment_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/pulls/comments/{number}","comments_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/issues/475/comments","statuses_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/statuses/f7f4357157f8c1d2db6ca6bd8f116734b04fed8c","head":{"label":"sharwell:v2-content-delivery","ref":"v2-content-delivery","sha":"f7f4357157f8c1d2db6ca6bd8f116734b04fed8c","user":{"login":"sharwell","id":1408396,"avatar_url":"https://avatars.githubusercontent.com/u/1408396?v=3","gravatar_id":"","url":"https://api.github.com/users/sharwell","html_url":"https://github.com/sharwell","followers_url":"https://api.github.com/users/sharwell/followers","following_url":"https://api.github.com/users/sharwell/following{/other_user}","gists_url":"https://api.github.com/users/sharwell/gists{/gist_id}","starred_url":"https://api.github.com/users/sharwell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sharwell/subscriptions","organizations_url":"https://api.github.com/users/sharwell/orgs","repos_url":"https://api.github.com/users/sharwell/repos","events_url":"https://api.github.com/users/sharwell/events{/privacy}","received_events_url":"https://api.github.com/users/sharwell/received_events","type":"User","site_admin":false},"repo":{"id":9824003,"name":"openstack.net","full_name":"sharwell/openstack.net","owner":{"login":"sharwell","id":1408396,"avatar_url":"https://avatars.githubusercontent.com/u/1408396?v=3","gravatar_id":"","url":"https://api.github.com/users/sharwell","html_url":"https://github.com/sharwell","followers_url":"https://api.github.com/users/sharwell/followers","following_url":"https://api.github.com/users/sharwell/following{/other_user}","gists_url":"https://api.github.com/users/sharwell/gists{/gist_id}","starred_url":"https://api.github.com/users/sharwell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sharwell/subscriptions","organizations_url":"https://api.github.com/users/sharwell/orgs","repos_url":"https://api.github.com/users/sharwell/repos","events_url":"https://api.github.com/users/sharwell/events{/privacy}","received_events_url":"https://api.github.com/users/sharwell/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/sharwell/openstack.net","description":"An OpenStack Cloud SDK for Microsoft .NET","fork":true,"url":"https://api.github.com/repos/sharwell/openstack.net","forks_url":"https://api.github.com/repos/sharwell/openstack.net/forks","keys_url":"https://api.github.com/repos/sharwell/openstack.net/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sharwell/openstack.net/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sharwell/openstack.net/teams","hooks_url":"https://api.github.com/repos/sharwell/openstack.net/hooks","issue_events_url":"https://api.github.com/repos/sharwell/openstack.net/issues/events{/number}","events_url":"https://api.github.com/repos/sharwell/openstack.net/events","assignees_url":"https://api.github.com/repos/sharwell/openstack.net/assignees{/user}","branches_url":"https://api.github.com/repos/sharwell/openstack.net/branches{/branch}","tags_url":"https://api.github.com/repos/sharwell/openstack.net/tags","blobs_url":"https://api.github.com/repos/sharwell/openstack.net/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sharwell/openstack.net/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sharwell/openstack.net/git/refs{/sha}","trees_url":"https://api.github.com/repos/sharwell/openstack.net/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sharwell/openstack.net/statuses/{sha}","languages_url":"https://api.github.com/repos/sharwell/openstack.net/languages","stargazers_url":"https://api.github.com/repos/sharwell/openstack.net/stargazers","contributors_url":"https://api.github.com/repos/sharwell/openstack.net/contributors","subscribers_url":"https://api.github.com/repos/sharwell/openstack.net/subscribers","subscription_url":"https://api.github.com/repos/sharwell/openstack.net/subscription","commits_url":"https://api.github.com/repos/sharwell/openstack.net/commits{/sha}","git_commits_url":"https://api.github.com/repos/sharwell/openstack.net/git/commits{/sha}","comments_url":"https://api.github.com/repos/sharwell/openstack.net/comments{/number}","issue_comment_url":"https://api.github.com/repos/sharwell/openstack.net/issues/comments/{number}","contents_url":"https://api.github.com/repos/sharwell/openstack.net/contents/{+path}","compare_url":"https://api.github.com/repos/sharwell/openstack.net/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sharwell/openstack.net/merges","archive_url":"https://api.github.com/repos/sharwell/openstack.net/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sharwell/openstack.net/downloads","issues_url":"https://api.github.com/repos/sharwell/openstack.net/issues{/number}","pulls_url":"https://api.github.com/repos/sharwell/openstack.net/pulls{/number}","milestones_url":"https://api.github.com/repos/sharwell/openstack.net/milestones{/number}","notifications_url":"https://api.github.com/repos/sharwell/openstack.net/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sharwell/openstack.net/labels{/name}","releases_url":"https://api.github.com/repos/sharwell/openstack.net/releases{/id}","created_at":"2013-05-02T22:33:40Z","updated_at":"2015-02-11T15:18:34Z","pushed_at":"2015-02-13T19:15:38Z","git_url":"git://github.com/sharwell/openstack.net.git","ssh_url":"git@github.com:sharwell/openstack.net.git","clone_url":"https://github.com/sharwell/openstack.net.git","svn_url":"https://github.com/sharwell/openstack.net","homepage":"http://www.openstacknetsdk.org","size":38549,"stargazers_count":1,"watchers_count":1,"language":"C#","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":0,"forks":2,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"openstacknetsdk:master","ref":"master","sha":"699d90c9f5da6c07c7d2c3e1f077e16b8349ee19","user":{"login":"openstacknetsdk","id":4265034,"avatar_url":"https://avatars.githubusercontent.com/u/4265034?v=3","gravatar_id":"","url":"https://api.github.com/users/openstacknetsdk","html_url":"https://github.com/openstacknetsdk","followers_url":"https://api.github.com/users/openstacknetsdk/followers","following_url":"https://api.github.com/users/openstacknetsdk/following{/other_user}","gists_url":"https://api.github.com/users/openstacknetsdk/gists{/gist_id}","starred_url":"https://api.github.com/users/openstacknetsdk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openstacknetsdk/subscriptions","organizations_url":"https://api.github.com/users/openstacknetsdk/orgs","repos_url":"https://api.github.com/users/openstacknetsdk/repos","events_url":"https://api.github.com/users/openstacknetsdk/events{/privacy}","received_events_url":"https://api.github.com/users/openstacknetsdk/received_events","type":"Organization","site_admin":false},"repo":{"id":6279501,"name":"openstack.net","full_name":"openstacknetsdk/openstack.net","owner":{"login":"openstacknetsdk","id":4265034,"avatar_url":"https://avatars.githubusercontent.com/u/4265034?v=3","gravatar_id":"","url":"https://api.github.com/users/openstacknetsdk","html_url":"https://github.com/openstacknetsdk","followers_url":"https://api.github.com/users/openstacknetsdk/followers","following_url":"https://api.github.com/users/openstacknetsdk/following{/other_user}","gists_url":"https://api.github.com/users/openstacknetsdk/gists{/gist_id}","starred_url":"https://api.github.com/users/openstacknetsdk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openstacknetsdk/subscriptions","organizations_url":"https://api.github.com/users/openstacknetsdk/orgs","repos_url":"https://api.github.com/users/openstacknetsdk/repos","events_url":"https://api.github.com/users/openstacknetsdk/events{/privacy}","received_events_url":"https://api.github.com/users/openstacknetsdk/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/openstacknetsdk/openstack.net","description":"An OpenStack Cloud SDK for Microsoft .NET","fork":false,"url":"https://api.github.com/repos/openstacknetsdk/openstack.net","forks_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/forks","keys_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/keys{/key_id}","collaborators_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/teams","hooks_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/hooks","issue_events_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/issues/events{/number}","events_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/events","assignees_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/assignees{/user}","branches_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/branches{/branch}","tags_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/tags","blobs_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/git/refs{/sha}","trees_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/git/trees{/sha}","statuses_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/statuses/{sha}","languages_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/languages","stargazers_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/stargazers","contributors_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/contributors","subscribers_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/subscribers","subscription_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/subscription","commits_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/commits{/sha}","git_commits_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/git/commits{/sha}","comments_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/comments{/number}","issue_comment_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/issues/comments/{number}","contents_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/contents/{+path}","compare_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/compare/{base}...{head}","merges_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/merges","archive_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/downloads","issues_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/issues{/number}","pulls_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/pulls{/number}","milestones_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/milestones{/number}","notifications_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/labels{/name}","releases_url":"https://api.github.com/repos/openstacknetsdk/openstack.net/releases{/id}","created_at":"2012-10-18T14:04:12Z","updated_at":"2015-02-11T21:14:56Z","pushed_at":"2015-02-11T21:14:55Z","git_url":"git://github.com/openstacknetsdk/openstack.net.git","ssh_url":"git@github.com:openstacknetsdk/openstack.net.git","clone_url":"https://github.com/openstacknetsdk/openstack.net.git","svn_url":"https://github.com/openstacknetsdk/openstack.net","homepage":"http://www.openstacknetsdk.org","size":36921,"stargazers_count":47,"watchers_count":47,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":76,"mirror_url":null,"open_issues_count":64,"forks":76,"open_issues":64,"watchers":47,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/openstacknetsdk/openstack.net/pulls/475"},"html":{"href":"https://github.com/openstacknetsdk/openstack.net/pull/475"},"issue":{"href":"https://api.github.com/repos/openstacknetsdk/openstack.net/issues/475"},"comments":{"href":"https://api.github.com/repos/openstacknetsdk/openstack.net/issues/475/comments"},"review_comments":{"href":"https://api.github.com/repos/openstacknetsdk/openstack.net/pulls/475/comments"},"review_comment":{"href":"https://api.github.com/repos/openstacknetsdk/openstack.net/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/openstacknetsdk/openstack.net/pulls/475/commits"},"statuses":{"href":"https://api.github.com/repos/openstacknetsdk/openstack.net/statuses/f7f4357157f8c1d2db6ca6bd8f116734b04fed8c"}}}}