Skip to content

Commit 782acae

Browse files
author
Kenneth Reitz
committed
datetypes
1 parent 6f99bf2 commit 782acae

File tree

1 file changed

+118
-0
lines changed

1 file changed

+118
-0
lines changed

github3/structures.py

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
# -*- coding: utf-8 -*-
2+
3+
"""
4+
github3.structures
5+
~~~~~~~~~~~~~~~~~
6+
7+
This module contains the specific github data types.
8+
"""
9+
10+
11+
class KeyedListResource(object):
12+
"""docstring for ListResource"""
13+
14+
def __init__(self, items=None):
15+
super(KeyedListResource, self).__init__()
16+
17+
self._h = None
18+
self._items = items or list()
19+
self._obj = None
20+
21+
def __repr__(self):
22+
return repr(self._items)
23+
24+
def __iter__(self):
25+
for item in self._items:
26+
yield item
27+
28+
def __getitem__(self, key):
29+
30+
# Support index operators.
31+
if isinstance(key, int):
32+
if abs(key) <= len(self._items):
33+
return self._items[key]
34+
35+
v = self.get(key)
36+
37+
if v is None:
38+
raise KeyError(key)
39+
40+
return v
41+
42+
def add(self, *args, **kwargs):
43+
44+
try:
45+
return self[0].new(*args, **kwargs)
46+
except IndexError:
47+
o = self._obj()
48+
o._h = self._h
49+
50+
return o.new(*args, **kwargs)
51+
52+
53+
def remove(self, key):
54+
if hasattr(self[0], 'delete'):
55+
return self[key].delete()
56+
57+
def get(self, key):
58+
for item in self:
59+
if key in item._ids:
60+
return item
61+
62+
def __delitem__(self, key):
63+
self[key].delete()
64+
65+
66+
67+
# class ProcessListResource(KeyedListResource):
68+
# """KeyedListResource with basic filtering for process types."""
69+
70+
# def __init__(self, *args, **kwargs):
71+
# super(ProcessListResource, self).__init__(*args, **kwargs)
72+
73+
# def __getitem__(self, key):
74+
75+
# try:
76+
# return super(ProcessListResource, self).__getitem__(key)
77+
# except KeyError, why:
78+
79+
# c = [p for p in self._items if key == p.type]
80+
81+
# if c:
82+
# return ProcessTypeListResource(items=c)
83+
# else:
84+
# raise why
85+
86+
87+
# class ProcessTypeListResource(ProcessListResource):
88+
# """KeyedListResource with basic filtering for process types."""
89+
90+
# def __init__(self, *args, **kwargs):
91+
92+
# super(ProcessTypeListResource, self).__init__(*args, **kwargs)
93+
94+
# def scale(self, quantity):
95+
# return self[0].scale(quantity)
96+
97+
98+
99+
# class SSHKeyListResource(KeyedListResource):
100+
# """KeyedListResource with clearing for ssh keys."""
101+
102+
# def __init__(self, *args, **kwargs):
103+
104+
# super(SSHKeyListResource, self).__init__(*args, **kwargs)
105+
106+
# def clear(self):
107+
# """Removes all SSH keys from a user's system."""
108+
109+
# r = self._h._http_resource(
110+
# method='DELETE',
111+
# resource=('user', 'keys'),
112+
# )
113+
114+
# return r.ok
115+
116+
117+
118+

0 commit comments

Comments
 (0)