fragment-python 0.1.1__py3-none-any.whl

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.
Files changed (45) hide show
  1. fragment/__init__.py +0 -0
  2. fragment/client/__init__.py +1 -0
  3. fragment/client/async_client.py +67 -0
  4. fragment/codegen/__init__.py +0 -0
  5. fragment/codegen/helpers.py +51 -0
  6. fragment/codegen/main.py +64 -0
  7. fragment/codegen/plugins/__init__.py +0 -0
  8. fragment/codegen/plugins/generate_client_method.py +62 -0
  9. fragment/codegen/plugins/get_file_comment.py +18 -0
  10. fragment/exceptions.py +12 -0
  11. fragment/logger.py +6 -0
  12. fragment/sdk/__init__.py +478 -0
  13. fragment/sdk/add_ledger_entry.py +54 -0
  14. fragment/sdk/add_ledger_entry_runtime.py +54 -0
  15. fragment/sdk/async_client.py +69 -0
  16. fragment/sdk/base_model.py +29 -0
  17. fragment/sdk/client.py +1071 -0
  18. fragment/sdk/create_custom_link.py +40 -0
  19. fragment/sdk/create_ledger.py +49 -0
  20. fragment/sdk/enums.py +263 -0
  21. fragment/sdk/get_ledger.py +23 -0
  22. fragment/sdk/get_ledger_account_balance.py +23 -0
  23. fragment/sdk/get_ledger_account_lines.py +47 -0
  24. fragment/sdk/get_ledger_entry.py +41 -0
  25. fragment/sdk/get_schema.py +28 -0
  26. fragment/sdk/get_workspace.py +16 -0
  27. fragment/sdk/input_types.py +482 -0
  28. fragment/sdk/list_ledger_account_balances.py +53 -0
  29. fragment/sdk/list_ledger_accounts.py +50 -0
  30. fragment/sdk/list_ledger_entries.py +58 -0
  31. fragment/sdk/list_ledger_entry_group_balances.py +57 -0
  32. fragment/sdk/list_multi_currency_ledger_account_balances.py +130 -0
  33. fragment/sdk/reconcile_tx.py +55 -0
  34. fragment/sdk/reconcile_tx_runtime.py +55 -0
  35. fragment/sdk/store_schema.py +45 -0
  36. fragment/sdk/sync_custom_accounts.py +53 -0
  37. fragment/sdk/sync_custom_txs.py +44 -0
  38. fragment/sdk/update_ledger.py +39 -0
  39. fragment/sdk/update_ledger_entry.py +77 -0
  40. fragment/std_queries/queries.graphql +656 -0
  41. fragment_python-0.1.1.dist-info/LICENSE +201 -0
  42. fragment_python-0.1.1.dist-info/METADATA +142 -0
  43. fragment_python-0.1.1.dist-info/RECORD +45 -0
  44. fragment_python-0.1.1.dist-info/WHEEL +4 -0
  45. fragment_python-0.1.1.dist-info/entry_points.txt +3 -0
