Skip to content

Commit e67e566

Browse files
committed
Add can_create_x lookup
1 parent e7101d1 commit e67e566

1 file changed

Lines changed: 28 additions & 1 deletion

File tree

src/openhound_github/lookup.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from functools import lru_cache
22

3+
import duckdb
34
from duckdb import DuckDBPyConnection
4-
from openhound.core.lookup import LookupManager
5+
from openhound.core.lookup import LookupManager, logger
56

67

78
class GithubLookup(LookupManager):
@@ -10,6 +11,20 @@ def __init__(self, client: DuckDBPyConnection, schema: str = "github"):
1011
self.schema = schema
1112
self.client = client
1213

14+
def _find_single_row(self, *args):
15+
try:
16+
self.client.execute(*args)
17+
result = self.client.fetchone()
18+
return result if result else None
19+
20+
except duckdb.CatalogException as err:
21+
logger.error("DuckDB lookup failed, missing table: %s", err)
22+
return None
23+
24+
except duckdb.Error as err:
25+
logger.error("DuckDB lookup query failed: %s", err)
26+
return None
27+
1328
@lru_cache
1429
def org_id(self) -> str | None:
1530
res = self._find_single_object(
@@ -124,6 +139,18 @@ def role_can_create_branch(self, role_id: str, repository_node_id: str):
124139
[role_id, repository_node_id],
125140
)
126141

142+
@lru_cache
143+
def members_can_create_repository(self, org_login: str):
144+
return self._find_single_row(
145+
f"""SELECT
146+
members_can_create_repositories,
147+
members_can_create_public_repositories,
148+
members_can_create_internal_repositories,
149+
members_can_create_private_repositories
150+
FROM {self.schema}.organizations WHERE login = ?""",
151+
[org_login],
152+
)
153+
127154
@lru_cache
128155
def bypass_pull_request_allowances(self, actor_id: str):
129156
"""Returns the node_ids of users/teams that bypass PR review requirements on branches in a repository (GH_BypassPullRequestAllowances)"""

0 commit comments

Comments
 (0)