File: changelog.rst

package info (click to toggle)
python-globus-sdk 4.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,064 kB
  • sloc: python: 34,158; sh: 44; makefile: 31
file content (3622 lines) | stat: -rw-r--r-- 109,742 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
.. _changelog:

CHANGELOG
#########

.. _changelog_version3:

See :ref:`versioning` for our versioning policy.

The :ref:`upgrading <upgrading>` doc is a good reference if you are upgrading
to a major new version of the SDK.

.. scriv-insert-here

.. _changelog-4.1.0:

v4.1.0 (2025-10-23)
===================

Added
-----

- Updated ``create_flow`` and ``update_flow`` to accept an authentication policy to assign to a flow. (:pr:`1334`)
    - Note: SDK support for this feature is being released in advance of service support, which will follow at a later time.

.. _changelog-4.0.1:

v4.0.1 (2025-10-13)
===================

Fixed
-----

- Fix the route for ``TransferClient.set_subscription_admin_verified()`` (:pr:`1331`)

.. _changelog-4.0.0:

v4.0.0 (2025-10-08)
===================

*No changes from v4.0.0b2*

.. _changelog-4.0.0b2:

v4.0.0b2 (2025-09-24)
=====================

Added
-----

- On Python 3.11+, the SDK will populate the ``__notes__`` of API errors with a
  message containing the full body of the error response.
  ``__notes__`` is part of the default presentation of a traceback. (:pr:`1299`)

Removed
-------

- The following methods and parameters, which were deprecated in globus-sdk v3,
  have been removed (:pr:`1309`):

  - The ``skip_activation_check`` parameter for ``TransferData`` and ``DeleteData``.
  - The ``recursive_symlinks`` parameter for ``TransferData``.
  - The ``add_symlink_item`` method of ``TransferData``.

Changed
-------

- Passing non-``Scope`` types to ``Scope.with_dependency`` and
  ``Scope.with_dependencies`` now raises a ``TypeError``. Previously, this was
  allowed at runtime but created an invalid ``Scope`` object. (:pr:`1300`)

.. _changelog-4.0.0b1:

v4.0.0b1 (2025-07-31)
=====================

Breaking Changes
----------------

- The ``RequestsTransport`` object has been refactored to separate it from
  configuration which controls request retries. A new ``RetryConfig`` object is
  introduced and provided as ``client.retry_config`` on all client types. The
  interface for controlling these configurations has been updated.
  (:pr:`1275`)

  - The ``transport_class`` attribute has been removed from client classes.

  - Clients now accept ``transport``, an instance of ``RequestsTransport``, and
    ``retry_config``, an instance of ``RetryConfig``, instead of
    ``transport_params``.

  - Users seeking to customize the retry backoff, sleep maximum, and max
    retries should now use ``retry_config``, as these are no longer controlled
    through ``transport``.

  - The capabilities of the ``RequestsTransport.tune()`` context manager have
    been divided into ``RequestsTransport.tune()`` and ``RetryConfig.tune()``.

  - The retry configuration is exposed to retry checks as an attribute of the
    ``RequestCallerInfo``, which is provided on the ``RetryContext``. As a
    result, checks can examine the configuration.

- Interfaces for normalizing scope data have changed. (:pr:`1289`)

  - The ``scopes_to_str`` function has been replaced with
    ``ScopeParser.serialize``.

  - ``ScopeParser.serialize`` will raise an error if the serialized data is
    empty. A flag, ``reject_empty=False``, can be passed to disable this check.

  - The ``scopes_to_scope_list`` function has been removed.

Removed
-------

- Removed the ``filter_role`` parameter to ``FlowsClient.list_flows``.
  This parameter was deprecated in ``globus-sdk`` version 3. (:pr:`1291`)

- Removed ``SearchClient.update_entry``.
  This method was deprecated in ``globus-sdk`` version 3. (:pr:`1292`)

- Removed ``SearchClient.create_entry``.
  This method was deprecated in ``globus-sdk`` version 3. (:pr:`1293`)

- Removed the ``SearchQuery`` type. Users should use ``SearchQueryV1`` instead.
  ``SearchQuery`` was deprecated in ``globus-sdk`` version 3. (:pr:`1294`)

Changed
-------

- The legacy token storage adapters are now only available from the
  ``globus_sdk.token_storage.legacy`` subpackage.

  Users are encouraged to migrate to the newer tooling available directly from
  ``globus_sdk.token_storage``. (:pr:`1290`)

- Update ``warn_deprecated`` to emit ``RemovedInV5Warning`` and remove
  ``RemovedInV4Warning`` class (:pr:`1295`)

.. _changelog-4.0.0a4:

v4.0.0a4 (2025-07-25)
=====================

Breaking Changes
----------------

- The ``function_data`` argument to ``ComputeClientV2.register_function`` has
  been renamed to ``data`` to be consistent with other usages.

- ``AuthClient`` no longer accepts ``client_id`` as a parameter and does not
  provide it as an attribute. This was deprecated in globus-sdk version 3. (:pr:`1271`)

Added
-----

- Add ``RequestCallerInfo`` data object to ``RequestsTransport.request`` for passing caller context information. (:pr:`1261`)

Removed
-------

- The ``TimerJob.from_transfer_data`` classmethod, which was deprecated in
  globus-sdk version 3, has been removed. Users should use the ``TransferTimer``
  class to construct timers which submit transfer tasks. (:pr:`1269`)

- The ``oauth2_validate_token`` method has been removed from
  ``NativeAppAuthClient`` and ``ConfidentialAppAuthClient``.
  This method was deprecated in globus-sdk v3. (:pr:`1270`)

- Removed ``AuthClient.oauth2_userinfo``. This method was deprecated in
  ``globus-sdk`` version 3. (:pr:`1272`)

- Removed support for ``ConfidentialAppAuthClient.get_identities``.
  This usage was deprecated in ``globus-sdk`` version 3. (:pr:`1273`)

  - Users calling the Get Identities API on behalf of a client identity should
    instead get tokens for the client and use those tokens to call
    ``AuthClient.get_identities``. For example, by instantiating an
    ``AuthClient`` using a ``ClientCredentialsAuthorizer``.

  - This also means that it is no longer valid to use a
    ``ConfidentialAppAuthClient`` to initialize an ``IdentityMap``.

- ``TransferClient.create_endpoint`` has been removed. This method primarily
  supported creation of GCSv4 servers and was deprecated in ``globus-sdk`` v3.
  (:pr:`1276`)

- ``GCSClient.connector_id_to_name()`` has been removed. It was deprecated in
  ``globus-sdk`` version 3. Users should use ``globus_sdk.ConnectorTable``
  instead. (:pr:`1277`)

- Removed support for Endpoint Activation, a feature which was specific to
  Globus Connect Server v4. (:pr:`1279`)

  - Removed the activation methods: ``TransferClient.endpoint_autoactivate``,
    ``TransferClient.endpoint_activate``,
    ``TransferClient.endpoint_deactivate``, and
    ``TransferClient.endpoint_get_activation_requirements``

  - Removed the specialized ``ActivationRequirementsResponse`` parsed response
    type

  - ``TransferClient.update_endpoint`` would previously check the
    ``myproxy_server`` and ``oauth_server`` parameters, which were solely used
    for the purpose of configuring activation. It no longer does so.

- Removed the ``ComputeClient`` alias. This name was deprecated in
  ``globus-sdk`` version 3. Users should use ``ComputeClientV2`` or
  ``ComputeClientV3`` instead. (:pr:`1282`)

- Removed ``GlobusAPIError.raw_text``. This attribute was deprecated in
  ``globus-sdk`` version 3. Users should use the ``text`` attribute instead.
  (:pr:`1283`)

- Removed ``TransferClient`` methods for modifying "endpoint servers", a
  feature specific to Globus Connect Server v4. Specifically,
  ``add_endpoint_server``, ``update_endpoint_server``, and
  ``delete_endpoint_server``.
  These methods were deprecated in ``globus-sdk`` version 3. (:pr:`1284`)

- Removed the ``ComputeFunctionDocument`` and ``ComputeFunctionMetadata``
  classes. These helpers were deprecated in ``globus-sdk`` version 3.

- Removed ``TransferClient.operation_symlink``. This method was deprecated in
  ``globus-sdk`` version 3. (:pr:`1286`)

Changed
-------

- Renamed the ``globus_sdk._testing`` subpackage to ``globus_sdk.testing``. (:pr:`1251`)

- Renamed the ``globus_sdk.tokenstorage`` subpackage to ``globus_sdk.token_storage`` and removed the ``globus_sdk.experimental.tokenstorage`` (:pr:`1252`)

- Remove support for normalizing nested iterables of scopes, e.g. ``[["scope1"], "scope2"]`` (:pr:`1259`)

.. _changelog-4.0.0a3:

v4.0.0a3 (2025-07-10)
=====================

Breaking Changes
----------------

- All defaults of ``None`` converted to ``globus_sdk.MISSING`` for all payload types in the Transfer client. (:pr:`1216`)

- The ``transfer_client`` parameter to ``TransferData`` and ``DeleteData`` has been removed.
  See the upgrading doc for transition details. (:pr:`1236`)

- In Globus Auth client classes, defaults of ``None`` are converted to
  ``MISSING`` for optional fields. (:pr:`1236`)

Added
-----

- ``SpecificFlowClient`` has a new method,
  ``add_app_transfer_data_access_scope`` which facilitates declaration of scope
  requirements when starting flows which interact with collections that need
  ``data_access`` scopes. (:pr:`1166`)

Removed
-------

- ``globus_sdk.experimental.scope_parser`` has been removed. Use
  ``globus_sdk.scopes`` instead. (:pr:`1236`)

Changed
-------

- ``Scope`` objects are now immutable. (:pr:`1208`)

  - ``Scope.dependencies`` is now a tuple, not a list.

  - The ``add_dependency`` method has been removed, since mutating a ``Scope``
    is no longer possible.

  - A new evolver method, ``Scope.with_dependency`` has been added. It extends
    the ``dependencies`` tuple in a new ``Scope`` object.

  - A batch version of ``Scope.with_dependency`` has been added,
    ``Scope.with_dependencies``.

  - An evolver for the ``optional`` field of a ``Scope`` is also now available,
    named ``Scope.with_optional``.

- Scope parsing has been separated from the main ``Scope`` class into a
  dedicated ``ScopeParser`` which provides parsing methods. (:pr:`1208`)

  - Use ``globus_sdk.scopes.ScopeParser`` for complex parsing use-cases. The
    ``ScopeParser.parse`` classmethod parses strings into lists of scope
    objects.

  - ``Scope.merge_scopes`` has been moved to ``ScopeParser.merge_scopes``.

  - ``Scope.parse`` is changed to call ``ScopeParser.parse`` and verify that
    there is exactly one result, which it returns. This means that
    ``Scope.parse`` now returns a single ``Scope``, not a ``list[Scope]``.

  - ``Scope.serialize`` and ``Scope.deserialize`` have been removed as methods.
    Use ``str(scope_object)`` as a replacement for ``serialize()`` and
    ``Scope.parse`` as a replacement for ``deserialize()``.

- Payload types now inherit from ``dict`` rather than ``UserDict``. The
  ``PayloadWrapper`` utility class has been replaced with ``Payload``.
  (:pr:`1222`)
- Payload types are more consistent about encoding missing values using ``MISSING``.
  (:pr:`1222`)

- The SDK's ``ScopeBuilder`` types have been replaced with
  ``StaticScopeCollection`` and ``DynamicScopeCollection`` types. (:pr:`1237`)

  - Scopes provided as constants by the SDK are now ``Scope`` objects, not
    strings. They can be converted to strings trivially with ``str(scope)``.

  - The various scope builder types have been renamed. ``SpecificFlowScopes``,
    ``GCSEndpointScopes``, and ``GCSCollectionScopes`` replace
    ``SpecificFlowScopeBuilder``, ``GCSEndpointScopeBuilder``, and
    ``GCSCollectionScopeBuilder``.

- The ``ScopeBuilder`` types have been simplified and improved as the new
  ``ScopeCollection`` types. (:pr:`1237`)

  - ``ScopeBuilder`` is replaced with ``StaticScopeCollection`` and
    ``DynamicScopeCollection``. The ``scopes`` attribute of client classes is
    now a scope collection.

  - The attributes of ``ScopeCollection``\s are ``Scope`` objects, not strings.

  - ``ScopeCollection``\s define ``__iter__``, yielding the provided scopes,
    but not ``__str__``.

.. _changelog-4.0.0a2:

v4.0.0a2 (2025-06-05)
=====================

Breaking Changes
----------------

- The SDK version is no longer available in ``globus_sdk.version.__version__``. (:pr:`1195`)

  Packages that want to query the SDK version must use ``importlib.metadata``:

  ..  code-block:: python

        import importlib.metadata

        GLOBUS_SDK_VERSION = importlib.metadata.distribution("globus_sdk").version

- The legacy ``MutableScope`` type has been removed. (:pr:`1198`)

    - The ``make_mutable`` method on ``ScopeBuilder`` objects has also been
      removed as a consequence of this change.

- Defaults of ``None`` were converted to ``globus_sdk.MISSING`` for multiple client
  methods and payload types, covering Compute, Flows, Groups, GCS, and Search.
  (:pr:`1205`, :pr:`1207`, :pr:`1212`, :pr:`1214`)

Removed
-------

- ``globus_sdk.experimental.auth_requirements_error`` has been removed. Use
  ``globus_sdk.gare`` instead. (:pr:`1202`)

- ``GlobusAPIError`` no longer provides a setter for ``message``. The
  ``message`` property is now read-only. (:pr:`1204`)

- Deprecated aliases for ``TimersClient``, ``TimersScopes``, and
  ``TimersAPIError`` have been removed. (:pr:`1206`)

.. _changelog-4.0.0a1:

v4.0.0a1 (2025-05-20)
=====================

Breaking Changes
----------------

- The SDK no longer sets default scopes for direct use
  of client credentials and auth client login flow methods.
  Users should either use ``GlobusApp`` objects,
  which can specify scopes based on the clients in use,
  or else pass a list of scopes explicitly to
  ``oauth2_client_credentials_tokens`` or ``oauth2_start_flow``. (:pr:`1186`)

