Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@

All notable changes to this project are documented here. Release ranges link to the GitHub compare view. Tag names follow the repository (`v1.0.x` through `v1.0.3`, then `1.1.0` onward).

---

## TODO:
1. `sync_repo` endpoints:
- https://docs.gitcode.com/en/docs/apis/get-api-v-5-repos-owner-repo-sync-repo
- https://docs.gitcode.com/en/docs/apis/put-api-v-5-repos-owner-repo-sync-repo

---

## [1.3.2](https://github.com/Trenza1ore/GitCode-API/releases/tag/1.3.2) — 2026-06-14

Changes since `1.3.1`…`1.3.2`.
Expand Down
196 changes: 178 additions & 18 deletions gitcode_api/resources/account/orgs_resource_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,16 +77,43 @@ def list_repos(
"""

@abstractmethod
def create_repo(self, *, org: str, name: str, **payload) -> Repository:
def create_repo(
self,
*,
org: str,
name: str,
description: Optional[str] = None,
homepage: Optional[str] = None,
has_issues: Optional[bool] = None,
has_wiki: Optional[bool] = None,
can_comment: Optional[bool] = None,
public: Optional[int] = None,
private: Optional[bool] = None,
auto_init: Optional[bool] = None,
gitignore_template: Optional[str] = None,
license_template: Optional[str] = None,
path: Optional[str] = None,
default_branch: Optional[str] = None,
**kwargs,
) -> Repository:
"""Create an organization repository.

Additional payload fields match the organization repository creation
endpoint, such as ``description``, ``homepage``, ``private``,
``public``, ``auto_init``, and ``default_branch``.

:param org: Organization path or login.
:param name: Repository name.
:param payload: Additional repository creation fields.
:param description: Repository description.
:param homepage: Homepage URL.
:param has_issues: Allow issues to be created. Default: ``True``.
:param has_wiki: Provide wiki. Default: ``True``.
:param can_comment: Allow users to comment on repositories. Default: ``True``.
:param public: Open source type: ``0`` (private), ``1`` (external), ``2`` (internal).
Mutually exclusive with *private*.
:param private: Repository visibility. Mutually exclusive with *public*.
:param auto_init: Initialize with a README. Default: ``False``.
:param gitignore_template: ``.gitignore`` template name.
:param license_template: License template name.
:param path: Repository path.
:param default_branch: Default branch name. Default: ``main``.
:param kwargs: Additional arguments forwarded directly in request.
:returns: Created repository metadata.
"""

Expand Down Expand Up @@ -184,11 +211,26 @@ def update_enterprise_member(self, *, enterprise: str, username: str, role: str)
"""

@abstractmethod
def update(self, *, org: str, **payload) -> Organization:
def update(
self,
*,
org: str,
name: Optional[str] = None,
email: Optional[str] = None,
location: Optional[str] = None,
description: Optional[str] = None,
html_url: Optional[str] = None,
**kwargs,
) -> Organization:
"""Update organization metadata.

:param org: Organization path or login.
:param payload: Updatable fields such as ``name``, ``email``, or ``description``.
:param name: Organization name.
:param email: Organization email.
:param location: Organization location.
:param description: Organization description.
:param html_url: Organization site URL.
:param kwargs: Additional arguments forwarded directly in request.
:returns: Updated organization details.
"""

Expand Down Expand Up @@ -239,9 +281,46 @@ def list_repos(
params={"type": type, "page": page, "per_page": per_page},
)

def create_repo(self, *, org: str, name: str, **payload) -> Repository:
payload["name"] = name
return self._model("POST", self._client._path("orgs", org, "repos"), Repository, json=payload)
def create_repo(
self,
*,
org: str,
name: str,
description: Optional[str] = None,
homepage: Optional[str] = None,
has_issues: Optional[bool] = None,
has_wiki: Optional[bool] = None,
can_comment: Optional[bool] = None,
public: Optional[int] = None,
private: Optional[bool] = None,
auto_init: Optional[bool] = None,
gitignore_template: Optional[str] = None,
license_template: Optional[str] = None,
path: Optional[str] = None,
default_branch: Optional[str] = None,
**kwargs,
) -> Repository:
return self._model(
"POST",
self._client._path("orgs", org, "repos"),
Repository,
json={
"name": name,
"description": description,
"homepage": homepage,
"has_issues": has_issues,
"has_wiki": has_wiki,
"can_comment": can_comment,
"public": public,
"private": private,
"auto_init": auto_init,
"gitignore_template": gitignore_template,
"license_template": license_template,
"path": path,
"default_branch": default_branch,
**kwargs,
},
)

def get_enterprise_member(self, *, enterprise: str, username: str) -> EnterpriseMember:
return self._model("GET", self._client._path("enterprises", enterprise, "members", username), EnterpriseMember)
Expand Down Expand Up @@ -302,8 +381,30 @@ def update_enterprise_member(self, *, enterprise: str, username: str, role: str)
json={"role": role},
)

