Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
90 lines (80 loc) · 3.09 KB

File metadata and controls

90 lines (80 loc) · 3.09 KB
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
//-----------------------------------------------------------------------
// <copyright file="Api.cs" company="TemporalCohesion.co.uk">
// Copyright 2010 - Present Stuart Grassie
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </copyright>
//----------------------------------------------------------------------
namespace GitHubAPI
{
using Exceptions;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
/// <summary>
/// Base class for specific API classes.
/// </summary>
public abstract class ApiBase
{
public string BaseUrl;
protected IAuthenticator Authenticator;
private int _rateLimitRemaining;
protected ApiBase(){}
/// <summary>
/// Instantiattes a new instance of the <see cref="Api"/> class.
/// </summary>
/// <param name="baseUrl">The base url for GitHub's API.</param>
protected ApiBase(string baseUrl)
{
BaseUrl = baseUrl;
}
/// <summary>
/// Gets an integer which holds the API rate limit.
/// </summary>
public virtual int RateLimit
{
get; private set;
}
/// <summary>
/// Gets an integer which holds the remaining count of API requests calls
/// </summary>
public virtual int RateLimitRemaining
{
get { return _rateLimitRemaining; }
private set
{
_rateLimitRemaining = value;
Debug.WriteLine(string.Format("Current remaining rate limit: {0}", _rateLimitRemaining));
if (_rateLimitRemaining <= 0)
throw new GitHubResponseException(string.Format("Github API rate limit ({0}) has been reached.", RateLimit));
}
}
protected virtual void CheckRateLimit(IEnumerable<Parameter> headers)
{
var rateLimits = headers.AsQueryable().Where(x => x.Name.StartsWith("X-RateLimit"));
//these aren't there in the case of an access error
var actualRateLimit = rateLimits.SingleOrDefault(x => x.Name.EndsWith("-Limit"));
if (actualRateLimit != null)
{
RateLimit = Convert.ToInt32(actualRateLimit.Value);
}
var remainingRateLimit = rateLimits.SingleOrDefault(x => x.Name.EndsWith("-Remaining"));
if (remainingRateLimit != null)
{
RateLimitRemaining = Convert.ToInt32(remainingRateLimit.Value);
}
}
}
}
Morty Proxy This is a proxified and sanitized view of the page, visit original site.