- The default ``GlobusAPIError.code`` value is now ``None``
  when ``code`` is not supplied in the error body.
  Previously, the default was ``"Error"``. (:pr:`1190`)

- The default ``TimersAPIError.code`` value is now ``None``
  when an error which appears to be validation-related has no ``code``.
  Previously, the default was ``"ValidationError"``. (:pr:`1191`)

- SDK client classes no longer define nor prepend a ``base_path`` attribute to paths.
  Make sure to use the full path now when using client methods. (:pr:`1185`)

- Updated MappedCollectionDoc and GuestCollectionDoc with MissingType. (:pr:`1189`)

.. _changelog-3.65.0:

v3.65.0 (2025-10-02)
====================

Added
-----

- Add a ``FlowTimer`` payload class to aid in creating timers that run flows.
- Add the ``statuses`` parameter to ``GroupsClient.get_my_groups()``. (:pr:`1317`)
- Add ``.change_role()`` to the Globus Groups ``BatchMembershipActions`` helper class. (:pr:`1318`)
- Add ``.change_roles()`` to the Globus Groups ``GroupsManager`` class. (:pr:`1318`)

Development
-----------

- Fix a Poetry deprecation warning in the test suite. (:pr:`1320`)

.. _changelog-3.64.0:

v3.64.0 (2025-09-24)
====================

Added
-----

- Added ``SearchClient.update_index`` as a method for modifying index names and
  descriptions. (:pr:`1310`)

Deprecated
----------

- The following Transfer features have been deprecated: (:pr:`1308`, :pr:`1309`)

  - The ``add_symlink_item`` method of ``TransferData``.
    This is not supported by any collections.

  - The  ``recursive_symlinks`` parameter to ``TransferData``.
    This is not supported by any collections.

  - The ``skip_activation_check`` parameter to ``TransferData`` and ``DeleteData``.
    This no longer has any effect when set.

.. _changelog-3.63.0:

v3.63.0 (2025-09-04)
====================
- Renamed the ``GroupsClient`` method ``set_subscription_admin_verified_id`` to
  ``set_subscription_admin_verified``. (:pr:`1302`)

  - ``GroupsClient.set_subscription_admin_verified_id`` still exists but emits a
    deprecation warning.

.. _changelog-3.62.0:

v3.62.0 (2025-07-31)
====================

- Added support for setting a group's ``subscription_id``
  via ``GroupsClient.set_subscription_admin_verified_id``. (:pr:`1287`)

.. _changelog-3.61.0:

v3.61.0 (2025-07-23)
====================

Deprecated
----------

- ``TransferClient`` methods which are specific to Globus Connect Server v4 are
  now deprecated and emit deprecation warnings when used. (:pr:`1274`)

- The ``ComputeClient`` alias for ``ComputeClientV2`` is now deprecated. Users
  of Globus Compute are encouraged to use ``ComputeClientV2`` or
  ``ComputeClientV3`` instead. (:pr:`1278`)

.. _changelog-3.60.0:

v3.60.0 (2025-07-09)
====================

Added
-----

- Recognize ``dependent_consent_required`` errors from the Auth API
  as a Globus Auth Requirements Error (GARE)
  and support converting them to GAREs. (:pr:`1246`)

Fixed
-----

-   Accept authorization parameters containing dependent scopes
    when ``app.login()`` is called with a GARE's authorization parameters.
    (:pr:`1247`)

.. _changelog-3.59.0:

v3.59.0 (2025-07-01)
====================

Added
-----

- Added the ``TransferClient.set_subscription_admin_verified()`` method. (:pr:`1227`)

- Updated ``ComputeClientV2.get_endpoints`` with a new ``role`` kwarg. (:pr:`1238`)

Development
-----------

-   Convert the CHANGELOG to Markdown-compatible headers.

    This resolves rendering issues in Dependabot PRs in the CLI,
    and simplifies compatibility between RST and Markdown.

.. _changelog-3.58.0:

v3.58.0 (2025-06-16)
====================

Added
-----

- Add the ``SpecificFlow.validate_run()`` method. (:pr:`1221`)

Fixed
-----

- Fix an error which caused the ``restrict_transfers_to_high_assurance`` field
  to be malformed when set on a collection payload type. (:pr:`1211`)

.. _changelog-3.57.0:

v3.57.0 (2025-06-04)
====================

Added
-----

- Globus Connect Server collection document classes now support attributes up
  to document version 1.15.0. (:pr:`1197`)

Deprecated
----------

- Importing scope parsing tools from ``globus_sdk.experimental`` now emits a
  deprecation warning. These names were previously deprecated in documentation
  only. (:pr:`1201`)

Documentation
-------------

- Remove the badges at the top of the README. (:pr:`1194`)

.. _changelog-3.56.1:

v3.56.1 (2025-05-20)
====================

Fixed
-----

- Fix the type annotation on ``filter_roles`` for ``FlowsClient``
  to allow non-list iterables. (:pr:`1183`)

.. _changelog-3.56.0:

v3.56.0 (2025-05-05)
====================

Added
-----

- Transport objects now provide a ``close()`` method for closing resources which
  belong to them, primarily the underlying session. (:pr:`1171`)

- Add ``activity_notification_policy`` to GuestCollectionDocument,
  associating it with GCS collection document version 1.14.0. (:pr:`1172`)

- ``FlowsClient.list_flows`` and ``FlowsClient.list_runs`` now support the
  ``filter_roles`` parameter to filter results by one or more roles. (:pr:`1174`)

- ``AuthLoginClient`` now supports a ``session_message`` when constructing an
  OAuth2 authorization URL. (:pr:`1179`)

- ``LoginFlowManager`` will now use a ``session_message`` present in the
  supplied ``GlobusAuthorizationParameters`` as part of the login flow. (:pr:`1179`)

Changed
-------

- When parsing GAREs using ``to_gare`` and ``to_gares``, the root document is
  now considered a possible location for a GARE when subdocument errors are
  present on a ``GlobusAPIError`` object. Previously, the root document would
  only be considered in the absence of subdocument errors. (:pr:`1173`)

Deprecated
----------

- ``filter_role`` parameter for ``FlowsClient.list_flows`` is deprecated. Use
  ``filter_roles`` instead. (:pr:`1174`)

.. _changelog-3.55.0:

v3.55.0 (2025-04-18)
====================

Added
-----

- ``FlowsClient.create_flow`` and ``FlowsClient.update_flow`` now support ``run_managers``
  and ``run_monitors``. (:pr:`1164`)

- ``SpecificFlowClient.run_flow()`` now supports ``activity_notification_policy``
  as an argument, allowing users to select when their run will notify them. A
  new helper, ``RunActivityNotificationPolicy``, makes construction of valid
  policies easier. (:pr:`1167`)

Changed
-------

- The initialization of a client with a ``GlobusApp`` has been improved and is
  now available under the public ``attach_globus_app`` method on client
  classes. Attaching an app is only valid for clients which were initialized
  without an app or authorizer. (:pr:`1137`)

- When a ``GlobusApp`` is used with a client, that client's ``app_scopes``
  attribute will now always be populated with the scopes that it passed back to
  the app. (:pr:`1137`)

.. _changelog-3.54.0:

v3.54.0 (2025-04-02)
====================

Changed
-------

- Added the optional ``required_mfa`` field to ``AuthClient.create_policy()`` and
  ``AuthClient.update_policy()`` request bodies. (:pr:`1159`)

.. _changelog-3.53.0:

v3.53.0 (2025-03-25)
====================

Added
-----

- Index listing in Globus Search is now available via
  ``SearchClient.index_list``. (:pr:`1155`)

Changed
-------

- The ``repr`` for ``globus_sdk.gare.GARE`` has been enhanced to be more
  informative. (:pr:`1156`)

Documentation
-------------

- New sections on ``Data Transfer`` and ``Session & Consents`` have been added
  to the User Guide in the docs.
  Initial docs cover transfer submission, timer creation, deadlines, and
  reauthentication after session timeouts. (:pr:`1150`, :pr:`1154`, :pr:`1157`)

.. _changelog-3.52.0:

v3.52.0 (2025-03-19)
====================

Added
-----

- The ``transport`` attached to clients now exposes ``headers`` as a readable
  and writable dict of headers which will be included in every request.
  Headers provided to the transport's ``request()`` method overwrite these, as
  before. (:pr:`1140`)

Changed
-------

- Updates to ``X-Globus-Client-Info`` in ``RequestsTransport.headers`` are now
  synchronized via a callback mechanism. Direct manipulations of the ``infos``
  list will not result in headers being updated -- callers wishing to modify
  these data should rely only on the ``add()`` and ``clear()`` methods of the
  ``GlobusClientInfo`` object. (:pr:`1140`)

- ``globus_sdk`` logging no longer emits any INFO-level log messages. All INFO
  messages have been downgraded to DEBUG. (:pr:`1146`)

Documentation
-------------

- The tutorial documentation has been rewritten. (:pr:`1145`)

.. _changelog-3.51.0:

v3.51.0 (2025-03-06)
====================

Added
-----

- Most client classes now have their ``__doc__`` attribute modified at runtime
  to provide better ``help()`` and sphinx documentation. (:pr:`1131`)

- Introduce ``globus_sdk.IDTokenDecoder``, which implements ``id_token``
  decoding. (:pr:`1136`)

  - For integration with ``GlobusApp``, a new builder protocol is defined,
    ``IDTokenDecoderProvider``. This defines instantiation within the context
    of an app.

  - When ``OAuthTokenResponse.decode_id_token`` is called, it now internally
    instantiates an ``IDTokenDecoder`` and uses it to perform the decode.

  - ``IDTokenDecoder`` objects cache OpenID configuration data and JWKs
    after looking them up. If a decoder is used multiple times, it will reuse
    the cached data.

  - Token storage constructs can now contain an ``IDTokenDecoder`` in their
    ``id_token_decoder`` attribute. The decoder is used preferentially when
    trying to read the ``sub`` field from an ``id_token`` to store.

  - ``GlobusAppConfig`` can now contain ``id_token_decoder``, an
    ``IDTokenDecoder`` or ``IDTokenDecoderProvider``.
    The default is ``IDTokenDecoder``.

  - ``GlobusApp`` initialization will now use the config's
    ``id_token_decoder`` and attach the ``IDTokenDecoder`` to the
    token storage which is used.

- ``ConnectorTable`` has a new classmethod, ``extend`` which allows users to
  add new connectors to the mapping. ``ConnectorTable.extend()`` returns a new
  connector table subclass and does not modify the original. (:pr:`1021`)

- Add ``ComputeClientV3.register_function()`` method. (:pr:`1142`)

Changed
-------

- The SDK now defaults JWT leeway to 300 seconds when decoding ``id_token``\s;
  the previous leeway was 0.5 seconds. Users should find that they are much
  less prone to validation errors when working in VMs or other scenarios which
  can cause significant clock drift. (:pr:`1135`)

.. _changelog-3.50.0:

v3.50.0 (2025-01-14)
====================

Added
-----

- Subclasses of ``BaseClient`` may now specify ``base_url`` as class attribute. (:pr:`1125`)

Fixed
-----

- Fixed an incorrect URL path in ``ComputeClient.get_task_batch``. (:pr:`1117`)

- Fix a bug in ``StorageGatewayDocument`` which stored any ``allowed_domains``
  argument under an ``"allow_domains"`` key instead of the correct key,
  ``"allowed_domains"``. (:pr:`1120`)

Documentation
-------------

- Updated GlobusAppConfig docs to explain how to disable auto-login. (:pr:`1127`)

.. _changelog-3.49.0:

v3.49.0 (2024-12-04)
====================

Added
-----

- Add ``filter_entity_type`` keyword argument on ``TransferClient.endpoint_search()``. (:pr:`1109`)

- Added the ``ComputeClientV3.register_endpoint()``, ``ComputeClientV3.update_endpoint()``
  ``ComputeClientV3.lock_endpoint()``, and ``ComputeClientV3.get_endpoint_allowlist()``
  methods. (:pr:`1113`)

- Added the ``ComputeClientV2.get_version()`` and ``ComputeClientV2.get_result_amqp_url()``
  methods. (:pr:`1114`)

.. _changelog-3.48.0:

v3.48.0 (2024-11-21)
====================

Added
-----

- Added the ``ComputeClientV2.register_endpoint()``, ``ComputeClientV2.get_endpoint()``
  ``ComputeClientV2.get_endpoint_status()``, ``ComputeClientV2.get_endpoints()``,
  ``ComputeClientV2.delete_endpoint()``, and ``ComputeClientV2.lock_endpoint()``
  methods. (:pr:`1110`)

Changed
-------

-   Removed identity ID consistency validation from ``ClientApp``. (:pr:`1111`)

Fixed
-----

-   Fixed a bug that would cause ``ClientApp`` token refreshes to fail. (:pr:`1111`)

.. _changelog-3.47.0:

v3.47.0 (2024-11-08)
====================

Added
-----

- Add ``TimersClient.add_app_transfer_data_access_scope`` for ``TimersClient``
  instances which are integrated with ``GlobusApp``. This method registers the
  nested scope dependency for a ``data_access`` requirement for a transfer
  timer. (:pr:`1074`)

- ``SearchQueryV1`` is a new class for submitting complex queries replacing
  the legacy ``SearchQuery`` class. A deprecation warning has been added to the
  ``SearchQuery`` class. (:pr:`1079`)

- Created ``ComputeClientV2`` and ``ComputeClientV3`` classes to support Globus Compute
  API versions 2 and 3, respectively. The canonical ``ComputeClient`` is now a subclass
  of ``ComputeClientV2``, preserving backward compatibility. (:pr:`1096`)

- Added the ``ComputeClientV3.submit()``, ``ComputeClientV2.submit()``,
  ``ComputeClientV2.get_task()``, ``ComputeClientV2.get_task_batch()``,
  and ``ComputeClientV2.get_task_group()`` methods. (:pr:`1094`)

Changed
-------

- Improved error messaging around EOF errors when prompting for code during a command
  line login flow (:pr:`1093`)

Deprecated
----------