def update(self, *, org: str, **payload) -> Organization:
return self._model("PATCH", self._client._path("orgs", org), Organization, json=payload)
def update(
self,
*,
org: str,
name: Optional[str] = None,
email: Optional[str] = None,
location: Optional[str] = None,
description: Optional[str] = None,
html_url: Optional[str] = None,
**kwargs,
) -> Organization:
return self._model(
"PATCH",
self._client._path("orgs", org),
Organization,
json={
"name": name,
"email": email,
"location": location,
"description": description,
"html_url": html_url,
**kwargs,
},
)

def leave(self, *, org: str) -> None:
self._request("DELETE", self._client._path("user", "memberships", "orgs", org))
Expand Down Expand Up @@ -351,9 +452,46 @@ async def list_repos(
params={"type": type, "page": page, "per_page": per_page},
)

async def create_repo(self, *, org: str, name: str, **payload) -> Repository:
payload["name"] = name
return await self._model("POST", self._client._path("orgs", org, "repos"), Repository, json=payload)
async def create_repo(
self,
*,
org: str,
name: str,
description: Optional[str] = None,
homepage: Optional[str] = None,
has_issues: Optional[bool] = None,
has_wiki: Optional[bool] = None,
can_comment: Optional[bool] = None,
public: Optional[int] = None,
private: Optional[bool] = None,
auto_init: Optional[bool] = None,
gitignore_template: Optional[str] = None,
license_template: Optional[str] = None,
path: Optional[str] = None,
default_branch: Optional[str] = None,
**kwargs,
) -> Repository:
return await self._model(
"POST",
self._client._path("orgs", org, "repos"),
Repository,
json={
"name": name,
"description": description,
"homepage": homepage,
"has_issues": has_issues,
"has_wiki": has_wiki,
"can_comment": can_comment,
"public": public,
"private": private,
"auto_init": auto_init,
"gitignore_template": gitignore_template,
"license_template": license_template,
"path": path,
"default_branch": default_branch,
**kwargs,
},
)

async def get_enterprise_member(self, *, enterprise: str, username: str) -> EnterpriseMember:
return await self._model(
Expand Down Expand Up @@ -415,8 +553,30 @@ async def update_enterprise_member(self, *, enterprise: str, username: str, role
json={"role": role},
)

async def update(self, *, org: str, **payload) -> Organization:
return await self._model("PATCH", self._client._path("orgs", org), Organization, json=payload)
async def update(
self,
*,
org: str,
name: Optional[str] = None,
email: Optional[str] = None,
location: Optional[str] = None,
description: Optional[str] = None,
html_url: Optional[str] = None,
**kwargs,
) -> Organization:
return await self._model(
"PATCH",
self._client._path("orgs", org),
Organization,
json={
"name": name,
"email": email,
"location": location,
"description": description,
"html_url": html_url,
**kwargs,
},
)

async def leave(self, *, org: str) -> None:
await self._request("DELETE", self._client._path("user", "memberships", "orgs", org))
Original file line number Diff line number Diff line change
Expand Up @@ -513,7 +513,7 @@ def create(
"security_hole": security_hole,
"template_path": template_path,
**kwargs,
}
},
)

def update(
Expand Down
32 changes: 25 additions & 7 deletions gitcode_api/resources/collaboration/pulls_resource_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -415,15 +415,21 @@ def list_operation_logs(

@abstractmethod
def request_test(
self, *, number: Union[int, str], owner: Optional[str] = None, repo: Optional[str] = None, **payload
self,
*,
number: Union[int, str],
owner: Optional[str] = None,
repo: Optional[str] = None,
force: Optional[bool] = None,
**kwargs,
) -> None:
"""Request testing for a pull request.

:param number: Pull request number.
:param owner: Repository owner path. Uses the client default when omitted.
:param repo: Repository path. Uses the client default when omitted.
:param payload: JSON fields required by the test request endpoint.
:returns: Test request result.
:param force: Force the test to pass (default ``False``), only effective for administrators.
:param kwargs: Additional arguments forwarded directly in request.
"""

@abstractmethod
Expand Down Expand Up @@ -919,12 +925,18 @@ def list_operation_logs(
return [as_model(item, PullRequestOperationLog) for item in data]

def request_test(
self, *, number: Union[int, str], owner: Optional[str] = None, repo: Optional[str] = None, **payload
self,
*,
number: Union[int, str],
owner: Optional[str] = None,
repo: Optional[str] = None,
force: Optional[bool] = None,
**kwargs,
) -> None:
self._request(
"POST",
self._client._repo_path("pulls", number, "test", owner=owner, repo=repo),
json=payload,
json={"force": force, **kwargs},
)

def update_testers(
Expand Down Expand Up @@ -1375,12 +1387,18 @@ async def list_operation_logs(
return [as_model(item, PullRequestOperationLog) for item in data]

async def request_test(
self, *, number: Union[int, str], owner: Optional[str] = None, repo: Optional[str] = None, **payload
self,
*,
number: Union[int, str],
owner: Optional[str] = None,
repo: Optional[str] = None,
force: Optional[bool] = None,
**kwargs,
) -> None:
await self._request(
"POST",
self._client._repo_path("pulls", number, "test", owner=owner, repo=repo),
json=payload,
json={"force": force, **kwargs},
)

async def update_testers(
Expand Down
Loading
Loading