loxo-cli 0.2.2__tar.gz → 0.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/CHANGELOG.md +11 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/PKG-INFO +1 -1
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/pyproject.toml +1 -1
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/commands/activities.py +6 -3
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_cmd_activities.py +25 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/uv.lock +1 -1
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/.github/workflows/ci.yml +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/.github/workflows/publish.yml +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/.gitignore +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/LICENSE +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/README.md +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/__init__.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/__main__.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/client.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/commands/__init__.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/commands/_app.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/commands/_helpers.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/commands/api.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/commands/candidates.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/commands/companies.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/commands/configure.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/commands/deals.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/commands/jobs.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/commands/people.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/commands/ref.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/commands/webhooks.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/config.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/errors.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/models/__init__.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/models/base.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/models/candidate.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/models/company.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/models/deal.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/models/job.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/models/person.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/models/reference.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/models/webhook.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/output.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/src/loxo_cli/pagination.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/conftest.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_app_state.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_client.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_cmd_api.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_cmd_candidates.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_cmd_companies.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_cmd_configure.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_cmd_deals.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_cmd_jobs.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_cmd_people.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_cmd_ref.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_cmd_webhooks.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_config.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_error_exit_codes.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_errors.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_helpers.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_models.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_output.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_pagination.py +0 -0
- {loxo_cli-0.2.2 → loxo_cli-0.2.3}/tests/test_smoke.py +0 -0
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.2.3]
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- `loxo activities list` drops the `--job-id` filter and gains `--company-id`.
|
|
8
|
+
Loxo's `person_events` endpoint rejects `job_id` as a query parameter (HTTP
|
|
9
|
+
422 `Invalid parameters: [:job_id]`), so the flag never worked. `person_id`
|
|
10
|
+
and `company_id` are the only server-side filters the endpoint accepts.
|
|
11
|
+
(`activities add --job-id` is unaffected — there `job_id` is a request-body
|
|
12
|
+
field, not a query parameter.)
|
|
13
|
+
|
|
3
14
|
## [0.2.2]
|
|
4
15
|
|
|
5
16
|
### Fixed
|
|
@@ -16,16 +16,19 @@ activities_app = typer.Typer(
|
|
|
16
16
|
def list_activities(
|
|
17
17
|
ctx: typer.Context,
|
|
18
18
|
person_id: Optional[int] = typer.Option(None, "--person-id"),
|
|
19
|
-
|
|
19
|
+
company_id: Optional[int] = typer.Option(None, "--company-id"),
|
|
20
20
|
all_pages: bool = typer.Option(False, "--all"),
|
|
21
21
|
per_page: int = typer.Option(50, "--per-page"),
|
|
22
22
|
) -> None:
|
|
23
|
+
# Loxo's person_events endpoint only accepts person_id / company_id as
|
|
24
|
+
# server-side filters. job_id is not a valid query param (returns 422), so
|
|
25
|
+
# it is intentionally not exposed here — filter by person or company instead.
|
|
23
26
|
state = ctx.obj
|
|
24
27
|
params: dict = {}
|
|
25
28
|
if person_id is not None:
|
|
26
29
|
params["person_id"] = person_id
|
|
27
|
-
if
|
|
28
|
-
params["
|
|
30
|
+
if company_id is not None:
|
|
31
|
+
params["company_id"] = company_id
|
|
29
32
|
client = state.client()
|
|
30
33
|
if all_pages:
|
|
31
34
|
rows = list(
|
|
@@ -21,6 +21,31 @@ def test_activities_list():
|
|
|
21
21
|
assert json.loads(result.stdout)[0]["notes"] == "called"
|
|
22
22
|
|
|
23
23
|
|
|
24
|
+
@respx.mock
|
|
25
|
+
def test_activities_list_filters_by_person_and_company():
|
|
26
|
+
route = respx.get("https://app.loxo.co/api/acme/person_events").mock(
|
|
27
|
+
return_value=httpx.Response(200, json={"scroll_id": None, "person_events": []})
|
|
28
|
+
)
|
|
29
|
+
result = runner.invoke(
|
|
30
|
+
app,
|
|
31
|
+
["--json", "activities", "list", "--person-id", "50", "--company-id", "7"],
|
|
32
|
+
env=ENV,
|
|
33
|
+
)
|
|
34
|
+
assert result.exit_code == 0
|
|
35
|
+
assert dict(route.calls.last.request.url.params) == {
|
|
36
|
+
"person_id": "50",
|
|
37
|
+
"company_id": "7",
|
|
38
|
+
"per_page": "50",
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def test_activities_list_has_no_job_id_option():
|
|
43
|
+
# job_id is not a valid person_events query param (Loxo returns 422), so the
|
|
44
|
+
# list command must not advertise a --job-id filter.
|
|
45
|
+
result = runner.invoke(app, ["activities", "list", "--help"], env=ENV)
|
|
46
|
+
assert "--job-id" not in result.stdout
|
|
47
|
+
|
|
48
|
+
|
|
24
49
|
@respx.mock
|
|
25
50
|
def test_activities_add_wraps_person_event():
|
|
26
51
|
captured = {}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|