- Deprecated the ``ComputeFunctionDocument`` and ``ComputeFunctionMetadata`` classes.
  This change reflects an early design adjustment to better align with the existing
  Globus Compute SDK. (:pr:`1092`)

Development
-----------

- Introduce a ``toxfile.py`` to ensure clean builds during development. (:pr:`1098`)

- The lazy importer used for the top-level ``globus_sdk`` module has been rewritten.
  It produces identical results to the previous system. (:pr:`1100`)

.. _changelog-3.46.0:

v3.46.0 (2024-10-15)
====================

Python Support
--------------

- Support Python 3.13. (:pr:`1058`)

Added
-----

-   Added an initial Globus Compute client class, :class:`globus_sdk.ComputeClient`.
    (:pr:`1071`)

    -   Application errors are raised as a :class:`globus_sdk.ComputeAPIError`.

    -   A single method, ``ComputeClient.get_function`` is included initially to get
        information about a registered function.

    -   Compute scopes are defined at ``globus_sdk.scopes.ComputeScopes`` or
        ``globus_sdk.ComputeClient.scopes``.

-   Added the ``ComputeClient.register_function()`` and
    ``ComputeClient.delete_function()`` methods. (:pr:`1085`)

    -   ``ComputeClient.register_function()`` introduces new data model classes:
        ``ComputeFunctionDocument`` and ``ComputeFunctionMetadata``.

-   Added the ``TransferClient.set_subscription_id()`` method. (:pr:`1073`)

-   Added a new error type, ``globus_sdk.ValidationError``, used in certain cases of
    ``ValueError``\s caused by invalid content. (:pr:`1044`)

Removed
-------

-   Removed the ``skip_error_handling`` optional kwarg from the
    ``GlobusApp.get_authorizer(...)`` method interface. (:pr:`1060`)

Changed
-------

-   All previously experimental modules have been moved into main module namespaces
    and are no longer experimental. Aliases will remain in the experimental namespaces
    with a deprecation warning until SDKv4.

    -   :ref:`gares` have been moved from
        ``globus_sdk.experimental.auth_requirements_error`` to ``globus_sdk.gare``.
        (:pr:`1048`)

        -   The primary document type has been renamed from
            ``GlobusAuthRequirementsError`` to ``GARE``.

        -   The functions provided by this interface have been renamed to use
            ``gare`` in their naming: ``to_gare``, ``is_gare``, ``has_gares``, and
            ``to_gares``.

    -   :ref:`globus_apps` have been moved from ``globus_sdk.experimental.globus_app``
        to ``globus_sdk`` and ``globus_sdk.globus_app``. (:pr:`1085`)

    -   :ref:`login_flow_managers` have been moved from
        ``globus_sdk.experimental.login_flow_managers`` to ``globus_sdk.login_flows``.
        (:pr:`1057`)

    -   :ref:`token_storages` have been moved from
        ``globus_sdk.experimental.tokenstorage`` to ``globus_sdk.tokenstorage``.
        (:pr:`1065`)

    -   :ref:`consents` have been moved from ``globus_sdk.experimental.consents`` to
        ``globus_sdk.scopes.consents``. (:pr:`1047`)

-   The response classes for OAuth2 token grants now vary by the grant type. For
    example, a ``refresh_token``-type grant now produces a
    :class:`globus_sdk.OAuthRefreshTokenResponse`. This allows code handling responses
    to more easily identify which grant type produced a response. (:pr:`1051`)

    -   The following new classes have been introduced:
        :class:`globus_sdk.OAuthRefreshTokenResponse`,
        :class:`globus_sdk.OAuthAuthorizationCodeResponse`, and
        :class:`globus_sdk.OAuthClientCredentialsResponse`.

    -   The ``RenewingAuthorizer`` class is now a generic over the response type
        which it handles, and the subtypes of authorizers are specialized for their
        types of responses. e.g.,
        ``class RefreshTokenAuthorizer(RenewingAuthorizer[OAuthRefreshTokenResponse])``.

-   The mechanisms of token data validation inside of ``GlobusApp`` are now more
    modular and extensible. The ``ValidatingTokenStorage`` class does not define
    built-in validation behaviors, but instead contains a list of validator
    objects, which can be extended and otherwise altered. (:pr:`1061`)

    -   These changes allow more validation criteria around token data to be
        handled within the ``ValidatingTokenStorage``. This changes error behaviors
        to avoid situations in which multiple errors are raised serially by
        different layers of GlobusApp.

-   ``LoginFlowManager``\s built with ``GlobusApp`` now generate a more
    appropriate value for ``prefill_named_grant``, using the current
    hostname if possible. (:pr:`1075`)


-   Imports of ``globus_sdk.exc`` now defer importing ``requests`` so as to
    reduce import-time performance impact the library is not needed. (:pr:`1044`)

    The following error classes are now lazily loaded even when
    ``globus_sdk.exc`` is imported: ``GlobusConnectionError``,
    ``GlobusConnectionTimeoutError``, ``GlobusTimeoutError``, and ``NetworkError``.

Fixed
-----

-   Fixed the typing-time attributes of ``globus_sdk`` so that ``mypy`` and other
    type checkers won't erroneously suppress errors about missing attributes.
    (:pr:`1052`)

-   Fixed the handling of Dependent Token and Refresh Token responses in
    ``TokenStorage`` and ``ValidatingTokenStorage`` such that ``id_token`` is only
    parsed when appropriate. (:pr:`1055`)

-   Fixed a bug where upgrading from access token to refresh token mode in a
    ``GlobusApp`` could result in multiple login prompts. (:pr:`1060`)

.. _changelog-3.45.0:

v3.45.0 (2024-09-06)
====================

Added
-----

- The scope builder for ``SpecificFlowClient`` is now available for direct
  access and use via ``globus_sdk.scopes.SpecificFlowScopeBuilder``. Callers can
  initialize this class with a ``flow_id`` to get a scope builder for a
  specific flow, e.g., ``SpecificFlowScopeBuilder(flow_id).user``.
  ``SpecificFlowClient`` now uses this class internally. (:pr:`1030`)

- ``TransferClient.add_app_data_access_scope`` now accepts iterables of
  collection IDs as an alternative to individual collection IDs. (:pr:`1034`)

.. rubric:: Experimental

-   Added ``login(...)``, ``logout(...)``, and ``login_required(...)`` to the
    experimental ``GlobusApp`` construct. (:pr:`1041`)

    -   ``login(...)`` initiates a login flow if:

        -   the current entity requires a login to satisfy local scope requirements or
        -   ``auth_params``/``force=True`` is passed to the method.

    -   ``logout(...)`` remove and revokes the current entity's app-associated tokens.

    -   ``login_required(...)`` returns a boolean indicating whether the app believes
        a login is required to satisfy local scope requirements.

Removed
-------

.. rubric:: Experimental

-   Made ``run_login_flow`` private in the experimental ``GlobusApp`` construct.
    Usage sites should be replaced with either ``app.login()`` or
    ``app.login(force=True)``. (:pr:`1041`)

    -   **Old Usage**

        .. code-block:: python

            app = UserApp("my-app", client_id="<my-client-id>")
            app.run_login_flow()

    -   **New Usage**

        .. code-block:: python

            app = UserApp("my-app", client_id="<my-client-id>")
            app.login(force=True)

Changed
-------

- The client for Globus Timers has been renamed to ``TimersClient``. The prior
  name, ``TimerClient``, has been retained as an alias. (:pr:`1032`)

  - Similarly, the error and scopes classes have been renamed and aliased:
    ``TimersAPIError`` replaces ``TimerAPIError`` and ``TimersScopes`` replaces
    ``TimerScopes``.

  - Internal module names have been changed to ``timers`` from ``timer`` where
    possible.

  - The ``service_name`` attribute is left as ``timer`` for now, as it is
    integrated into URL and ``_testing`` logic.

.. rubric:: Experimental

- The experimental ``TokenStorageProvider`` and ``LoginFlowManagerProvider``
  protocols have been updated to require keyword-only arguments for their
  ``for_globus_app`` methods. This protects against potential ordering
  confusion for their arguments. (:pr:`1028`)

- The ``default_scope_requirements`` for ``globus_sdk.FlowsClient`` has been
  updated to list the Flows ``all`` scope. (:pr:`1029`)

-   The ``CommandLineLoginFlowManager`` now exposes ``print_authorize_url`` and
    ``prompt_for_code`` as methods, which replace the ``login_prompt`` and
    ``code_prompt`` parameters. Users who wish to customize prompting behavior
    now have a greater degree of control, and can effect this by subclassing the
    ``CommandLineLoginFlowManager``. (:pr:`1039`)

    Example usage, which uses the popular ``click`` library to handle the
    prompts:

    .. code-block:: python

        import click
        from globus_sdk.experimental.login_flow_manager import CommandLineLoginFlowManager


        class ClickLoginFlowManager(CommandLineLoginFlowManager):
            def print_authorize_url(self, authorize_url: str) -> None:
                click.echo(click.style("Login here for a code:", fg="yellow"))
                click.echo(authorize_url)

            def prompt_for_code(self) -> str:
                return click.prompt("Enter the code here:")

- ``GlobusApp.token_storage`` is now a public property, allowing users
  direct access to the ``ValidatingTokenStorage`` used by the app to build
  authorizers. (:pr:`1040`)

-   The experimental ``GlobusApp`` construct's scope exploration interface has changed
    from ``app.get_scope_requirements(resource_server: str) -> tuple[Scope]`` to
    ``app.scope_requirements``. The new property will return a deep copy of the internal
    requirements dictionary mapping resource server to a list of Scopes. (:pr:`1042`)

Deprecated
----------

- ``TimerScopes`` is now a deprecated name. Use ``TimersScopes`` instead. (:pr:`1032`)

Fixed
-----

.. rubric:: Experimental

- Container types in ``GlobusApp`` function argument annotations are now
  generally covariant collections like ``Mapping`` rather than invariant
  types like ``dict``. (:pr:`1035`)

Documentation
-------------

- The Globus Timers examples have been significantly enhanced and now leverage
  more modern usage patterns. (:pr:`1032`)

.. _changelog-3.44.0:

v3.44.0 (2024-08-02)
====================

Added
-----

-   Added a reference to the new Flows all scope under
    ``globus_sdk.scopes.FlowsScopes.all``. (:pr:`1016`)

.. rubric:: Experimental

-   Added support for ``ScopeCollectionType`` to GlobusApp's ``__init__`` and
    ``add_scope_requirements`` methods. (:pr:`1020`)

Changed
-------

-   Updated ``ScopeCollectionType`` to be defined recursively. (:pr:`1020`)

- ``TransferClient.add_app_data_access_scope`` now raises an error if it is
  given an invalid collection ID. (:pr:`1022`)

.. rubric:: Experimental

-   Changed the experimental ``GlobusApp`` class in the following way (:pr:`1017`):

    -   ``app_name`` is no longer required (defaults to "Unnamed Globus App")

    -   Token storage now defaults to including the client id in the path.

        -   Old (unix) : ``~/.globus/app/{app_name}/tokens.json``

        -   New (unix): ``~/.globus/app/{client_id}/{app_name}/tokens.json``

        -   Old (win): ``~\AppData\Local\globus\app\{app_name}\tokens.json``

        -   New (win): ``~\AppData\Local\globus\app\{client_id}\{app_name}\tokens.json``

    -   ``GlobusAppConfig.token_storage`` now accepts shorthand string references:
        ``"json"`` to use a ``JSONTokenStorage``, ``"sqlite"`` to use a
        ``SQLiteTokenStorage`` and ``"memory"`` to use a ``MemoryTokenStorage``.

    -   ``GlobusAppConfig.token_storage`` also now accepts a ``TokenStorageProvider``,
        a class with a ``for_globus_app(...) -> TokenStorage`` class method.

    -   Renamed the experimental ``FileTokenStorage`` attribute ``.filename`` to
        ``.filepath``.

-   Changed the experimental ``GlobusApp`` class in the following ways (:pr:`1018`):

    -   ``LoginFlowManagers`` now insert ``GlobusApp.app_name`` into any native
        client login flows as the ``prefill_named_grant``.

    -   ``GlobusAppConfig`` now accepts a ``login_redirect_uri`` parameter to specify
        the redirect URI for a login flow.

        -   Invalid when used with a ``LocalServerLoginFlowManager``.

        -   Defaults to ``"https://auth.globus.org/v2/web/auth-code"`` for native
            client flows. Raises an error if not set for confidential ones.

    -   ``UserApp`` now allows for the use of confidential client flows with the use of
        either a ``LocalServerLoginFlowManager`` or a configured ``login_redirect_uri``.

    -   ``GlobusAppConfig.login_flow_manager`` now accepts shorthand string references
        ``"command-line"`` to use a ``CommandLineLoginFlowManager`` and
        ``"local-server"`` to use a ``LocalServerLoginFlowManager``.

    -   ``GlobusAppConfig.login_flow_manager`` also now accepts a
        ``LoginFlowManagerProvider``, a class with a
        ``for_globus_app(...) -> LoginFlowManager`` class method.

Development
-----------

-   Added a scope normalization function ``globus_sdk.scopes.scopes_to_scope_list`` to
    translate from ``ScopeCollectionType`` to a list of ``Scope`` objects.
    (:pr:`1020`)

.. _changelog-3.43.0:

v3.43.0 (2024-07-25)
====================

Added
-----

- The ``TransferClient.task_list`` method now supports ``orderby`` as a
  parameter. (:pr:`1011`)

Changed
-------

-   The ``SQLiteTokenStorage`` component in ``globus_sdk.experimental`` has been
    changed in several ways to improve its interface. (:pr:`1004`)

-   ``:memory:`` is no longer accepted as a database name. Attempts to use it
    will trigger errors directing users to use ``MemoryTokenStorage`` instead.

-   Parent directories for a target file are automatically created, and this
    behavior is inherited from the ``FileTokenStorage`` base class. (This was
    previously a feature only of the ``JSONTokenStorage``.)

-   The ``config_storage`` table has been removed from the generated database
    schema, the schema version number has been incremented to ``2``, and
    methods and parameters related to manipulation of ``config_storage`` have
    been removed.

Documentation
-------------

-   Added a new experimental "Updated Examples" section which rewrites and reorders
    many examples to aid in discovery. (:pr:`1008`)

