1+ import click
2+ import requests
3+ from tabulate import tabulate
4+
5+ class github :
6+ def __init__ (self ,ghf ):
7+ self .ghf = ghf
8+
9+ # def repos(self,org):
10+ # if self.ghf.debug: click.echo("org:"+org+" token:"+self.ghf.token)
11+ # url='https://api.github.com/orgs/'+org+'/repos'
12+ # headers=self.get_auth_header()
13+ # data=''
14+ # r = requests.get(url, headers=headers, data=data)
15+ # fields = ['full_name']
16+ # if len(self.ghf.fields) > 0:
17+ # fields = self.ghf.fields
18+ # if self.ghf.profile:
19+ # self.profile_keys(r.json())
20+ # else:
21+ # self.print_object_array_with_fields(r.json(),fields)
22+
23+ def repos (self ,org ):
24+ url = 'https://api.github.com/orgs/' + org + '/repos'
25+ fields = ['full_name' ]
26+ headers = self .get_auth_header ()
27+ self .make_github_get_request (fields ,url ,headers )
28+
29+
30+ def make_github_get_request (self ,default_fields ,url ,headers ,data = '' ):
31+ if self .ghf .debug : click .echo ("url:" + url + " token:" + self .ghf .token + " fields:" + "," .join (default_fields ))
32+ r = requests .get (url , headers = headers , data = data )
33+ fields = default_fields
34+ if len (self .ghf .fields ) > 0 :
35+ fields = self .ghf .fields
36+ table = []
37+ if self .ghf .profile :
38+ (fields ,table ) = self .get_profile_table (r .json ())
39+ else :
40+ table = self .get_table_from_object_array_with_fields (fields ,r .json ())
41+ self .print_table (fields ,table )
42+
43+ def print_table (self , field_names , table ):
44+ if self .ghf .export_csv :
45+ separator = self .ghf .csv_separator
46+ if self .ghf .print_header_row :
47+ click .echo (separator .join (field_names ))
48+ for entry in table :
49+ click .echo (separator .join (entry ))
50+ else :
51+ if self .ghf .print_header_row :
52+ click .echo (tabulate (table , field_names , tablefmt = "simple" ))
53+ else :
54+ click .echo (tabulate (table , tablefmt = "simple" ))
55+
56+ def test_post (self ,url ,headers ,data ):
57+ r = requests .post (url , headers = headers , data = data )
58+ if r .status_code == 201 :
59+ click .echo (r .json ())
60+ elif r .status_code == 401 :
61+ click .echo ("Error:" + r .json ()['message' ])
62+ else :
63+ click .echo ('status:' + str (r .status_code ))
64+ click .echo (r .text )
65+
66+ def test_get (self ,url ,headers ,data ):
67+ r = requests .get (url , headers = headers , data = data )
68+ if r .status_code == 201 :
69+ click .echo (r .json ())
70+ elif r .status_code == 401 :
71+ click .echo ("Error:" + r .json ()['message' ])
72+ else :
73+ click .echo ('status:' + str (r .status_code ))
74+ click .echo (r .text )
75+
76+
77+ def get_auth_header (self ):
78+ headers = {'Authorization' : 'token ' + self .ghf .token }
79+ return headers
80+
81+
82+
83+ def get_profile_table (self ,json ):
84+ outter_key_hash = {}
85+ inner_key_hash = {}
86+ if type (json ) == type ([]):
87+ for item in json :
88+ if type (item ) == type (u'' ):
89+ outter_key_hash [item ] = 1 if item not in outter_key_hash else outter_key_hash [item ] + 1
90+ if type (item ) == type ({}):
91+ for inner_item in item :
92+ if type (inner_item ) == type (u'' ):
93+ inner_key_hash [inner_item ] = 1 if inner_item not in inner_key_hash else inner_key_hash [inner_item ] + 1
94+ # elif type(json) == type({}):
95+ # None
96+ table = []
97+ for key , value in outter_key_hash .items ():
98+ table .append (['level1' ,key ,str (value )])
99+ for key , value in inner_key_hash .items ():
100+ table .append (['level2' ,key ,str (value )])
101+ field_names = ['level' , 'name' ,'count' ]
102+ table = sorted (table , key = lambda key : key [1 ])
103+ return (field_names ,table )
104+ # click.echo(tabulate(table, field_names, tablefmt="simple"))
105+
106+ def get_table_from_object_array_with_fields (self ,fields ,json ):
107+ table = []
108+ if type (json ) == type ([]):
109+ for item in json :
110+ if type (item ) == type ({}):
111+ row = []
112+ for field in fields :
113+ if field in item :
114+ row .append (item [field ])
115+ else :
116+ row .append ('' )
117+ table .append (row )
118+ headers = fields
119+ return table
120+ # click.echo(tabulate(table, headers, tablefmt="simple"))
121+
122+
123+ # >>> js = ['name1', 'name2', {'iname1':11,'iname2':12}]
124+ # >>> for item in js:
125+ # ... print type(item)
126+ # ...
127+ # <type 'str'>
128+ # <type 'str'>
129+ # <type 'dict'>
0 commit comments