fragment/sdk/client.py ADDED
@@ -0,0 +1,1071 @@
1
+ # Generated by fragment (with the help of ariadne-codegen)
2
+ # Source: queries/
3
+
4
+ from typing import Any, Dict, List, Optional
5
+
6
+ from .add_ledger_entry import AddLedgerEntry
7
+ from .add_ledger_entry_runtime import AddLedgerEntryRuntime
8
+ from .async_client import AsyncFragmentClient
9
+ from .create_custom_link import CreateCustomLink
10
+ from .create_ledger import CreateLedger
11
+ from .enums import ReadBalanceConsistencyMode
12
+ from .get_ledger import GetLedger
13
+ from .get_ledger_account_balance import GetLedgerAccountBalance
14
+ from .get_ledger_account_lines import GetLedgerAccountLines
15
+ from .get_ledger_entry import GetLedgerEntry
16
+ from .get_schema import GetSchema
17
+ from .get_workspace import GetWorkspace
18
+ from .input_types import (
19
+ CreateLedgerInput,
20
+ CurrencyMatchInput,
21
+ CustomAccountInput,
22
+ CustomTxInput,
23
+ LedgerEntriesFilterSet,
24
+ LedgerEntryGroupBalanceFilterSet,
25
+ LedgerEntryGroupInput,
26
+ LedgerEntryTagInput,
27
+ LedgerLineInput,
28
+ LedgerLinesFilterSet,
29
+ SchemaInput,
30
+ UpdateLedgerEntryInput,
31
+ UpdateLedgerInput,
32
+ )
33
+ from .list_ledger_account_balances import ListLedgerAccountBalances
34
+ from .list_ledger_accounts import ListLedgerAccounts
35
+ from .list_ledger_entries import ListLedgerEntries
36
+ from .list_ledger_entry_group_balances import ListLedgerEntryGroupBalances
37
+ from .list_multi_currency_ledger_account_balances import (
38
+ ListMultiCurrencyLedgerAccountBalances,
39
+ )
40
+ from .reconcile_tx import ReconcileTx
41
+ from .reconcile_tx_runtime import ReconcileTxRuntime
42
+ from .store_schema import StoreSchema
43
+ from .sync_custom_accounts import SyncCustomAccounts
44
+ from .sync_custom_txs import SyncCustomTxs
45
+ from .update_ledger import UpdateLedger
46
+ from .update_ledger_entry import UpdateLedgerEntry
47
+
48
+
49
+ def gql(q: str) -> str:
50
+ return q
51
+
52
+
53
+ class Client(AsyncFragmentClient):
54
+ async def store_schema(self, schema: SchemaInput, **kwargs: Any) -> StoreSchema:
55
+ query = gql(
56
+ """
57
+ mutation storeSchema($schema: SchemaInput!) {
58
+ storeSchema(schema: $schema) {
59
+ __typename
60
+ ... on StoreSchemaResult {
61
+ schema {
62
+ key
63
+ name
64
+ version {
65
+ created
66
+ version
67
+ }
68
+ }
69
+ }
70
+ ... on Error {
71
+ code
72
+ message
73
+ retryable
74
+ }
75
+ }
76
+ }
77
+ """
78
+ )
79
+ variables: Dict[str, object] = {"schema": schema}
80
+ response = await self.execute(
81
+ query=query, operation_name="storeSchema", variables=variables, **kwargs
82
+ )
83
+ data = self.get_data(response)
84
+ return StoreSchema.model_validate(data)
85
+
86
+ async def create_ledger(
87
+ self, ik: Any, ledger: CreateLedgerInput, schema_key: Any, **kwargs: Any
88
+ ) -> CreateLedger:
89
+ query = gql(
90
+ """
91
+ mutation createLedger($ik: SafeString!, $ledger: CreateLedgerInput!, $schemaKey: SafeString!) {
92
+ createLedger(ik: $ik, ledger: $ledger, schema: {key: $schemaKey}) {
93
+ __typename
94
+ ... on CreateLedgerResult {
95
+ ledger {
96
+ id
97
+ ik
98
+ name
99
+ created
100
+ schema {
101
+ key
102
+ }
103
+ }
104
+ isIkReplay
105
+ }
106
+ ... on Error {
107
+ code
108
+ message
109
+ retryable
110
+ }
111
+ }
112
+ }
113
+ """
114
+ )
115
+ variables: Dict[str, object] = {
116
+ "ik": ik,
117
+ "ledger": ledger,
118
+ "schemaKey": schema_key,
119
+ }
120
+ response = await self.execute(
121
+ query=query, operation_name="createLedger", variables=variables, **kwargs
122
+ )
123
+ data = self.get_data(response)
124
+ return CreateLedger.model_validate(data)
125
+
126
+ async def add_ledger_entry(
127
+ self,
128
+ ik: Any,
129
+ ledger_ik: Any,
130
+ type: str,
131
+ parameters: Any,
132
+ posted: Optional[Any] = None,
133
+ tags: Optional[List[LedgerEntryTagInput]] = None,
134
+ groups: Optional[List[LedgerEntryGroupInput]] = None,
135
+ **kwargs: Any
136
+ ) -> AddLedgerEntry:
137
+ query = gql(
138
+ """
139
+ mutation addLedgerEntry($ik: SafeString!, $ledgerIk: SafeString!, $type: String!, $posted: DateTime, $parameters: JSON!, $tags: [LedgerEntryTagInput!], $groups: [LedgerEntryGroupInput!]) {
140
+ addLedgerEntry(
141
+ ik: $ik
142
+ entry: {ledger: {ik: $ledgerIk}, type: $type, posted: $posted, parameters: $parameters, tags: $tags, groups: $groups}
143
+ ) {
144
+ __typename
145
+ ... on AddLedgerEntryResult {
146
+ isIkReplay
147
+ entry {
148
+ type
149
+ id
150
+ ik
151
+ posted
152
+ created
153
+ }
154
+ lines {
155
+ id
156
+ amount
157
+ account {
158
+ path
159
+ }
160
+ }
161
+ }
162
+ ... on Error {
163
+ code
164
+ message
165
+ retryable
166
+ }
167
+ }
168
+ }
169
+ """
170
+ )
171
+ variables: Dict[str, object] = {
172
+ "ik": ik,
173
+ "ledgerIk": ledger_ik,
174
+ "type": type,
175
+ "posted": posted,
176
+ "parameters": parameters,
177
+ "tags": tags,
178
+ "groups": groups,
179
+ }
180
+ response = await self.execute(
181
+ query=query, operation_name="addLedgerEntry", variables=variables, **kwargs
182
+ )
183
+ data = self.get_data(response)
184
+ return AddLedgerEntry.model_validate(data)
185
+
186
+ async def add_ledger_entry_runtime(
187
+ self,
188
+ ik: Any,
189
+ type: str,
190
+ ledger_ik: Any,
191
+ lines: List[LedgerLineInput],
192
+ posted: Optional[Any] = None,
193
+ tags: Optional[List[LedgerEntryTagInput]] = None,
194
+ groups: Optional[List[LedgerEntryGroupInput]] = None,
195
+ **kwargs: Any
196
+ ) -> AddLedgerEntryRuntime:
197
+ query = gql(
198
+ """
199
+ mutation addLedgerEntryRuntime($ik: SafeString!, $type: String!, $ledgerIk: SafeString!, $posted: DateTime, $lines: [LedgerLineInput!]!, $tags: [LedgerEntryTagInput!], $groups: [LedgerEntryGroupInput!]) {
200
+ addLedgerEntry(
201
+ ik: $ik
202
+ entry: {type: $type, ledger: {ik: $ledgerIk}, posted: $posted, lines: $lines, tags: $tags, groups: $groups}
203
+ ) {
204
+ __typename
205
+ ... on AddLedgerEntryResult {
206
+ isIkReplay
207
+ entry {
208
+ type
209
+ id
210
+ ik
211
+ posted
212
+ created
213
+ }
214
+ lines {
215
+ id
216
+ amount
217
+ account {
218
+ path
219
+ }
220
+ }
221
+ }
222
+ ... on Error {
223
+ code
224
+ message
225
+ retryable
226
+ }
227
+ }
228
+ }
229
+ """
230
+ )
231
+ variables: Dict[str, object] = {
232
+ "ik": ik,
233
+ "type": type,
234
+ "ledgerIk": ledger_ik,
235
+ "posted": posted,
236
+ "lines": lines,
237
+ "tags": tags,
238
+ "groups": groups,
239
+ }
240
+ response = await self.execute(
241
+ query=query,
242
+ operation_name="addLedgerEntryRuntime",
243
+ variables=variables,
244
+ **kwargs
245
+ )
246
+ data = self.get_data(response)
247
+ return AddLedgerEntryRuntime.model_validate(data)
248
+
249
+ async def reconcile_tx(
250
+ self,
251
+ ledger_ik: Any,
252
+ type: str,
253
+ parameters: Any,
254
+ tags: Optional[List[LedgerEntryTagInput]] = None,
255
+ groups: Optional[List[LedgerEntryGroupInput]] = None,
256
+ **kwargs: Any
257
+ ) -> ReconcileTx:
258
+ query = gql(
259
+ """
260
+ mutation reconcileTx($ledgerIk: SafeString!, $type: String!, $parameters: JSON!, $tags: [LedgerEntryTagInput!], $groups: [LedgerEntryGroupInput!]) {
261
+ reconcileTx(
262
+ entry: {ledger: {ik: $ledgerIk}, type: $type, parameters: $parameters, tags: $tags, groups: $groups}
263
+ ) {
264
+ __typename
265
+ ... on ReconcileTxResult {
266
+ entry {
267
+ id
268
+ ik
269
+ date
270
+ posted
271
+ created
272
+ description
273
+ }
274
+ lines {
275
+ id
276
+ amount
277
+ account {
278
+ path
279
+ }
280
+ externalTxId
281
+ }
282
+ }
283
+ ... on Error {
284
+ code
285
+ message
286
+ retryable
287
+ }
288
+ }
289
+ }
290
+ """
291
+ )
292
+ variables: Dict[str, object] = {
293
+ "ledgerIk": ledger_ik,
294
+ "type": type,
295
+ "parameters": parameters,
296
+ "tags": tags,
297
+ "groups": groups,
298
+ }
299
+ response = await self.execute(
300
+ query=query, operation_name="reconcileTx", variables=variables, **kwargs
301
+ )
302
+ data = self.get_data(response)
303
+ return ReconcileTx.model_validate(data)
304
+
305
+ async def reconcile_tx_runtime(
306
+ self,
307
+ ledger_ik: Any,
308
+ type: str,
309
+ lines: List[LedgerLineInput],
310
+ tags: Optional[List[LedgerEntryTagInput]] = None,
311
+ groups: Optional[List[LedgerEntryGroupInput]] = None,
312
+ **kwargs: Any
313
+ ) -> ReconcileTxRuntime:
314
+ query = gql(
315
+ """
316
+ mutation reconcileTxRuntime($ledgerIk: SafeString!, $type: String!, $lines: [LedgerLineInput!]!, $tags: [LedgerEntryTagInput!], $groups: [LedgerEntryGroupInput!]) {
317
+ reconcileTx(
318
+ entry: {ledger: {ik: $ledgerIk}, type: $type, lines: $lines, tags: $tags, groups: $groups}
319
+ ) {
320
+ __typename
321
+ ... on ReconcileTxResult {
322
+ entry {
323
+ id
324
+ ik
325
+ date
326
+ posted
327
+ created
328
+ description
329
+ }
330
+ lines {
331
+ id
332
+ amount
333
+ account {
334
+ path
335
+ }
336
+ externalTxId
337
+ }
338
+ }
339
+ ... on Error {
340
+ code
341
+ message
342
+ retryable
343
+ }
344
+ }
345
+ }
346
+ """
347
+ )
348
+ variables: Dict[str, object] = {
349
+ "ledgerIk": ledger_ik,
350
+ "type": type,
351
+ "lines": lines,
352
+ "tags": tags,
353
+ "groups": groups,
354
+ }
355
+ response = await self.execute(
356
+ query=query,
357
+ operation_name="reconcileTxRuntime",
358
+ variables=variables,
359
+ **kwargs
360
+ )
361
+ data = self.get_data(response)
362
+ return ReconcileTxRuntime.model_validate(data)
363
+
364
+ async def update_ledger_entry(
365
+ self,
366
+ entry_ik: Any,
367
+ ledger_ik: Any,
368
+ update: UpdateLedgerEntryInput,
369
+ **kwargs: Any
370
+ ) -> UpdateLedgerEntry:
371
+ query = gql(
372
+ """
373
+ mutation updateLedgerEntry($entryIk: SafeString!, $ledgerIk: SafeString!, $update: UpdateLedgerEntryInput!) {
374
+ updateLedgerEntry(
375
+ ledgerEntry: {ik: $entryIk, ledger: {ik: $ledgerIk}}
376
+ update: $update
377
+ ) {
378
+ __typename
379
+ ... on UpdateLedgerEntryResult {
380
+ entry {
381
+ id
382
+ ik
383
+ posted
384
+ created
385
+ description
386
+ lines {
387
+ nodes {
388
+ id
389
+ amount
390
+ account {
391
+ path
392
+ }
393
+ }
394
+ }
395
+ groups {
396
+ key
397
+ value
398
+ }
399
+ tags {
400
+ key
401
+ value
402
+ }
403
+ }
404
+ }
405
+ ... on Error {
406
+ code
407
+ message
408
+ }
409
+ }
410
+ }
411
+ """
412
+ )
413
+ variables: Dict[str, object] = {
414
+ "entryIk": entry_ik,
415
+ "ledgerIk": ledger_ik,
416
+ "update": update,
417
+ }
418
+ response = await self.execute(
419
+ query=query,
420
+ operation_name="updateLedgerEntry",
421
+ variables=variables,
422
+ **kwargs
423
+ )
424
+ data = self.get_data(response)
425
+ return UpdateLedgerEntry.model_validate(data)
426
+
427
+ async def update_ledger(
428
+ self, ledger_ik: Any, update: UpdateLedgerInput, **kwargs: Any
429
+ ) -> UpdateLedger:
430
+ query = gql(
431
+ """
432
+ mutation updateLedger($ledgerIk: SafeString!, $update: UpdateLedgerInput!) {
433
+ updateLedger(ledger: {ik: $ledgerIk}, update: $update) {
434
+ __typename
435
+ ... on UpdateLedgerResult {
436
+ ledger {
437
+ id
438
+ ik
439
+ name
440
+ }
441
+ }
442
+ ... on Error {
443
+ code
444
+ message
445
+ retryable
446
+ }
447
+ }
448
+ }
449
+ """
450
+ )
451
+ variables: Dict[str, object] = {"ledgerIk": ledger_ik, "update": update}
452
+ response = await self.execute(
453
+ query=query, operation_name="updateLedger", variables=variables, **kwargs
454
+ )
455
+ data = self.get_data(response)
456
+ return UpdateLedger.model_validate(data)
457
+
458
+ async def create_custom_link(
459
+ self, name: str, ik: Any, **kwargs: Any
460
+ ) -> CreateCustomLink:
461
+ query = gql(
462
+ """
463
+ mutation createCustomLink($name: String!, $ik: SafeString!) {
464
+ createCustomLink(name: $name, ik: $ik) {
465
+ __typename
466
+ ... on CreateCustomLinkResult {
467
+ link {
468
+ id
469
+ name
470
+ created
471
+ }
472
+ isIkReplay
473
+ }
474
+ ... on Error {
475
+ code
476
+ message
477
+ retryable
478
+ }
479
+ }
480
+ }
481
+ """
482
+ )
483
+ variables: Dict[str, object] = {"name": name, "ik": ik}
484
+ response = await self.execute(
485
+ query=query,
486
+ operation_name="createCustomLink",
487
+ variables=variables,
488
+ **kwargs
489
+ )
490
+ data = self.get_data(response)
491
+ return CreateCustomLink.model_validate(data)
492
+
493
+ async def sync_custom_accounts(
494
+ self, link_id: str, accounts: List[CustomAccountInput], **kwargs: Any
495
+ ) -> SyncCustomAccounts:
496
+ query = gql(
497
+ """
498
+ mutation syncCustomAccounts($linkId: ID!, $accounts: [CustomAccountInput!]!) {
499
+ syncCustomAccounts(link: {id: $linkId}, accounts: $accounts) {
500
+ __typename
501
+ ... on SyncCustomAccountsResult {
502
+ accounts {
503
+ id
504
+ externalId
505
+ name
506
+ currency {
507
+ code
508
+ customCurrencyId
509
+ }
510
+ }
511
+ }
512
+ ... on Error {
513
+ code
514
+ message
515
+ retryable
516
+ }
517
+ }
518
+ }
519
+ """
520
+ )
521
+ variables: Dict[str, object] = {"linkId": link_id, "accounts": accounts}
522
+ response = await self.execute(
523
+ query=query,
524
+ operation_name="syncCustomAccounts",
525
+ variables=variables,
526
+ **kwargs
527
+ )
528
+ data = self.get_data(response)
529
+ return SyncCustomAccounts.model_validate(data)
530
+
531
+ async def sync_custom_txs(
532
+ self, link_id: str, txs: List[CustomTxInput], **kwargs: Any
533
+ ) -> SyncCustomTxs:
534
+ query = gql(
535
+ """
536
+ mutation syncCustomTxs($linkId: ID!, $txs: [CustomTxInput!]!) {
537
+ syncCustomTxs(link: {id: $linkId}, txs: $txs) {
538
+ __typename
539
+ ... on SyncCustomTxsResult {
540
+ txs {
541
+ __typename
542
+ linkId
543
+ id
544
+ externalId
545
+ externalAccountId
546
+ amount
547
+ description
548
+ posted
549
+ }
550
+ }
551
+ ... on Error {
552
+ code
553
+ message
554
+ retryable
555
+ }
556
+ }
557
+ }
558
+ """
559
+ )
560
+ variables: Dict[str, object] = {"linkId": link_id, "txs": txs}
561
+ response = await self.execute(
562
+ query=query, operation_name="syncCustomTxs", variables=variables, **kwargs
563
+ )
564
+ data = self.get_data(response)
565
+ return SyncCustomTxs.model_validate(data)
566
+
567
+ async def get_ledger(self, ik: Any, **kwargs: Any) -> GetLedger:
568
+ query = gql(
569
+ """
570
+ query getLedger($ik: SafeString!) {
571
+ ledger(ledger: {ik: $ik}) {
572
+ id
573
+ ik
574
+ name
575
+ created
576
+ balanceUTCOffset
577
+ }
578
+ }
579
+ """
580
+ )
581
+ variables: Dict[str, object] = {"ik": ik}
582
+ response = await self.execute(
583
+ query=query, operation_name="getLedger", variables=variables, **kwargs
584
+ )
585
+ data = self.get_data(response)
586
+ return GetLedger.model_validate(data)
587
+
588
+ async def get_ledger_entry(
589
+ self, ik: Any, ledger_ik: Any, **kwargs: Any
590
+ ) -> GetLedgerEntry:
591
+ query = gql(
592
+ """
593
+ query getLedgerEntry($ik: SafeString!, $ledgerIk: SafeString!) {
594
+ ledgerEntry(ledgerEntry: {ik: $ik, ledger: {ik: $ledgerIk}}) {
595
+ id
596
+ ik
597
+ posted
598
+ created
599
+ description
600
+ lines {
601
+ nodes {
602
+ id
603
+ amount
604
+ account {
605
+ path
606
+ }
607
+ }
608
+ }
609
+ }
610
+ }
611
+ """
612
+ )
613
+ variables: Dict[str, object] = {"ik": ik, "ledgerIk": ledger_ik}
614
+ response = await self.execute(
615
+ query=query, operation_name="getLedgerEntry", variables=variables, **kwargs
616
+ )
617
+ data = self.get_data(response)
618
+ return GetLedgerEntry.model_validate(data)
619
+
620
+ async def list_ledger_accounts(
621
+ self,
622
+ ledger_ik: Any,
623
+ after: Optional[str] = None,
624
+ first: Optional[int] = None,
625
+ before: Optional[str] = None,
626
+ **kwargs: Any
627
+ ) -> ListLedgerAccounts:
628
+ query = gql(
629
+ """
630
+ query listLedgerAccounts($ledgerIk: SafeString!, $after: String, $first: Int, $before: String) {
631
+ ledger(ledger: {ik: $ledgerIk}) {
632
+ id
633
+ ik
634
+ name
635
+ created
636
+ ledgerAccounts(after: $after, first: $first, before: $before) {
637
+ nodes {
638
+ id
639
+ path
640
+ name
641
+ type
642
+ created
643
+ }
644
+ pageInfo {
645
+ hasNextPage
646
+ endCursor
647
+ hasPreviousPage
648
+ startCursor
649
+ }
650
+ }
651
+ }
652
+ }
653
+ """
654
+ )
655
+ variables: Dict[str, object] = {
656
+ "ledgerIk": ledger_ik,
657
+ "after": after,
658
+ "first": first,
659
+ "before": before,
660
+ }
661
+ response = await self.execute(
662
+ query=query,
663
+ operation_name="listLedgerAccounts",
664
+ variables=variables,
665
+ **kwargs
666
+ )
667
+ data = self.get_data(response)
668
+ return ListLedgerAccounts.model_validate(data)
669
+
670
+ async def list_ledger_account_balances(
671
+ self,
672
+ ledger_ik: Any,
673
+ after: Optional[str] = None,
674
+ first: Optional[int] = None,
675
+ before: Optional[str] = None,
676
+ balance_currency: Optional[CurrencyMatchInput] = None,
677
+ balance_at: Optional[Any] = None,
678
+ own_balance_consistency_mode: Optional[ReadBalanceConsistencyMode] = None,
679
+ **kwargs: Any
680
+ ) -> ListLedgerAccountBalances:
681
+ query = gql(
682
+ """
683
+ query listLedgerAccountBalances($ledgerIk: SafeString!, $after: String, $first: Int, $before: String, $balanceCurrency: CurrencyMatchInput, $balanceAt: LastMoment, $ownBalanceConsistencyMode: ReadBalanceConsistencyMode) {
684
+ ledger(ledger: {ik: $ledgerIk}) {
685
+ id
686
+ ik
687
+ name
688
+ created
689
+ ledgerAccounts(after: $after, first: $first, before: $before) {
690
+ nodes {
691
+ id
692
+ path
693
+ name
694
+ type
695
+ created
696
+ ownBalance(
697
+ currency: $balanceCurrency
698
+ at: $balanceAt
699
+ consistencyMode: $ownBalanceConsistencyMode
700
+ )
701
+ childBalance(currency: $balanceCurrency, at: $balanceAt)
702
+ balance(currency: $balanceCurrency, at: $balanceAt)
703
+ }
704
+ pageInfo {
705
+ hasNextPage
706
+ endCursor
707
+ hasPreviousPage
708
+ startCursor
709
+ }
710
+ }
711
+ }
712
+ }
713
+ """
714
+ )
715
+ variables: Dict[str, object] = {
716
+ "ledgerIk": ledger_ik,
717
+ "after": after,
718
+ "first": first,
719
+ "before": before,
720
+ "balanceCurrency": balance_currency,
721
+ "balanceAt": balance_at,
722
+ "ownBalanceConsistencyMode": own_balance_consistency_mode,
723
+ }
724
+ response = await self.execute(
725
+ query=query,
726
+ operation_name="listLedgerAccountBalances",
727
+ variables=variables,
728
+ **kwargs
729
+ )
730
+ data = self.get_data(response)
731
+ return ListLedgerAccountBalances.model_validate(data)
732
+
733
+ async def list_multi_currency_ledger_account_balances(
734
+ self,
735
+ ledger_ik: Any,
736
+ after: Optional[str] = None,
737
+ first: Optional[int] = None,
738
+ before: Optional[str] = None,
739
+ balance_at: Optional[Any] = None,
740
+ own_balances_consistency_mode: Optional[ReadBalanceConsistencyMode] = None,
741
+ **kwargs: Any
742
+ ) -> ListMultiCurrencyLedgerAccountBalances:
743
+ query = gql(
744
+ """
745
+ query listMultiCurrencyLedgerAccountBalances($ledgerIk: SafeString!, $after: String, $first: Int, $before: String, $balanceAt: LastMoment, $ownBalancesConsistencyMode: ReadBalanceConsistencyMode) {
746
+ ledger(ledger: {ik: $ledgerIk}) {
747
+ id
748
+ ik
749
+ name
750
+ created
751
+ ledgerAccounts(after: $after, first: $first, before: $before) {
752
+ nodes {
753
+ id
754
+ path
755
+ name
756
+ type
757
+ created
758
+ ownBalances(at: $balanceAt, consistencyMode: $ownBalancesConsistencyMode) {
759
+ nodes {
760
+ currency {
761
+ code
762
+ customCurrencyId
763
+ }
764
+ amount
765
+ }
766
+ }
767
+ childBalances(at: $balanceAt) {
768
+ nodes {
769
+ currency {
770
+ code
771
+ customCurrencyId
772
+ }
773
+ amount
774
+ }
775
+ }
776
+ balances(at: $balanceAt) {
777
+ nodes {
778
+ currency {
779
+ code
780
+ customCurrencyId
781
+ }
782
+ amount
783
+ }
784
+ }
785
+ }
786
+ pageInfo {
787
+ hasNextPage
788
+ endCursor
789
+ hasPreviousPage
790
+ startCursor
791
+ }
792
+ }
793
+ }
794
+ }
795
+ """
796
+ )
797
+ variables: Dict[str, object] = {
798
+ "ledgerIk": ledger_ik,
799
+ "after": after,
800
+ "first": first,
801
+ "before": before,
802
+ "balanceAt": balance_at,
803
+ "ownBalancesConsistencyMode": own_balances_consistency_mode,
804
+ }
805
+ response = await self.execute(
806
+ query=query,
807
+ operation_name="listMultiCurrencyLedgerAccountBalances",
808
+ variables=variables,
809
+ **kwargs
810
+ )
811
+ data = self.get_data(response)
812
+ return ListMultiCurrencyLedgerAccountBalances.model_validate(data)
813
+
814
+ async def get_ledger_account_lines(
815
+ self,
816
+ path: str,
817
+ ledger_ik: Any,
818
+ after: Optional[str] = None,
819
+ first: Optional[int] = None,
820
+ before: Optional[str] = None,
821
+ filter: Optional[LedgerLinesFilterSet] = None,
822
+ **kwargs: Any
823
+ ) -> GetLedgerAccountLines:
824
+ query = gql(
825
+ """
826
+ query getLedgerAccountLines($path: String!, $ledgerIk: SafeString!, $after: String, $first: Int, $before: String, $filter: LedgerLinesFilterSet) {
827
+ ledgerAccount(ledgerAccount: {ledger: {ik: $ledgerIk}, path: $path}) {
828
+ id
829
+ path
830
+ lines(after: $after, first: $first, before: $before, filter: $filter) {
831
+ nodes {
832
+ id
833
+ posted
834
+ created
835
+ amount
836
+ description
837
+ }
838
+ pageInfo {
839
+ hasNextPage
840
+ endCursor
841
+ hasPreviousPage
842
+ startCursor
843
+ }
844
+ }
845
+ }
846
+ }
847
+ """
848
+ )
849
+ variables: Dict[str, object] = {
850
+ "path": path,
851
+ "ledgerIk": ledger_ik,
852
+ "after": after,
853
+ "first": first,
854
+ "before": before,
855
+ "filter": filter,
856
+ }
857
+ response = await self.execute(
858
+ query=query,
859
+ operation_name="getLedgerAccountLines",
860
+ variables=variables,
861
+ **kwargs
862
+ )
863
+ data = self.get_data(response)
864
+ return GetLedgerAccountLines.model_validate(data)
865
+
866
+ async def get_ledger_account_balance(
867
+ self,
868
+ path: str,
869
+ ledger_ik: Any,
870
+ balance_currency: Optional[CurrencyMatchInput] = None,
871
+ balance_at: Optional[Any] = None,
872
+ own_balance_consistency_mode: Optional[ReadBalanceConsistencyMode] = None,
873
+ **kwargs: Any
874
+ ) -> GetLedgerAccountBalance:
875
+ query = gql(
876
+ """
877
+ query getLedgerAccountBalance($path: String!, $ledgerIk: SafeString!, $balanceCurrency: CurrencyMatchInput, $balanceAt: LastMoment, $ownBalanceConsistencyMode: ReadBalanceConsistencyMode) {
878
+ ledgerAccount(ledgerAccount: {ledger: {ik: $ledgerIk}, path: $path}) {
879
+ id
880
+ path
881
+ ownBalance(
882
+ currency: $balanceCurrency
883
+ at: $balanceAt
884
+ consistencyMode: $ownBalanceConsistencyMode
885
+ )
886
+ }
887
+ }
888
+ """
889
+ )
890
+ variables: Dict[str, object] = {
891
+ "path": path,
892
+ "ledgerIk": ledger_ik,
893
+ "balanceCurrency": balance_currency,
894
+ "balanceAt": balance_at,
895
+ "ownBalanceConsistencyMode": own_balance_consistency_mode,
896
+ }
897
+ response = await self.execute(
898
+ query=query,
899
+ operation_name="getLedgerAccountBalance",
900
+ variables=variables,
901
+ **kwargs
902
+ )
903
+ data = self.get_data(response)
904
+ return GetLedgerAccountBalance.model_validate(data)
905
+
906
+ async def get_schema(
907
+ self, key: Any, version: Optional[int] = None, **kwargs: Any
908
+ ) -> GetSchema:
909
+ query = gql(
910
+ """
911
+ query getSchema($key: SafeString!, $version: Int) {
912
+ schema(schema: {key: $key, version: $version}) {
913
+ key
914
+ name
915
+ version {
916
+ created
917
+ version
918
+ json
919
+ }
920
+ }
921
+ }
922
+ """
923
+ )
924
+ variables: Dict[str, object] = {"key": key, "version": version}
925
+ response = await self.execute(
926
+ query=query, operation_name="getSchema", variables=variables, **kwargs
927
+ )
928
+ data = self.get_data(response)
929
+ return GetSchema.model_validate(data)
930
+
931
+ async def list_ledger_entries(
932
+ self,
933
+ ledger_ik: Any,
934
+ after: Optional[str] = None,
935
+ first: Optional[int] = None,
936
+ before: Optional[str] = None,
937
+ filter: Optional[LedgerEntriesFilterSet] = None,
938
+ **kwargs: Any
939
+ ) -> ListLedgerEntries:
940
+ query = gql(
941
+ """
942
+ query listLedgerEntries($ledgerIk: SafeString!, $after: String, $first: Int, $before: String, $filter: LedgerEntriesFilterSet) {
943
+ ledger(ledger: {ik: $ledgerIk}) {
944
+ ledgerEntries(after: $after, first: $first, before: $before, filter: $filter) {
945
+ nodes {
946
+ ik
947
+ type
948
+ posted
949
+ lines {
950
+ nodes {
951
+ amount
952
+ account {
953
+ path
954
+ }
955
+ }
956
+ }
957
+ }
958
+ pageInfo {
959
+ hasNextPage
960
+ endCursor
961
+ hasPreviousPage
962
+ startCursor
963
+ }
964
+ }
965
+ }
966
+ }
967
+ """
968
+ )
969
+ variables: Dict[str, object] = {
970
+ "ledgerIk": ledger_ik,
971
+ "after": after,
972
+ "first": first,
973
+ "before": before,
974
+ "filter": filter,
975
+ }
976
+ response = await self.execute(
977
+ query=query,
978
+ operation_name="listLedgerEntries",
979
+ variables=variables,
980
+ **kwargs
981
+ )
982
+ data = self.get_data(response)
983
+ return ListLedgerEntries.model_validate(data)
984
+
985
+ async def get_workspace(self, **kwargs: Any) -> GetWorkspace:
986
+ query = gql(
987
+ """
988
+ query getWorkspace {
989
+ workspace {
990
+ id
991
+ name
992
+ }
993
+ }
994
+ """
995
+ )
996
+ variables: Dict[str, object] = {}
997
+ response = await self.execute(
998
+ query=query, operation_name="getWorkspace", variables=variables, **kwargs
999
+ )
1000
+ data = self.get_data(response)
1001
+ return GetWorkspace.model_validate(data)
1002
+
1003
+ async def list_ledger_entry_group_balances(
1004
+ self,
1005
+ ledger_ik: Any,
1006
+ group_key: Any,
1007
+ group_value: Any,
1008
+ consistency_mode: Optional[ReadBalanceConsistencyMode] = None,
1009
+ after: Optional[str] = None,
1010
+ before: Optional[str] = None,
1011
+ first: Optional[int] = None,
1012
+ last: Optional[int] = None,
1013
+ filter: Optional[LedgerEntryGroupBalanceFilterSet] = None,
1014
+ **kwargs: Any
1015
+ ) -> ListLedgerEntryGroupBalances:
1016
+ query = gql(
1017
+ """
1018
+ query listLedgerEntryGroupBalances($ledgerIk: SafeString!, $groupKey: SafeString!, $groupValue: SafeString!, $consistencyMode: ReadBalanceConsistencyMode = use_account, $after: String, $before: String, $first: Int, $last: Int, $filter: LedgerEntryGroupBalanceFilterSet) {
1019
+ ledgerEntryGroup(
1020
+ ledgerEntryGroup: {ledger: {ik: $ledgerIk}, key: $groupKey, value: $groupValue}
1021
+ ) {
1022
+ key
1023
+ value
1024
+ created
1025
+ balances(
1026
+ after: $after
1027
+ before: $before
1028
+ first: $first
1029
+ last: $last
1030
+ filter: $filter
1031
+ ) {
1032
+ nodes {
1033
+ account {
1034
+ path
1035
+ }
1036
+ currency {
1037
+ code
1038
+ customCurrencyId
1039
+ }
1040
+ ownBalance(consistencyMode: $consistencyMode)
1041
+ }
1042
+ pageInfo {
1043
+ hasNextPage
1044
+ endCursor
1045
+ hasPreviousPage
1046
+ startCursor
1047
+ }
1048
+ }
1049
+ }
1050
+ }
1051
+ """
1052
+ )
1053
+ variables: Dict[str, object] = {
1054
+ "ledgerIk": ledger_ik,
1055
+ "groupKey": group_key,
1056
+ "groupValue": group_value,
1057
+ "consistencyMode": consistency_mode,
1058
+ "after": after,
1059
+ "before": before,
1060
+ "first": first,
1061
+ "last": last,
1062
+ "filter": filter,
1063
+ }
1064
+ response = await self.execute(
1065
+ query=query,
1066
+ operation_name="listLedgerEntryGroupBalances",
1067
+ variables=variables,
1068
+ **kwargs
1069
+ )
1070
+ data = self.get_data(response)
1071
+ return ListLedgerEntryGroupBalances.model_validate(data)