-   ``GlobusApp``, ``UserApp`, and ``ClientApp`` class reference docs. (:pr:`1013`)

-   Added a narrative example titled ``Using a GlobusApp`` detailing the basics of
    constructing and using a GlobusApp. (:pr:`1013`)

-   Remove unwritten example updates from toctree. (:pr:`1014`)

.. _changelog-3.42.0:

v3.42.0 (2024-07-15)
====================

Python Support
--------------

- Remove support for Python 3.7. (:pr:`997`)

Added
-----

- Add ``globus_sdk.ConnectorTable`` which provides information on supported
  Globus Connect Server connectors. This object maps names to IDs and vice versa. (:pr:`955`)

- Support adding query parameters to ``ConfidentialAppAuthClient.oauth2_token_introspect``
  via a ``query_params`` argument. (:pr:`984`)

- Add ``get_gcs_info`` as a helper method to ``GCSClient`` for getting information
  from a Globus Connect Server's ``info`` API route.

- Add ``endpoint_client_id`` as a property to ``GCSClient``.

- Clients will now emit a ``X-Globus-Client-Info`` header which reports the
  version of the ``globus-sdk`` which was used to send a request. Users may
  customize this header further by modifying the ``globus_client_info`` object
  attached to the transport object. (:pr:`990`)

.. rubric:: Experimental

- Add a new abstract class, ``TokenStorage``, to ``experimental``.
  ``TokenStorage`` expands the functionality of ``StorageAdapter`` but is not
  fully backwards compatible. (:pr:`980`)

    - ``FileTokenStorage``, ``JSONTokenStorage``, ``MemoryTokenStorage`` and
      ``SQLiteTokenStorage`` are new concrete implementations of ``TokenStorage``.

- Add ``ValidatingStorageAdapter`` to ``experimental``, which validates that
  identity is maintained and scope requirements are met on token
  storage/retrieval. (:pr:`978`, :pr:`980`)

- Add a new abstract class, ``AuthorizerFactory`` to ``experimental``.
  ``AuthorizerFactory`` provides an interface for getting a
  ``GlobusAuthorizer`` from a ``ValidatingTokenStorage``. (:pr:`985`)

    - ``AccessTokenAuthorizerFactory``, ``RefreshTokenAuthorizerFactory``, and
      ``ClientCredentialsAuthorizerFactory`` are new concrete implementations
      of ``AuthorizerFactory``.

- Add a new abstract class, ``GlobusApp`` to ``experimental``. A ``GlobusApp``
  is an abstraction which allows users to define their authorization
  requirements implicitly and explicitly, attach that state to their
  various clients, and drive login flows. (:pr:`986`)

    - ``UserApp`` and ``ClientApp`` are new implementations of ``GlobusApp``
      which handle authentications for user-login and client-credentials.

   - ``GlobusAppConfig`` is an object which can be used to control
     ``GlobusApp`` behaviors.

- Add ``app`` as an optional argument to ``BaseClient`` which will accept a
  ``GlobusApp`` to handle authentication, token validation, and token storage when
  using the client.

- Add ``default_scope_requirements`` as a property to ``BaseClient``
  for subclasses to define scopes to automatically be used with a ``GlobusApp``. The
  default implementation raises a ``NotImplementedError``.

- Add ``add_app_scope`` to ``BaseClient`` as an interface for adding additional
  scope requirements to its ``app``.

- ``AuthClient``, ``FlowsClient``, ``GCSClient``, ``GroupsClient``, ``SearchClient``,
  ``TimerClient``, and ``TransferClient`` all add ``app`` as an optional argument and
  define ``default_scope_requirements`` so that they can be used with a ``GlobusApp``.

- Add ``add_app_data_access_scope`` to ``TransferClient`` as an interface
  for adding a dependent data access scope requirements needed for interacting
  with standard Globus Connect Server mapped collections to its ``app``.

- Auto-login (overridable in config) GlobusApp login retry on token validation error. (:pr:`994`)

- Added the configuration parameter ``GlobusAppConfig.environment``. (:pr:`1001`)

Changed
-------

- ``GCSClient`` instances now have a non-None ``resource_server`` property.

- ``GlobusAuthorizationParameters`` no longer enforces that at least one
  field is set. (:pr:`989`)

- Improved the validation and checking used inside of
  ``globus_sdk.tokenstorage.SimpleJSONFileAdapter`` and
  ``globus_sdk.experimental.tokenstorage.JSONTokenStorage``. (:pr:`997`)

Deprecated
----------

- ``GCSClient.connector_id_to_name`` has been deprecated.
  Use ``ConnectorTable.lookup`` instead. (:pr:`955`)

Fixed
-----

.. rubric:: Experimental

- When a ``JSONTokenStorage`` is used, the containing directory will be automatically be
  created if it doesn't exist. (:pr:`998`)

- ``GlobusApp.add_scope_requirements`` now has the side effect of clearing the
  authorizer cache for any referenced resource servers. (:pr:`1000`)

- ``GlobusAuthorizer.scope_requirements`` was made private and a new method for
  accessing scope requirements was added at ``GlobusAuthorizer.get_scope_requirements``.
  (:pr:`1000`)

- A ``GlobusApp`` will now auto-create an Auth consent client for dependent scope
  evaluation against consents as a part of instantiation. (:pr:`1000`)

- Fixed a bug where specifying dependent tokens in a new ``GlobusApp`` would cause the app
  to infinitely prompt for log in. (:pr:`1002`)

- Fixed a ``GlobusApp`` bug which would cause LocalServerLoginFlowManager to error on
  MacOS when versions earlier than Python 3.11. (:pr:`1003`)

Documentation
-------------

- Document how to manage Globus SDK warnings. (:pr:`988`)

.. _changelog-3.41.0:

v3.41.0 (2024-04-26)
====================

Added
-----

- Added a new AuthClient method ``get_consents`` and supporting local data objects.
  These allows a client to poll and interact with the current Globus Auth consent state
  of a particular identity rooted at their client. (:pr:`971`)

- Added ``LoginFlowManager`` and ``CommandLineLoginFLowManager`` to experimental (:pr:`972`)

- Added ``LocalServerLoginFlowManager`` to experimental (:pr:`977`)

- Added support to ``FlowsClient`` for the ``validate_flow`` operation of the
  Globus Flows service. (:pr:`979`)

.. _changelog-3.40.0:

v3.40.0 (2024-04-15)
====================

Added
-----

- Add ``globus_sdk.tokenstorage.MemoryAdapter`` for the simplest possible
  in-memory token storage mechanism. (:pr:`964`)

- ``ConfidentialAppAuthClient.oauth2_get_dependent_tokens`` now supports the
  ``scope`` parameter as a string or iterable of strings. (:pr:`965`)

- Moved scope parsing out of experimental. The ``Scope`` construct is now importable from
  the top level ``globus_sdk`` module. (:pr:`966`)

- Support updating subscriptions assigned to flows in the Flows service. (:pr:`974`)

Development
-----------

- Fix concurrency problems in the test suite caused by isort's ``.isorted`` temporary files. (:pr:`973`)

.. _changelog-3.39.0:

v3.39.0 (2024-03-06)
====================

Added
-----

- Added ``TransferClient.operation_stat`` helper method for getting the status of a path on a collection (:pr:`961`)

.. _changelog-3.38.0:

v3.38.0 (2024-03-01)
====================

Added
-----

- ``IterableGCSResponse`` and ``UnpackingGCSResponse`` are now available as
  top-level exported names. (:pr:`956`)

- Add ``GroupsClient.get_group_by_subscription_id`` for resolving subscriptions
  to groups. This also expands the ``_testing`` data for ``get_group`` to
  include a subscription group case. (:pr:`957`)

- Added ``prompt`` to the recognized *Globus Authorization Requirements Error*
  ``authorization_parameters`` fields. (:pr:`958`)

.. _changelog-3.37.0:

v3.37.0 (2024-02-14)
====================

Added
-----

- All of the basic HTTP methods of ``BaseClient`` and its derived classes which
  accept a ``data`` parameter for a request body, e.g. ``TransferClient.post``
  or ``GroupsClient.put``, now allow the ``data`` to be passed in the form of
  already encoded ``bytes``. (:pr:`951`)

Fixed
-----

- Update ``ensure_datatype`` to work with documents that set ``DATA_TYPE`` to
  ``MISSING`` instead of omitting it (:pr:`952`)

.. _changelog-3.36.0:

v3.36.0 (2024-02-12)
====================

Added
-----

- Added support for GCS endpoint get & update operations (:pr:`933`)

  - ``gcs_client.get_endpoint()``
  - ``gcs_client.update_endpoint(EndpointDocument(...))``

- ``TransferClient.endpoint_manager_task_list()`` now supports
  ``filter_endpoint_use`` as a parameter. (:pr:`948`)

- ``FlowsClient.create_flow`` now supports ``subscription_id`` as a parameter.
  (:pr:`949`)

.. _changelog-3.35.0:

v3.35.0 (2024-01-29)
====================

Added
-----

- Added a ``session_required_mfa`` parameter to the ``AuthorizationParameterInfo`` error
  info object and ``oauth2_get_authorize_url`` method (:pr:`939`)

Changed
-------

- The argument specification for ``AuthClient.create_policy`` was incorrect.
  The corrected method will emit deprecation warnings if called with positional
  arguments, as the corrected version uses keyword-only arguments. (:pr:`936`)

Deprecated
----------

- ``TransferClient.operation_symlink`` is now officially deprecated and will
  emit a ``RemovedInV4Warning`` if used. (:pr:`942`)

Fixed
-----

- Included documentation in ``AuthorizationParameterInfo`` for ``session_required_policies``
  (:pr:`939`)

.. _changelog-3.34.0:

v3.34.0 (2024-01-02)
====================

Added
-----

- Add the ``delete_protected`` field to ``MappedCollectionDocument``. (:pr:`920`)

Changed
-------

- Minor improvements to handling of paths and URLs. (:pr:`922`)

  - Request paths which start with the ``base_path`` of a client are now
    normalized to avoid duplicating the ``base_path``.

  - When a ``GCSClient`` is initialized with an HTTPS URL, if the URL does not
    end with the ``/api`` suffix, that suffix will automatically be appended.
    This allows the ``gcs_manager_url`` field from Globus Transfer to be used
    verbatim as the address for a ``GCSClient``.

Deprecated
----------

- ``NativeAppAuthClient.oauth2_validate_token`` and
  ``ConfidentialAppAuthClient.oauth2_validate_token`` have been deprecated, as
  their usage is discouraged by the Auth service. (:pr:`921`)

Development
-----------

- Migrate from a CHANGELOG symlink to the RST ``.. include`` directive. (:pr:`918`)

- Tutorial endpoint references are removed from tests and replaced with
  bogus values. (:pr:`919`)

.. _changelog-3.33.0.post0:

v3.33.0.post0 (2023-12-05)
==========================

Documentation
-------------

- Remove references to the Tutorial Endpoints from documentation. (:pr:`915`)

.. _changelog-3.33.0:

v3.33.0 (2023-12-04)
====================

Added
-----

- Support custom CA certificate bundles. (:pr:`903`)

  Previously, SSL/TLS verification allowed only a boolean ``True`` or ``False`` value.
  It is now possible to specify a CA certificate bundle file
  using the existing ``verify_ssl`` parameter
  or ``GLOBUS_SDK_VERIFY_SSL`` environment variable.

  This may be useful for interacting with Globus through certain proxy firewalls.

Fixed
-----

- Fix the type annotation for ``globus_sdk.IdentityMap`` init,
  which incorrectly rejected ``ConfidentialAppAuthClient``. (:pr:`912`)

.. _changelog-3.32.0:

v3.32.0 (2023-11-09)
====================

Added
-----

.. note::
    These changes pertain to methods of the client objects in the SDK which
    interact with Globus Auth client registration.
    To disambiguate, we refer to the Globus Auth entities below as "Globus Auth
    clients" or specify "in Globus Auth", as appropriate.

- Globus Auth clients objects now have methods for interacting with client and
  project APIs. (:pr:`884`)

  - ``NativeAppAuthClient.create_native_app_instance`` creates a new native app
    instance in Globus Auth for a client.

  - ``ConfidentialAppAuthClient.create_child_client`` creates a child client in
    Globus Auth for a confidential app.

  - ``AuthClient.get_project`` looks up a project.

  - ``AuthClient.get_policy`` looks up a policy document.

  - ``AuthClient.get_policies`` lists all policies in all projects for which
    the current user is an admin.

  - ``AuthClient.create_policy`` creates a new policy.

  - ``AuthClient.update_policy`` updates an existing policy.

  - ``AuthClient.delete_policy`` deletes a policy.

  - ``AuthClient.get_client`` looks up a Globus Auth client by ID or FQDN.

  - ``AuthClient.get_clients`` lists all Globus Auth clients for which the
    current user is an admin.

  - ``AuthClient.create_client`` creates a new client in Globus Auth.

  - ``AuthClient.update_client`` updates an existing client in Globus Auth.

  - ``AuthClient.delete_client`` deletes a client in Globus Auth.

  - ``AuthClient.get_client_credentials`` lists all client credentials for a
    given Globus Auth client.

  - ``AuthClient.create_client_credential`` creates a new client credential for
    a given Globus Auth client.

  - ``AuthClient.delete_client_credential`` deletes a client credential.

  - ``AuthClient.get_scope`` looks up a scope.

  - ``AuthClient.get_scopes`` lists all scopes in all projects for which the
    current user is an admin.

  - ``AuthClient.create_scope`` creates a new scope.

  - ``AuthClient.update_scope`` updates an existing scope.

  - ``AuthClient.delete_scope`` deletes a scope.

- A helper object has been defined for dependent scope manipulation via the
  scopes APIs, ``globus_sdk.DependentScopeSpec`` (:pr:`884`)

Fixed
-----

- When serializing ``TransferTimer`` data, do not convert to UTC if the input
  was a valid datetime with an offset. (:pr:`900`)

.. _changelog-3.31.0:

v3.31.0 (2023-11-01)
====================

Added
-----

- Add support for the new Transfer Timer creation method, in the form of a
  client method, ``TimerClient.create_timer``, and a payload builder type,
  ``TransferTimer`` (:pr:`887`)

  - ``create_timer`` only supports dict data and ``TransferTimer``, not the
    previous ``TimerJob`` type

  - Additional helper classes, ``RecurringTimerSchedule`` and
    ``OneceTimerSchedule``, are provided to help build the ``TransferTimer``
    payload

- Request encoding in the SDK will now automatically convert any ``uuid.UUID``
  objects into strings. Previously this was functionality provided by certain
  methods, but now it is universal. (:pr:`892`)

Deprecated
----------

- Creation of timers to run transfers using ``TimerJob`` is now
  deprecated (:pr:`887`)

.. _changelog-3.30.0:

v3.30.0 (2023-10-27)
====================

Added
-----

- ``TransferClient.operation_ls`` now supports the ``limit`` and ``offset``
  parameters (:pr:`868`)

- A new sentinel value, ``globus_sdk.MISSING``, has been introduced.
  It is used for method calls which need to distinguish missing parameters from
  an explicit ``None`` used to signify ``null`` (:pr:`885`)

  - ``globus_sdk.MISSING`` is now supported in payload data for all methods, and
    will be automatically removed from the payload before sending to the server

Changed
-------

- ``GroupPolicies`` objects now treat an explicit instantiation with
  ``high_assurance_timeout=None`` as setting the timeout to ``null`` (:pr:`885`)

.. _changelog-3.29.0:

v3.29.0 (2023-10-12)
====================

Changed
-------

- The inheritance structure used for Globus Auth client classes has changed.
  (:pr:`849`)

  - A new class, ``AuthLoginClient``, is the base for ``NativeAppAuthClient``
    and ``ConfidentialAppAuthClient``. These classes no longer inherit from
    ``AuthClient``, and therefore no longer inherit certain methods which would
    never succeed if called.

  - ``AuthClient`` is now the only class which provides functionality
    for accessing Globus Auth APIs.

  - ``AuthClient`` no longer includes methods for OAuth 2 login flows which
    would only be valid to call on ``AuthLoginClient`` subclasses.

Deprecated
----------

- Several features of Auth client classes are now deprecated. (:pr:`849`)

  - Setting ``AuthClient.client_id`` or accessing it as an attribute
    is deprecated and will emit a warning.

  - ``ConfidentialAppAuthClient.get_identities`` has been preserved as a valid
    call, but will emit a warning. Users wishing to access this API via client
    credentials should prefer to get an access token using a client credential
    callout, and then use that token to call ``AuthClient.get_identities()``.

- The ``AuthClient.oauth2_userinfo`` method has been deprecated in favor of
  ``AuthClient.userinfo``. Callers should prefer the new method name. (:pr:`865`)

.. _changelog-3.28.0:

v3.28.0 (2023-08-30)
====================

Python Support
--------------

- Add support for Python 3.12. (:pr:`808`)

Added
-----

- Add a ``prompt`` keyword parameter to ``AuthClient.oauth2_get_authorize_url()``. (:pr:`813`)

  Setting this parameter requires users to authenticate with an identity provider,
  even if they are already logged in. Doing so can help avoid errors caused by
  unexpected session required policies, which would otherwise require a second,
  follow-up login flow.

  ``prompt`` could previously only be set via the ``query_params`` keyword parameter.
  It is now more discoverable.

- Add ``TimerClient.pause_job`` and ``TimerClient.resume_job`` for pausing and
  resuming timers. (:pr:`827`)

Documentation
-------------

- Add an example script which handles creating and running a **flow**. (:pr:`826`)

Development
-----------

- Added responses to ``_testing`` reflecting an inactive Timers job (:pr:`828`)

.. _changelog-3.27.0:

v3.27.0 (2023-08-11)
====================

Added
-----

- Add a ``FlowsClient.get_run_definition()`` method. (:pr:`799`)

Changed
-------

- ``FlowsClient.get_run_logs()`` now uses an ``IterableRunLogsResponse``. (:pr:`797`)

.. _changelog-3.26.0:

v3.26.0 (2023-08-07)
====================

Added
-----

- New components are introduced to the experimental subpackage. See the SDK
  Experimental documentation for more details.

  - Add tools which manipulate Globus Auth Requirements error data.
    ``globus_sdk.experimental.auth_requirements_error`` provides a data
    container class, ``GlobusAuthRequirementsError``, and functions for
    converting and validating data against this shape. (:pr:`768`)

  - Introduce an experimental Globus Auth scope parser in
    ``globus_sdk.experimental.scope_parser`` (:pr:`752`)

Changed
-------

- The ``scopes`` class attribute of ``SpecificFlowClient`` is now specialized
  to ensure that type checkers will allow access to ``SpecificFlowClient``
  scopes and ``resource_server`` values without ``cast``\ing. The value used is
  a specialized stub which raises useful errors when class-based access is
  performed. The ``scopes`` instance attribute is unchanged. (:pr:`793`)

.. _changelog-3.25.0:

v3.25.0 (2023-07-20)
====================

Added
-----

- The ``jwt_params`` argument to ``decode_id_token()`` now allows ``"leeway"``
  to be included to pass a ``leeway`` parameter to pyjwt. (:pr:`790`)

Fixed
-----

- ``decode_id_token()`` defaulted to having no tolerance for clock drift. Slight
  clock drift could lead to JWT claim validation errors. The new default is
  0.5s which should be sufficient for most cases. (:pr:`790`)

Documentation
-------------

- New scripts in the example gallery demonstrate usage of the Globus Auth
  Developer APIs to List, Create, Delete, and Update Projects. (:pr:`777`)

.. _changelog-3.24.0:

v3.24.0 (2023-07-18)
====================

Added
-----

- Add ``FlowsClient.list_runs`` as a method for listing all runs for the
  current user, with support for pagination. (:pr:`782`)

- Add ``SearchClient`` methods for managing search index lifecycle:
  ``create_index``, ``delete_index``, and ``reopen_index`` (:pr:`785`)

Changed
-------

- The enforcement logic for URLs in ``BaseClient`` instantiation has been
  improved to only require that ``service_name`` be set if ``base_url`` is not
  provided. (:pr:`786`)

  - This change primarily impacts subclasses, which no longer need to set the
    ``service_name`` class variable if they ensure that the ``base_url`` is
    always passed with a non-null value.

  - Direct instantiation of ``BaseClient`` is now possible, although not
    recommended for most use-cases.

.. _changelog-3.23.0:

v3.23.0 (2023-07-06)
====================

Added
-----

- Add ``AuthClient`` methods to support the Projects APIs for listing,
  creating, updating, and deleting projects.

  - ``AuthClient.get_projects`` (:pr:`766`)
  - ``AuthClient.create_project`` (:pr:`772`)
  - ``AuthClient.update_project`` (:pr:`774`)
  - ``AuthClient.delete_project`` (:pr:`776`)

- ``globus_sdk._testing`` now exposes a method, ``construct_error`` which makes
  it simpler to explicitly construct and return a Globus SDK error object for
  testing. This is used in the SDK's own testsuite and is available for
  ``_testing`` users. (:pr:`770`)

- ``AuthClient.oauth2_get_authorize_url`` now supports the following parameters
  for session management: ``session_required_identities``,
  ``session_required_single_domain``, and ``session_required_policies``. Each
  of these accept list inputs, as returned by
  ``ErrorInfo.authorization_parameters``. (:pr:`773`)

Changed
-------

* ``AuthClient``, ``NativeAppAuthClient``, and ``ConfidentialAppAuthClient``
  have had their init signatures updated to explicitly list available
  parameters. (:pr:`764`)

  * Type annotations for these classes are now more accurate

  * The ``NativeAppAuthClient`` and ``ConfidentialAppAuthClient`` classes do
    not accept ``authorizer`` in their init signatures. Previously this was
    accepted but raised a ``GlobusSDKUsageError``. Attempting to pass an
    ``authorizer`` will now result in a ``TypeError``.

- ``session_required_policies`` parsing in ``AuthorizationParameterInfo`` now
  supports the policies being returned as a ``list[str]`` in addition to
  supporting ``str`` (:pr:`769`)

Fixed
-----

- ``AuthorizationParameterInfo`` is now more type-safe, and will not return
  parsed data from a response without checking that the data has correct types
  (:pr:`769`)

- Adjust the ``FlowsClient.get_run()`` ``include_flow_description`` parameter
  so it is submitted only when it has a value. (:pr:`778`)

Documentation
-------------

- The ``_testing`` documentation has been expanded with a dropdown view of the
  response contents for each method. In support of this, client method testing
  docs have been reorganized into a page per service. (:pr:`767`)

.. _changelog-3.22.0:

v3.22.0 (2023-06-22)
====================

Added
-----

* Add support for ``AuthClient.get_identity_providers`` for looking up Identity
  Providers by domain or ID in Globus Auth (:pr:`757`)

* Add a method to the Globus Search client, ``SearchClient.batch_delete_by_subject`` (:pr:`760`)

* Add ``AuthScopes.manage_projects`` to scope data. This is also accessible as
  ``AuthClient.scopes.manage_projects`` (:pr:`761`)

Documentation
-------------

* Alpha features of globus-sdk are now documented in the "Unstable" doc section (:pr:`753`)

.. _changelog-3.21.0:

v3.21.0 (2023-06-16)
====================

Added
-----

* ``AuthAPIError`` will now parse a unique ``id`` found in the error
  subdocuments as the ``request_id`` attribute (:pr:`749`)

* Add a ``FlowsClient.update_run()`` method. (:pr:`744`)

* Add a ``FlowsClient.delete_run()`` method. (:pr:`747`)

* Add a ``FlowsClient.cancel_run()`` method. (:pr:`747`)

* Add an ``experimental`` subpackage. (:pr:`751`)

.. _changelog-3.20.1:

v3.20.1 (2023-06-06)
====================

Fixed
-----

* Fix ``TransferClient.operation_mkdir`` and ``TransferClient.operation_rename`` to no
  longer send null ``local_user`` by default (:pr:`741`)

.. _changelog-3.20.0:

v3.20.0 (2023-06-05)
====================

Added
-----

* Implemented ``FlowsClient.get_run(...)`` (:pr:`721`)

* Implemented ``FlowsClient.get_run_logs(...)`` (:pr:`722`)

* Implemented ``SpecificFlowClient.resume_run(...)`` (:pr:`723`)

* ``ConsentRequiredInfo`` now accepts ``required_scope`` (singular) containing
  a single string as an alternative to ``required_scopes``. However, it will
  parse both formats into a ``required_scopes`` list. (:pr:`726`)

* ``FlowsClient.list_flows`` now supports passing a non-string iterable of
  strings to ``orderby`` in order to indicate multiple orderings (:pr:`730`)

* Support ``pathlib.Path`` objects as filenames for the JSON and sqlite token
  storage adapters. (:pr:`734`)

* Several ``TransferClient`` methods, ``TransferData``, and ``DeleteData`` now
  support the ``local_user``, ``source_local_user``, and
  ``destination_local_user`` parameters  (:pr:`736`)

Changed
-------

* Behavior has changed slightly specifically for ``TimerAPIError``. When parsing
  fails, the ``code`` will be ``Error`` and the ``messages`` will be empty. The
  ``detail`` field will be treated as the ``errors`` array for these errors
  when it is present and contains an array of objects.

* Error parsing in the SDK has been enhanced to better support JSON:API and
  related error formats with multiple sub-errors. Several attributes are
  added or changed. For most SDK users, the changes will be completely
  transparent or a minor improvement. (:pr:`725`)

  * Error parsing now attempts to detect the format of the error data and will
    parse JSON:API data differently from non-JSON:API data. Furthermore,
    parsing is stricter about the expectations about fields and their types.
    JSON:API parsing now has its own distinct parsing path, followed only when
    the JSON:API mimetype is present.

  * A new attribute is added to API error objects, ``errors``. This is a list
    of subdocuments parsed from the error data, especially relevant for
    JSON:API errors and similar formats. See the
    :ref:`ErrorSubdocument documentation <error_subdocuments>` for details.

  * A new attribute is now present on API error objects, ``messages``. This is
    a list of messages parsed from the error data, for errors with multiple
    messages. When there is only one message, ``messages`` will only contain
    one item.

  * The ``message`` field is now an alias for a joined string of
    ``messages``. Assigning a string to ``message`` is supported for error
    subclasses, but is deprecated.

  * ``message`` will now be ``None`` when no messages can be parsed from the error data.
    Previously, the default for ``message`` would be an alias for ``text``.

  * All error types now support ``request_id`` as an attribute, but it will
    default to ``None`` for errors which do not include a ``request_id``.

  * An additional field is checked by default for error message data,
    ``title``. This is useful when errors contain ``title`` but no
    ``detail`` field. The extraction of messages from errors has been made
    stricter, especially in the JSON:API case.

  * The ``code`` field of errors will no longer attempt to parse only the first
    ``code`` from multiple sub-errors. Instead, ``code`` will first parse a
    top-level ``code`` field, and then fallback to checking if *all* sub-errors
    have the same ``code`` value. The result is that certain errors which would
    populate a non-default ``code`` value no longer will, but the ``code`` will
    also no longer be misleading when multiple errors with different codes are
    present in an error object.

  * The ``code`` field of an error may now be ``None``. This is specifically
    possible when the error format is detected to be known as JSON:API and
    there is no ``code`` present in any responses.

Fixed
-----

* The TransferRequestsTransport will no longer automatically retry errors with a code of EndpointError

* Fix pagination on iterable gcs client routes  (:pr:`738`, :pr:`739`)

  * ``GCSClient.get_storage_gateway_list``

  * ``GCSClient.get_role_list``

  * ``GCSClient.get_collection_list``

  * ``GCSClient.get_user_credential_list``


.. _changelog-3.19.0:

v3.19.0 (2023-04-14)
====================

Added
-----

* Added ``FlowsClient.update_flow(...)`` (:pr:`710`)

* Support passing "include" as a transfer ``filter_rule`` method (:pr:`712`)

* Make the request-like interface for response objects and errors more uniform. (:pr:`715`)

  * Both ``GlobusHTTPResponse`` and ``GlobusAPIError`` are updated to ensure
    that they have the following properties in common: ``http_status``,
    ``http_reason``, ``headers``, ``content_type``, ``text``

  * ``GlobusHTTPResponse`` and ``GlobusAPIError`` have both gained a new
    property, ``binary_content``, which returns the unencoded response data as
    bytes

Deprecated
----------

* ``GlobusAPIError.raw_text`` is deprecated in favor of ``text``

Fixed
-----

* The return type of ``AuthClient.get_identities`` is now correctly annotated as
  an iterable type, ``globus_sdk.GetIdentitiesResponse`` (:pr:`716`)

Documentation
-------------

* Documentation for client methods has been improved to more consistently
  format and display examples and other information (:pr:`714`)

.. _changelog-3.18.0:

v3.18.0 (2023-03-16)
====================

Added
-----

* ``ConfidentialAppAuthClient.oauth2_get_dependent_tokens`` now supports the
  ``refresh_tokens`` parameter to enable requests for dependent refresh tokens (:pr:`698`)

Changed
-------

* Behaviors which will change in version 4.0.0 of the ``globus-sdk`` now emit
  deprecation warnings.

* ``TransferData.add_item`` now defaults to omitting ``recursive`` rather than
  setting its value to ``False``. This change better matches new Transfer API
  behaviors which treat the absence of the ``recursive`` flag as meaning
  autodetect, rather than the previous default of ``False``. Setting the
  recursive flag can still have beneficial behaviors, but should not be
  necessary for many use-cases (:pr:`696`)

Deprecated
----------

* Omitting ``requested_scopes`` or specifying it as ``None`` is now deprecated
  and will emit a warning. In version 4, users will always be required to
  specify their scopes when performing login flows. This applies to the
  following methods:

  * ``ConfidentialAppAuthClient.oauth2_client_credentials_tokens``
  * ``AuthClient.oauth2_start_flow``

* ``SearchClient.update_entry`` and ``SearchClient.create_entry`` are
  officially deprecated and will emit a warning. These APIs are aliases of
  ``SearchClient.ingest``, but their existence has caused confusion. Users are
  encouraged to switch to ``SearchClient.ingest`` instead (:pr:`695`)

Fixed
-----

* When users input empty ``requested_scopes`` values, these are now rejected
  with a usage error instead of being translated into the default set of
  ``requested_scopes``

* Fix the type annotation for ``max_sleep`` on client transports to allow ``float``
  values (:pr:`697`)

.. _changelog-3.17.0:

v3.17.0 (2023-02-27)
====================

Python Support
--------------

* Remove support for python3.6 (:pr:`681`)

Added
-----

* ``MutableScope`` objects can now be used in the ``oauth2_start_flow`` and
  ``oauth2_client_credentials_tokens`` methods of ``AuthClient`` classes as part
  of ``requested_scopes`` (:pr:`689`)

Changed
-------

* Make ``MutableScope.scope_string`` a public instance attribute (was
  ``_scope_string``) (:pr:`687`)

* Globus Groups methods which required enums as arguments now also accept
  a variety of ``Literal`` strings in their annotations as well. This is
  coupled with changes to ensure that strings and enums are always serialized
  correctly in these cases. (:pr:`691`)

Fixed
-----

* Fix a typo in ``TransferClient.endpoint_manager_task_successful_transfers``
  which prevented calls from being made correctly (:pr:`683`)

.. _changelog-3.16.0:

v3.16.0 (2023-02-07)
====================

Added
-----

* Allow UUID values for the ``client_id`` parameter to ``AuthClient`` and its
  subclasses (:pr:`676`)

Changed
-------

* Improved GCS Collection datatype detection to support ``collection#1.6.0``
  and ``collection#1.7.0`` documents (:pr:`675`)

  * ``guest_auth_policy_id`` is now supported on ``MappedCollectionDcoument``

  * ``user_message`` strings over 64 characters are now supported

* The ``session_required_policies`` attribute of ``AuthorizationInfo`` is now
  parsed as a list of strings when present, and ``None`` when absent. (:pr:`678`)

* ``globus_sdk.ArrayResponse`` and ``globus_sdk.IterableResponse`` are now
  available as names. Previously, these were only importable from
  ``globus_sdk.response`` (:pr:`680`)

Fixed
-----

* ``ArrayResponse`` and ``IterableResponse`` have better error behaviors when
  the API data does not match their expected types (:pr:`680`)

Documentation
-------------

* Fix the Timer code example (:pr:`672`)

* New documentation examples for Transfer Task submission in the presence of
  ``ConsentRequired`` errors (:pr:`673`)

.. _changelog-3.15.1:

v3.15.1 (2022-12-13)
====================

Added
-----

* AuthorizationParameterInfo now exposes session_required_policies (:pr:`658`)

Fixed
-----

* Fix a bug where ``TransferClient.endpoint_manager_task_list`` didn't handle
  the ``last_key`` argument when paginated (:pr:`662`)

.. _changelog-3.15.0:

v3.15.0 (2022-11-22)
====================

Added
-----

* Scope Names can be set explicitly in a ``ScopeBuilder`` (:pr:`641`)

* Introduced ``ScopeBuilder.scope_names`` property (:pr:`641`)

* Add support for ``interpret_globs`` and ``ignore_missing`` to ``DeleteData`` (:pr:`646`)

* A new object, ``globus_sdk.LocalGlobusConnectServer`` can be used to inspect
  the local installation of Globus Connect Server (:pr:`647`)

  * The object supports properties for ``endpoint_id`` and ``domain_name``

  * This only supports Globus Connect Server version 5

* The filter argument to TransferClient.operation_ls now accepts a list to pass
  multiple filter params (:pr:`652`)

* Improvements to ``MutableScope`` objects (:pr:`654`)

  * ``MutableScope(...).serialize()`` is added, and ``str(MutableScope(...))`` uses it

  * ``MutableScope.add_dependency`` now supports ``MutableScope`` objects as inputs

  * ``ScopeBuilder.make_mutable`` now accepts a keyword argument ``optional``.
    This allows, for example, ``TransferScopes.make_mutable("all", optional=True)``

Changed
-------

* Improve the ``__str__`` implementation for ``OAuthTokenResponse`` (:pr:`640`)

* When ``GlobusHTTPResponse`` contains a list, calls to ``get()`` will no
  longer fail with an ``AttributeError`` but will return the default value
  (``None`` if unspecified) instead (:pr:`644`)

Deprecated
----------

* The ``optional`` argument to ``add_dependency`` is deprecated.
  ``MutableScope(...).add_dependency(MutableScope("foo", optional=True))``
  can be used to add an optional dependency

Fixed
-----

* Fixed SpecificFlowClient scope string (:pr:`641`)

* Fix a bug in the type annotations for transport objects which restricted the
  size of status code tuples set as classvars (:pr:`651`)

.. _changelog-3.14.0:

v3.14.0 (2022-11-01)
====================

Python Support
--------------

* Python 3.11 is now officially supported (:pr:`628`)

Added
-----

* Add support for ``FlowsClient.get_flow`` and ``FlowsClient.delete_flow``
  (:pr:`631`, :pr:`626`)

* Add a ``close()`` method to ``SQLiteAdapter`` which closes the underlying
  connection (:pr:`628`)

.. _changelog-3.13.0:

v3.13.0 (2022-10-13)
====================

Added
-----

* Add ``connect_params`` to ``SQLiteAdapter``, enabling customization of the
  sqlite connection (:pr:`613`)

* Add ``FlowsClient.create_flow(...)`` (:pr:`614`)

* Add ``globus_sdk.SpecificFlowClient`` to manage interactions performed against
  a specific flow (:pr:`616`)

* Add support to ``FlowsClient.list_flows`` for pagination and the ``orderby``
  parameter (:pr:`621`, :pr:`622`)

Documentation
-------------

* Fix rst formatting for a few nested bullet points in existing changelog (:pr:`619`)

.. _changelog-3.12.0:

v3.12.0 (2022-09-21)
====================

Added
-----

* Add Mapped Collection policy helper types for constructing ``policies`` data. (:pr:`607`)
  The following new types are introduced:

  * ``CollectionPolicies`` (the base class for these types)
  * ``POSIXCollectionPolicies``
  * ``POSIXStagingCollectionPolicies``
  * ``GoogleCloudStorageCollectionPolicies``

Fixed
-----

* Fix bug where ``UserCredential`` policies were being converted to a string (:pr:`608`)

* Corrected the Flows service ``resource_server`` string to ``flows.globus.org`` (:pr:`612`)

.. _changelog-3.11.0:

v3.11.0 (2022-08-30)
====================

Added
-----

* Implement ``__dir__`` for the lazy importer in ``globus_sdk``. This
  enables tab completion in the interpreter and other features with
  rely upon ``dir(globus_sdk)`` (:pr:`603`)

* Add an initial Globus Flows client class, ``globus_sdk.FlowsClient`` (:pr:`604`)

  * ``globus_sdk.FlowsAPIError`` is the error class for this client
  * ``FlowsClient.list_flows`` is implemented as a method for listing deployed
    flows, with some of the filtering parameters of this API supported as
    keyword arguments
  * The scopes for the Globus Flows API can be accessed via
    ``globus_sdk.scopes.FlowsScopes`` or ``globus_sdk.FlowsClient.scopes``

Changed
-------

* Adjust behaviors of ``TransferData`` and ``TimerJob`` to make
  ``TimerJob.from_transfer_data`` work and to defer requesting the
  ``submission_id`` until the task submission call (:pr:`602`)

  * ``TransferData`` avoids passing ``null`` for several values when they are
    omitted, ranging from optional parameters to ``add_item`` to
    ``skip_activation_check``

  * ``TransferData`` and ``DeleteData`` now support usage in which the
    ``transfer_client`` parameters is ``None``. In these cases, if
    ``submission_id`` is omitted, it will be omitted from the document,
    allowing the creation of a partial task submsision document with no
    ``submission_id``

  * ``TimerJob.from_transfer_data`` will now raise a ``ValueError`` if the input
    document contains ``submission_id`` or ``skip_activation_check``

  * ``TransferClient.submit_transfer`` and ``TransferClient.submit_delete`` now
    check to see if the data being sent contains a ``submission_id``. If it does
    not, ``get_submission_id`` is called automatically and set as the
    ``submission_id`` on the payload. The new ``submission_id`` is set on the
    object passed to these methods, meaning that these methods are now
    side-effecting.

The newly recommended usage for ``TransferData`` and ``DeleteData`` is to pass
the endpoints as named parameters:

.. code-block:: python

    # -- for TransferData --
    # old usage
    transfer_client = TransferClient()
    transfer_data = TransferData(transfer_client, ep1, ep2)
    # new (recommended) usage
    transfer_data = TransferData(source_endpoint=ep1, destination_endpoint=ep2)

    # -- for DeleteData --
    # old usage
    transfer_client = TransferClient()
    delete_data = TransferData(transfer_client, ep)
    # new (recommended) usage
    delete_data = DeleteData(endpoint=ep)

.. _changelog-3.10.1:

v3.10.1 (2022-07-11)
====================

Changed
-------

* Use ``setattr`` in the lazy-importer. This makes attribute access after
  imports faster by several orders of magnitude. (:pr:`591`)

Documentation
-------------

* Add guest collection example script to docs (:pr:`590`)

.. _changelog-3.10.0:

v3.10.0 (2022-06-27)
====================

Removed
-------

* Remove nonexistent ``monitor_ongoing`` scope from ``TransferScopes`` (:pr:`583`)

Added
-----

* Add User Credential methods to ``GCSClient`` (:pr:`582`)

  * ``get_user_credential_list``
  * ``get_user_credential``
  * ``create_user_credential``
  * ``update_user_credential``
  * ``delete_user_credential``

* Add ``connector_id_to_name`` helper to ``GCSClient`` to resolve GCS Connector
  UUIDs to human readable Connector display names (:pr:`582`)

.. _changelog-3.9.0:

v3.9.0 (2022-06-02)
===================

Added
-----

* Add helper objects and methods for interacting with Globus Connect Server
  Storage Gateways (:pr:`554`)

  * New methods on ``GCSClient``: ``create_storage_gateway``, ``get_storage_gateway``,
    ``get_storage_gateway_list``, ``update_storage_gateway``,
    ``delete_storage_gateway``

  * New helper classes for constructing storage gateway documents.
    ``StorageGatewayDocument`` is the main one, but also
    ``POSIXStoragePolicies`` and ``POSIXStagingStoragePolicies`` are added for
    declaring the storage gateway ``policies`` field. More policy helpers will
    be added in future versions.

* Add support for more ``StorageGatewayPolicies`` documents. (:pr:`562`)
  The following types are now available:

  * ``BlackPearlStoragePolicies``
  * ``BoxStoragePolicies``
  * ``CephStoragePolicies``
  * ``GoogleDriveStoragePolicies``
  * ``GoogleCloudStoragePolicies``
  * ``OneDriveStoragePolicies``
  * ``AzureBlobStoragePolicies``
  * ``S3StoragePolicies``
  * ``ActiveScaleStoragePolicies``
  * ``IrodsStoragePolicies``
  * ``HPSSStoragePolicies``

* Add ``https`` scope to ``GCSCollectionScopeBuilder`` (:pr:`563`)

* ``ScopeBuilder`` objects now implement ``__str__`` for easy viewing.
  For example, ``print(globus_sdk.TransferClient.scopes)`` (:pr:`568`)

* Several improvements to Transfer helper objects (:pr:`573`)

  * Add ``TransferData.add_filter_rule`` for adding filter rules (exclude
    rules) to transfers

  * Add ``skip_activation_check`` as an argument to ``DeleteData`` and
    ``TransferData``

  * The ``sync_level`` argument to ``TransferData`` is now annotated more
    accurately to reject bad strings

Changed
-------

* Update the fields used to extract ``AuthAPIError`` messages (:pr:`566`)

* Imports from ``globus_sdk`` are now evaluated lazily via module-level
  ``__getattr__`` on python 3.7+ (:pr:`571`)

  * This improves the performance of imports for almost all use-cases, in some
    cases by over 80%

  * The method ``globus_sdk._force_eager_imports()`` can be used to force
    non-lazy imports, for latency sensitive applications which wish to control
    when the time cost of import evaluation is paid. This method is private and is
    therefore is not covered under the ``globus-sdk``'s SemVer guarantees, but it is
    expected to remain stable for the foreseeable future.

* Improve handling of array-style API responses (:pr:`575`)

  * Response objects now define ``__bool__`` as ``bool(data)``. This
    means that ``bool(response)`` could be ``False`` if the data is ``{}``,
    ``[]``, ``0``, or other falsey-types. Previously,
    ``__bool__`` was not defined, meaning it was always ``True``

  * ``globus_sdk.response.ArrayResponse`` is a new class which describes
    responses which are expected to hold a top-level array. It satisfies the
    sequence protocol, allowing indexing with integers and slices, iteration
    over the array data, and length checking with ``len(response)``

  * ``globus_sdk.GroupsClient.get_my_groups`` returns an ``ArrayResponse``,
    meaning the response data can now be iterated and otherwise used

.. _changelog-3.8.0:

v3.8.0 (2022-05-04)
===================

Added
-----

* Several changes expose more details of HTTP requests (:pr:`551`)

  * ``GlobusAPIError`` has a new property ``headers`` which provides the
    case-insensitive mapping of header values from the response

  * ``GlobusAPIError`` and ``GlobusHTTPResponse`` now include ``http_reason``,
    a string property containing the "reason" from the response

  * ``BaseClient.request`` and ``RequestsTransport.request`` now have options
    for setting boolean options ``allow_redirects`` and ``stream``, controlling
    how requests are processed

* New tools for working with optional and dependent scope strings (:pr:`553`)

  * A new class is provided for constructing optional and dependent scope
    strings, ``MutableScope``. Import as in
    ``from globus_sdk.scopes import MutableScope``

  * ``ScopeBuilder`` objects provide a method, ``make_mutable``, which converts
    from a scope name to a ``MutableScope`` object. See documentation on scopes
    for usage details

.. _changelog-3.7.0:

v3.7.0 (2022-04-08)
===================

Added
-----

* Add a client for the Timer service (:pr:`548`)

  * Add ``TimerClient`` class, along with ``TimerJob`` for constructing data
    to pass to the Timer service for job creation, and ``TimerAPIError``
  * Modify ``globus_sdk.config`` utilities to provide URLs for Actions and
    Timer services

Fixed
-----

* Fix annotations to allow request data to be a string. This is
  supported at runtime but was missing from annotations. (:pr:`549`)

.. _changelog-3.6.0:

v3.6.0 (2022-03-18)
===================

Added
-----

* ``ScopeBuilder`` objects now support ``known_url_scopes``, and known scope
  arguments to a ``ScopeBuilder`` may now be of type ``str`` in addition to
  ``list[str]`` (:pr:`536`)

* Add the ``RequestsTransport.tune`` contextmanager to the transport layer,
  allowing the settings on the transport to be set temporarily (:pr:`540`)

.. _changelog-3.5.0:

v3.5.0 (2022-03-02)
===================

Added
-----

* ``globus_sdk.IdentityMap`` can now take a cache as an input. This allows
  multiple ``IdentityMap`` instances to share the same storage cache. Any
  mutable mapping type is valid, so the cache can be backed by a database or
  other storage (:pr:`500`)

* Add support for ``include`` as a parameter to ``GroupsClient.get_group``.
  ``include`` can be a string or iterable of strings (:pr:`528`)

* Add a new method to tokenstorage, ``SQLiteAdapter.iter_namespaces``, which
  iterates over all namespaces visible in the token database (:pr:`529`)

Changed
-------

* Add ``TransferRequestsTransport`` class that does not retry ExternalErrors.
  This fixes cases in which the ``TransferClient`` incorrectly retried requests (:pr:`522`)

* Use the "reason phrase" as a failover for stringified API errors with no body (:pr:`524`)

Documentation
-------------

* Enhance documentation for all of the parameters on methods of ``GroupsClient``

.. _changelog-3.4.2:

v3.4.2 (2022-02-18)
===================

Fixed
-----

* Fix the pagination behavior for ``TransferClient`` on ``task_skipped_errors`` and
  ``task_successful_transfers``, and apply the same fix to the endpoint manager
  variants of these methods. Prior to the fix, paginated calls would return a
  single page of results and then stop (:pr:`520`)

.. _changelog-3.4.1:

v3.4.1 (2022-02-11)
===================

Fixed
-----

* The ``typing_extensions`` requirement in package metadata now sets a lower
  bound of ``4.0``, to force upgrades of installations to get a new enough version
  (:pr:`518`)

.. _changelog-3.4.0:

v3.4.0 (2022-02-11)
===================

Added
-----

* Support pagination on ``SearchClient.post_search`` (:pr:`507`)

* Add support for scroll queries to ``SearchClient``. ``SearchClient.scroll``
  and ``SearchClient.paginated.scroll`` are now available as methods, and a new
  helper class, ``SearchScrollQuery``, can be used to easily construct
  scrolling queries. (:pr:`507`)

* Add methods to ``SearchClient`` for managing index roles. ``create_role``,
  ``delete_role``, and ``get_role_list`` (:pr:`507`)

* Add ``mapped_collection`` and ``filter`` query arguments to ``GCSClient.get_collection_list`` (:pr:`510`)

* Add role methods to ``GCSClient`` (:pr:`513`)

  * ``GCSClient.get_role_list`` lists endpoint or collection roles
  * ``GCSClient.create_role`` creates a role
  * ``GCSClient.get_role`` gets a single role
  * ``GCSClient.delete_role`` deletes a role

* The response from ``AuthClient.get_identities`` now supports iteration,
  returning results from the ``"identities"`` array (:pr:`514`)

.. _changelog-3.3.1:

v3.3.1 (2022-01-25)
===================

Fixed
-----

* Packaging bugfix. ``globus-sdk`` is now built with pypa's ``build`` tool, to
  resolve issues with wheel builds.

.. _changelog-3.3.0:

v3.3.0 (2022-01-25)
===================

Added
-----

* Add ``update_group`` method to ``GroupsClient`` (:pr:`506`)

* The ``TransferData`` and ``DeleteData`` helper objects now accept the
  following parameters: ``notify_on_succeeded``, ``notify_on_failed``, and
  ``notify_on_inactive``. All three are boolean parameters with a default
  of ``True``. (:pr:`502`)

* Add ``Paginator.wrap`` as a method for getting a paginated methods. This interface is more
  verbose than the existing ``paginated`` methods, but correctly preserves type
  annotations. It is therefore preferable for users who are using ``mypy`` to do
  type checking. (:pr:`494`)

Changed
-------

* ``Paginator`` objects are now generics over a type var for their page type. The
  page type is bounded by ``GlobusHTTPResponse``, and most type-checker behaviors
  will remain unchanged (:pr:`495`)

Fixed
-----

* Several minor bugs have been found and fixed (:pr:`504`)

  * Exceptions raised in the SDK always use ``raise ... from`` syntax where
    appropriate. This corrects exception chaining in the local endpoint and
    several response objects.

  * The encoding of files opened by the SDK is now always ``UTF-8``

  * ``TransferData`` will now reject unsupported ``sync_level`` values with a
    ``ValueError`` on initialization, rather than erroring at submission time.
    The ``sync_level`` has also had its type annotation fixed to allow for
    ``int`` values.

  * Several instances of undocumented parameters have been discovered, and these
    are now rectified.

Documentation
-------------

* Document ``globus_sdk.config.get_service_url`` and ``globus_sdk.config.get_webapp_url``
  (:pr:`496`)

  * Internally, these are updated to be able to default to the ``GLOBUS_SDK_ENVIRONMENT`` setting,
    so specifying an environment is no longer required

.. _changelog-3.2.1:

v3.2.1 (2021-12-13)
===================

Python Support
--------------

* Update to avoid deprecation warnings on python 3.10 (:pr:`499`)

.. _changelog-3.2.0:

v3.2.0 (2021-12-02)
===================

Added
-----

* Add ``iter_items`` as a method on ``TransferData`` and ``DeleteData`` (:pr:`488`)

* Add the ``resource_server`` property to client classes and objects. For example,
  ``TransferClient.resource_server`` and ``GroupsClient().resource_server`` are now usable
  to get the resource server string for the relevant services. ``resource_server`` is
  documented as part of ``globus_sdk.BaseClient`` and may be ``None``. (:pr:`489`)

* The implementation of several properties of ``GlobusHTTPResponse`` has
  changed (:pr:`497`)

  * Responses have a new property, ``headers``, a case-insensitive
    dict of headers from the response

  * Responses now implement ``http_status`` and ``content_type`` as
    properties without setters

Changed
-------

* ClientCredentialsAuthorizer now accepts ``Union[str, Iterable[str]]``
  as the type for scopes (:pr:`498`)

Fixed
-----

* Fix type annotations on client methods with paginated variants (:pr:`491`)

.. _changelog-3.1.0:

v3.1.0 (2021-10-13)
===================

Added
-----

* Add ``filter`` as a supported parameter to ``TransferClient.task_list`` (:pr:`484`)

* The ``filter`` parameter to ``TransferClient.task_list`` and
  ``TransferClient.operation_ls`` can now be passed as a ``Dict[str, str | List[str]]``.
  Documentation on the ``TransferClient`` explains how this will be formatted,
  and is linked from the param docs for ``filter`` on each method (:pr:`484`)

Changed
-------

* Adjust package metadata for ``cryptography`` dependency, specifying
  ``cryptography>=3.3.1`` and no upper bound. This is meant to help mitigate
  issues in which an older ``cryptography`` version is installed gets used in
  spite of it being incompatible with ``pyjwt[crypto]>=2.0`` (:pr:`486`)

.. _changelog-3.0.3:

v3.0.3 (2021-10-11)
===================

Fixed
-----

* Fix several internal decorators which were destroying type information about
  decorated functions. Type signatures of many methods are therefore corrected (:pr:`485`)

.. _changelog-3.0.2:

v3.0.2 (2021-09-29)
===================

Changed
-------

* Produce more debug logging when SDK logs are enabled (:pr:`480`)

Fixed
-----

* Update the minimum dependency versions to lower bounds which are verified to
  work with the testsuite (:pr:`482`)

.. _changelog-3.0.1:

v3.0.1 (2021-09-15)
===================

Added
-----

* ``ScopeBuilder`` objects now define the type of ``__getattr__`` for ``mypy`` to
  know that dynamic attributes are strings (:pr:`472`)

Fixed
-----

* Fix malformed PEP508 ``python_version`` bound in dev dependencies (:pr:`474`)

Development
-----------

* Fix remaining ``type: ignore`` usages in globus-sdk (:pr:`473`)

.. _changelog-3.0.0:

v3.0.0 (2021-09-14)
===================

Removed
-------

* Remove support for ``bytes`` values for fields consuming UUIDs (:pr:`471`)

Added
-----

* Add ``filter_is_error`` parameter to advanced task list (:pr:`467`)

* Add a ``LocalGlobusConnectPersonal.get_owner_info()`` for looking up local
  user information from gridmap (:pr:`466`)

* Add support for GCS collection create and update. This includes new data
  helpers, ``MappedCollectionDcoument`` and ``GuestCollectionDocument`` (:pr:`468`)

* Add support for specifying ``config_dir`` to ``LocalGlobusConnectPersonal`` (:pr:`470`)

.. _changelog-3.0.0b4:

v3.0.0b4 (2021-09-01)
=====================

Removed
-------

* Remove ``BaseClient.qjoin_path`` (:pr:`452`)

Added
-----

* Add a new ``GCSClient`` class for interacting with GCS Manager APIs
  (:pr:`447`)

* ``GCSClient`` supports ``get_collection`` and ``delete_collection``.
  ``get_collection`` uses a new ``UnpackingGCSResponse`` response type (:pr:`451`,
  :pr:`464`)

* Add ``delete_destination_extra`` param to ``TransferData`` (:pr:`456`)

* ``TransferClient.endpoint_manager_task_list`` now takes filters as named
  keyword arguments, not only in ``query_params`` (:pr:`460`)

Changed
-------

* Rename ``GCSScopeBuilder`` to ``GCSCollectionScopeBuilder`` and add
  ``GCSEndpointScopeBuilder``. The ``GCSClient`` includes helpers for
  instantiating these scope builders (:pr:`448`)

* The ``additional_params`` parameter to ``AuthClient.oauth2_get_authorize_url``
  has been renamed to ``query_params`` for consistency with other methods (:pr:`453`)

* Enforce keyword-only arguments for most SDK-provided APIs (:pr:`453`)

* All type annotations for ``Sequence`` which could be relaxed to ``Iterable``
  have been updated (:pr:`465`)

Fixed
-----

* Minor fix to wheel builds: do not declare wheels as universal (:pr:`444`)

* Fix annotations for ``server_id`` on ``TransferClient`` methods (:pr:`455`)

* Fix ``visibility`` typo in ``GroupsClient`` (:pr:`463`)

Documentation
-------------

* Ensure all ``TransferClient`` method parameters are documented (:pr:`449`,
  :pr:`454`, :pr:`457`, :pr:`458`, :pr:`459`, :pr:`461`, :pr:`462`)

.. _changelog-3.0.0b3:

v3.0.0b3 (2021-08-13)
=====================

Added
-----

* Flesh out the ``GroupsClient`` and add helpers for interacting with the
  Globus Groups service, including enumerated constants, payload builders, and
  a high-level client for doing non-batch operations called the
  ``GroupsManager`` (:pr:`435`, :pr:`443`)

* globus-sdk now provides much more complete type annotations coverage,
  allowing type checkers like ``mypy`` to catch a much wider range of usage
  errors (:pr:`442`)

.. _changelog-3.0.0b2:

v3.0.0b2 (2021-07-16)
=====================

Added
-----

* Add scope constants and scope construction helpers. See new documentation on
  :ref:`scopes and ScopeBuilders <scopes>` for details (:pr:`437`, :pr:`440`)

* API Errors now have an attached ``info`` object with parsed error data where
  applicable. See the :ref:`ErrorInfo documentation <error_info>` for details
  (:pr:`441`)

Changed
-------

* Improve the rendering of API exceptions in stack traces to include the
  method, URI, and authorization scheme (if recognized) (:pr:`439`)

* Payload helper objects (``TransferData``, ``DeleteData``, and ``SearchQuery``)
  now inherit from a custom object, not ``dict``, but they are still dict-like in
  behavior (:pr:`438`)

.. _changelog-3.0.0b1:

v3.0.0b1 (2021-07-02)
=====================

Added
-----

* Add support for ``TransferClient.get_shared_endpoint_list`` (:pr:`434`)

Changed
-------

* Passthrough parameters to SDK methods for query params and body params are no
  longer accepted as extra keyword arguments. Instead, they must be passed
  explicitly in a ``query_params``, ``body_params``, or ``additional_fields``
  dictionary, depending on the context (:pr:`433`)

* The interface for retry parameters has been simplified. ``RetryPolicy``
  objects have been merged into the transport object, and retry parameters like
  ``max_retries`` may now be supplied directly as ``transport_params``
  (:pr:`430`)

.. _changelog-3.0.0a4:

v3.0.0a4 (2021-06-28)
=====================

Added
-----

* Add ``BaseClient`` to the top-level exports of ``globus_sdk``, so it can now
  be accessed under the name ``globus_sdk.BaseClient``

Fixed
-----

* Fix several paginators which were broken in ``3.0.0a3`` (:pr:`431`)

Documentation
-------------

* Autodocumentation of paginated methods (:pr:`432`)

.. _changelog-3.0.0a3:

v3.0.0a3 (2021-06-25)
=====================

Changed
-------

* Pagination has changed significantly. (:pr:`418`)

  * Methods which support pagination like ``TransferClient.endpoint_search`` no
    longer return an iterable ``PaginatedResource`` type. Instead, these client
    methods return ``GlobusHTTPResponse`` objects with a single page of results.

  * Paginated variants of these methods are available by renaming a call from
    ``client.<method>`` to ``client.paginated.<method>``. So, for example, a
    ``TransferClient`` now supports ``client.paginated.endpoint_search()``.
    The arguments to this function are the same as the original method.

  * ``client.paginated.<method>`` calls return ``Paginator`` objects, which
    support two types of iteration: by ``pages()`` and by ``items()``. To
    replicate the same behavior as SDK v1.x and v2.x ``PaginatedResource``
    types, use ``items()``, as in
    ``client.paginated.endpoint_search("query").items()``

.. _changelog-3.0.0a2:

v3.0.0a2 (2021-06-10)
=====================

Added
-----

* A new subpackage is available for public use,
  ``globus_sdk.tokenstorage`` (:pr:`405`)

* Add client for Globus Groups API, ``globus_sdk.GroupsClient``. Includes a
  dedicated error class, ``globus_sdk.GroupsAPIError``

Changed
-------

* Refactor response classes (:pr:`425`)

.. _changelog-3.0.0a1:

v3.0.0a1 (2021-06-04)
=====================

Removed
-------

* Remove ``allowed_authorizer_types`` restriction from ``BaseClient`` (:pr:`407`)

* Remove ``auth_client=...`` parameter to
  ``OAuthTokenResponse.decode_id_token`` (:pr:`400`)

Added
-----

* ``globus-sdk`` now provides PEP561 typing data (:pr:`420`)

* ``OAuthTokenResponse.decode_id_token`` can now be provided a JWK and openid
  configuration as parameters. ``AuthClient`` implements methods for fetching
  these data, so that they can be fetched and stored outside of this call.
  There is no automatic caching of these data. (:pr:`403`)

Changed
-------

* The interface for ``GlobusAuthorizer`` now defines
  ``get_authorization_header`` instead of ``set_authorization_header``, and
  additional keyword arguments are not allowed (:pr:`422`)

* New Transport layer handles HTTP details, variable payload
  encodings, and automatic request retries (:pr:`417`)

* Instead of ``json_body=...`` and ``text_body=...``, use ``data=...``
  combined with ``encoding="json"``, ``encoding="form"``, or
  ``encoding="text"`` to format payload data. ``encoding="json"`` is the
  default when ``data`` is a dict.

* By default, requests are retried automatically on potentially transient
  error codes (e.g. ``http_status=500``) and network errors with exponential
  backoff

* ``globus_sdk.BaseClient`` and its subclasses define ``retry_policy``
  and ``transport_class`` class attributes which can be used to customize the
  retry behavior used

* The JWT dependency has been updated to ``pyjwt>=2,<3`` (:pr:`416`)

* The config files in ``~/.globus.cfg`` and ``/etc/globus.cfg`` are no longer
  used. Configuration can now be done via environment variables (:pr:`409`)

* ``BaseClient.app_name`` is a property with a custom setter, replacing
  ``set_app_name`` (:pr:`415`)

Documentation
-------------

* Update documentation site style and layout (:pr:`423`)

.. _changelog_version2:

.. _changelog-2.0.1:

v2.0.1 (2021-02-02)
===================

Python Support
--------------

* Remove support for python2 (:pr:`396`, :pr:`397`, :pr:`398`)

.. note:: globus-sdk version 2.0.0 was yanked due to a release issue.
          Version 2.0.1 is the first 2.x version.

.. _changelog-1.11.0:

v1.11.0 (2021-01-29)
====================

Added
-----

* Add support for task skipped errors via
  ``TransferClient.task_skipped_errors`` and
  ``TransferClient.endpoint_manager_task_skipped_errors`` (:pr:`393`)

Development
-----------

* Internal maintenance (:pr:`389`, :pr:`390`, :pr:`391`, :pr:`392`)

.. _changelog-1.10.0:

v1.10.0 (2020-12-18)
====================

Fixed
-----

* Add support for pyinstaller installation of globus-sdk (:pr:`387`)

.. _changelog-1.9.1:

v1.9.1 (2020-08-27)
===================

Fixed
-----

* Fix ``GlobusHTTPResponse`` to handle responses with no ``Content-Type`` header (:pr:`375`)

.. _changelog-1.9.0:

v1.9.0 (2020-03-05)
===================

Added
-----

* Add ``globus_sdk.IdentityMap``, a mapping-like object for Auth ID lookups (:pr:`367`)

* Add ``external_checksum`` and ``checksum_algorithm`` to ``TransferData.add_item()`` named arguments (:pr:`365`)

Changed
-------

* Don't append trailing slashes when no path is given to a low-level client method like ``get()`` (:pr:`364`)

Development
-----------

* Minor documentation and build improvements (:pr:`369`, :pr:`362`)

.. _changelog-1.8.0:

v1.8.0 (2019-07-11)
===================

Added
-----

* Add a property to paginated results which shows if more results are available (:pr:`346`)

Fixed
-----

* Fix ``RefreshTokenAuthorizer`` to handle a new ``refresh_token`` being sent back by Auth (:pr:`359`)

* Fix typo in endpoint_search log message (:pr:`355`)

* Fix Globus Web App activation links in docs (:pr:`356`)

Documentation
-------------

* Update docs to state that Globus SDK uses semver (:pr:`357`)

.. _changelog-1.7.1:

v1.7.1 (2019-02-21)
===================

Added
-----

* Allow arbitrary keyword args to ``TransferData.add_item()`` and ``DeleteData.add_item()``, which passthrough to the item bodies (:pr:`339`)

Development
-----------

* Minor internal improvements (:pr:`342`, :pr:`343`)

.. _changelog-1.7.0:

v1.7.0 (2018-12-18)
===================

Added
-----

* Add ``get_task`` and ``get_task_list`` to ``SearchClient`` (:pr:`335`, :pr:`336`)

Development
-----------

* Internal maintenance and testing improvements (:pr:`331`, :pr:`334`, :pr:`333`)

.. _changelog-1.6.1:

v1.6.1 (2018-10-30)
===================

Changed
-------

* Replace egg distribution format with wheels (:pr:`314`)

Development
-----------

* Internal maintenance

.. _changelog-1.6.0:

v1.6.0 (2018-08-29)
===================

Python Support
--------------

* Officially add support for python 3.7 (:pr:`300`)

Removed
-------
Added
-----

* RenewingAuthorizer and its subclasses now expose the check_expiration_time method (:pr:`309`)

* Allow parameters to be passed to customize the request body of ConfidentialAppAuthClient.oauth2_get_dependent_tokens (:pr:`308`)

* Add the patch() method to BaseClient and its subclasses, sending an HTTP PATCH request (:pr:`302`)

Changed
-------

* Use sha256 hashes of tokens (instead of last 5 chars) in debug logging (:pr:`305`)

* Make pickling SDK objects safer (but still not officially supported!) (:pr:`284`)

* Malformed SDK usage may now raise GlobusSDKUsageError instead of ValueError. GlobusSDKUsageError inherits from ValueError (:pr:`281`)

Fixed
-----

* Correct handling of environment="production" as an argument to client construction (:pr:`307`)

Documentation
-------------

* Numerous documentation improvements (:pr:`279`, :pr:`294`, :pr:`296`, :pr:`297`)

.. _changelog-1.5.0:

v1.5.0 (2018-02-09)
===================

Added
-----

* Add support for retrieving a local Globus Connect Personal endpoint's UUID (:pr:`276`)

Fixed
-----

* Fix bug in search client parameter handling (:pr:`274`)

.. _changelog-1.4.1:

v1.4.1 (2017-12-20)
===================

Added
-----

* Support connection timeouts. Default timeout of 60 seconds (:pr:`264`)

Fixed
-----

* Send ``Content-Type: application/json`` on requests with JSON request bodies (:pr:`266`)

.. _changelog-1.4.0:

v1.4.0 (2017-12-13)
===================

Added
-----

* Access token response data by way of scope name (:pr:`261`)

* Add (beta) SearchClient class (:pr:`259`)

Changed
-------

* Make ``cryptography`` a strict requirement, globus-sdk[jwt] is no longer necessary (:pr:`257`, :pr:`260`)

* Simplify OAuthTokenResponse.decode_id_token to not require the client as an argument (:pr:`255`)

.. _changelog-1.3.0:

v1.3.0 (2017-11-20)
===================

Python Support
--------------

* Improve error message when installation onto python2.6 is attempted (:pr:`245`)

Changed
-------

* Raise errors on client instantiation when ``GLOBUS_SDK_ENVIRONMENT`` appears to be invalid, support ``GLOBUS_SDK_ENVIRONMENT=preview`` (:pr:`247`)

.. _changelog-1.2.2:

v1.2.2 (2017-11-01)
===================

Added
-----

* Allow client classes to accept ``base_url`` as an argument to ``_init__()`` (:pr:`241`)

Changed
-------

* Improve docs on ``TransferClient`` helper classes (:pr:`231`, :pr:`233`)

Fixed
-----

* Fix packaging to not include testsuite (:pr:`232`)

.. _changelog-1.2.1:

v1.2.1 (2017-09-29)
===================

Changed
-------

* Use PyJWT instead of python-jose for JWT support (:pr:`227`)

.. _changelog-1.2.0:

v1.2.0 (2017-08-18)
===================

Added
-----

* Add Transfer symlink support (:pr:`218`)

Fixed
-----

* Better handle UTF-8 inputs (:pr:`208`)

* Fix endpoint manager resume (:pr:`224`)

Documentation
-------------

* Doc Updates & Minor Improvements

.. _changelog-1.1.1:

v1.1.1 (2017-05-19)
===================

Fixed
-----

* Use correct paging style when making ``endpoint_manager_task_list`` calls (:pr:`210`)

.. _changelog-1.1.0:

v1.1.0 (2017-05-01)
===================

Python Support
--------------

* Add python 3.6 to supported platforms (:pr:`180`)

Added
-----

* Add endpoint_manager methods to TransferClient (:pr:`191`, :pr:`199`, :pr:`200`, :pr:`201`, :pr:`203`)

* Support iterable requested_scopes everywhere (:pr:`185`)

Changed
-------

* Change "identities_set" to "identity_set" for token introspection (:pr:`163`)

* Update dev status classifier to 5, prod (:pr:`178`)

Documentation
-------------

* Fix docs references to ``oauth2_start_flow_*`` (:pr:`190`)

* Remove "Beta" from docs (:pr:`179`)

Development
-----------

* Numerous improvements to testsuite

.. _changelog-1.0.0:

v1.0.0 (2017-04-10)
===================

Added
-----

* Adds ``AuthAPIError`` with more flexible error payload handling (:pr:`175`)

.. _changelog-0.7.2:

v0.7.2 (2017-04-05)
===================

Added
-----

* Add ``AuthClient.validate_token`` (:pr:`172`)

Fixed
-----

* Bugfix for ``on_refresh`` users of ``RefreshTokenAuthorizer`` and ``ClientCredentialsAuthorizer`` (:pr:`173`)

.. _changelog-0.7.1:

v0.7.1 (2017-04-03)
===================

Removed
-------

* Remove deprecated ``oauth2_start_flow_*`` methods (:pr:`170`)

Added
-----

* Add the ``ClientCredentialsAuthorizer`` (:pr:`164`)

* Add ``jwt`` extra install target. ``pip install "globus_sdk[jwt]"`` installs ``python-jose`` (:pr:`169`)

.. _changelog-0.7.0:

v0.7.0 (2017-03-30)
===================

Removed
-------

* Remove all properties of ``OAuthTokenResponse`` other than ``by_resource_server`` (:pr:`162`)

Fixed
-----

* Make ``OAuthTokenResponse.decode_id_token()`` respect ``ssl_verify=no`` configuration (:pr:`161`)

.. _changelog-0.6.0:

v0.6.0 (2017-03-21)
===================

Added
-----

* Add ``deadline`` support to ``TransferData`` and ``DeleteData`` (:pr:`159`)

Changed
-------

* Opt out of the Globus Auth behavior where a ``GET`` of an identity username will provision that identity (:pr:`145`)

* Wrap some ``requests`` network-related errors in custom exceptions (:pr:`155`)

Fixed
-----

* Fixup OAuth2 PKCE to be spec-compliant (:pr:`154`)

.. _changelog-0.5.1:

v0.5.1 (2017-02-25)
===================

Added
-----

* Add support for the ``prefill_named_grant`` option to the Native App authorization flow (:pr:`143`)

Changed
-------

* Unicode string improvements (:pr:`129`)

* Better handle unexpected error payloads (:pr:`135`)