fal 1.8.1__py3-none-any.whl → 1.8.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of fal might be problematic. Click here for more details.

fal/_fal_version.py CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '1.8.1'
16
- __version_tuple__ = version_tuple = (1, 8, 1)
15
+ __version__ = version = '1.8.2'
16
+ __version_tuple__ = version_tuple = (1, 8, 2)
fal/api.py CHANGED
@@ -403,6 +403,7 @@ class FalServerlessHost(Host):
403
403
  "setup_function",
404
404
  "metadata",
405
405
  "request_timeout",
406
+ "startup_timeout",
406
407
  "_base_image",
407
408
  "_scheduler",
408
409
  "_scheduler_options",
@@ -452,6 +453,7 @@ class FalServerlessHost(Host):
452
453
  max_multiplexing = options.host.get("max_multiplexing")
453
454
  exposed_port = options.get_exposed_port()
454
455
  request_timeout = options.host.get("request_timeout")
456
+ startup_timeout = options.host.get("startup_timeout")
455
457
  machine_requirements = MachineRequirements(
456
458
  machine_types=machine_type, # type: ignore
457
459
  num_gpus=options.host.get("num_gpus"),
@@ -464,6 +466,7 @@ class FalServerlessHost(Host):
464
466
  max_concurrency=max_concurrency,
465
467
  min_concurrency=min_concurrency,
466
468
  request_timeout=request_timeout,
469
+ startup_timeout=startup_timeout,
467
470
  )
468
471
 
469
472
  partial_func = _prepare_partial_func(func)
@@ -526,7 +529,7 @@ class FalServerlessHost(Host):
526
529
  exposed_port = options.get_exposed_port()
527
530
  setup_function = options.host.get("setup_function", None)
528
531
  request_timeout = options.host.get("request_timeout")
529
-
532
+ startup_timeout = options.host.get("startup_timeout")
530
533
  machine_requirements = MachineRequirements(
531
534
  machine_types=machine_type, # type: ignore
532
535
  num_gpus=options.host.get("num_gpus"),
@@ -539,6 +542,7 @@ class FalServerlessHost(Host):
539
542
  max_concurrency=max_concurrency,
540
543
  min_concurrency=min_concurrency,
541
544
  request_timeout=request_timeout,
545
+ startup_timeout=startup_timeout,
542
546
  )
543
547
 
544
548
  return_value = _UNSET
@@ -705,6 +709,7 @@ def function(
705
709
  max_multiplexing: int = FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING,
706
710
  min_concurrency: int = FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY,
707
711
  request_timeout: int | None = None,
712
+ startup_timeout: int | None = None,
708
713
  setup_function: Callable[..., None] | None = None,
709
714
  _base_image: str | None = None,
710
715
  _scheduler: str | None = None,
@@ -732,6 +737,7 @@ def function(
732
737
  max_multiplexing: int = FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING,
733
738
  min_concurrency: int = FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY,
734
739
  request_timeout: int | None = None,
740
+ startup_timeout: int | None = None,
735
741
  setup_function: Callable[..., None] | None = None,
736
742
  _base_image: str | None = None,
737
743
  _scheduler: str | None = None,
@@ -809,6 +815,7 @@ def function(
809
815
  max_multiplexing: int = FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING,
810
816
  min_concurrency: int = FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY,
811
817
  request_timeout: int | None = None,
818
+ startup_timeout: int | None = None,
812
819
  setup_function: Callable[..., None] | None = None,
813
820
  _base_image: str | None = None,
814
821
  _scheduler: str | None = None,
@@ -841,6 +848,7 @@ def function(
841
848
  max_multiplexing: int = FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING,
842
849
  min_concurrency: int = FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY,
843
850
  request_timeout: int | None = None,
851
+ startup_timeout: int | None = None,
844
852
  setup_function: Callable[..., None] | None = None,
845
853
  _base_image: str | None = None,
846
854
  _scheduler: str | None = None,
@@ -867,6 +875,7 @@ def function(
867
875
  max_multiplexing: int = FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING,
868
876
  min_concurrency: int = FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY,
869
877
  request_timeout: int | None = None,
878
+ startup_timeout: int | None = None,
870
879
  setup_function: Callable[..., None] | None = None,
871
880
  _base_image: str | None = None,
872
881
  _scheduler: str | None = None,
@@ -893,6 +902,7 @@ def function(
893
902
  max_multiplexing: int = FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING,
894
903
  min_concurrency: int = FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY,
895
904
  request_timeout: int | None = None,
905
+ startup_timeout: int | None = None,
896
906
  setup_function: Callable[..., None] | None = None,
897
907
  _base_image: str | None = None,
898
908
  _scheduler: str | None = None,
fal/app.py CHANGED
@@ -271,6 +271,7 @@ class App(fal.api.BaseServable):
271
271
  app_name: ClassVar[str]
272
272
  app_auth: ClassVar[Literal["private", "public", "shared"]] = "private"
273
273
  request_timeout: ClassVar[int | None] = None
274
+ startup_timeout: ClassVar[int | None] = None
274
275
 
275
276
  isolate_channel: async_grpc.Channel | None = None
276
277
 
@@ -282,6 +283,9 @@ class App(fal.api.BaseServable):
282
283
  if cls.request_timeout is not None:
283
284
  cls.host_kwargs["request_timeout"] = cls.request_timeout
284
285
 
286
+ if cls.startup_timeout is not None:
287
+ cls.host_kwargs["startup_timeout"] = cls.startup_timeout
288
+
285
289
  cls.app_name = getattr(cls, "app_name", app_name)
286
290
 
287
291
  if cls.__init__ is not App.__init__:
fal/cli/apps.py CHANGED
@@ -19,6 +19,9 @@ def _apps_table(apps: list[AliasInfo]):
19
19
  table.add_column("Max Concurrency")
20
20
  table.add_column("Max Multiplexing")
21
21
  table.add_column("Keep Alive")
22
+ table.add_column("Request Timeout")
23
+ table.add_column("Startup Timeout")
24
+ table.add_column("Machine Type")
22
25
  table.add_column("Active Workers")
23
26
 
24
27
  for app in apps:
@@ -30,6 +33,9 @@ def _apps_table(apps: list[AliasInfo]):
30
33
  str(app.max_concurrency),
31
34
  str(app.max_multiplexing),
32
35
  str(app.keep_alive),
36
+ str(app.request_timeout),
37
+ str(app.startup_timeout),
38
+ " ".join(app.machine_types),
33
39
  str(app.active_runners),
34
40
  )
35
41
 
@@ -67,6 +73,9 @@ def _app_rev_table(revs: list[ApplicationInfo]):
67
73
  table.add_column("Max Concurrency")
68
74
  table.add_column("Max Multiplexing")
69
75
  table.add_column("Keep Alive")
76
+ table.add_column("Request Timeout")
77
+ table.add_column("Startup Timeout")
78
+ table.add_column("Machine Type")
70
79
  table.add_column("Active Workers")
71
80
 
72
81
  for rev in revs:
@@ -76,6 +85,9 @@ def _app_rev_table(revs: list[ApplicationInfo]):
76
85
  str(rev.max_concurrency),
77
86
  str(rev.max_multiplexing),
78
87
  str(rev.keep_alive),
88
+ str(rev.request_timeout),
89
+ str(rev.startup_timeout),
90
+ " ".join(rev.machine_types),
79
91
  str(rev.active_runners),
80
92
  )
81
93
 
@@ -114,6 +126,8 @@ def _scale(args):
114
126
  and args.max_multiplexing is None
115
127
  and args.max_concurrency is None
116
128
  and args.min_concurrency is None
129
+ and args.request_timeout is None
130
+ and args.startup_timeout is None
117
131
  ):
118
132
  args.console.log("No parameters for update were provided, ignoring.")
119
133
  return
@@ -124,6 +138,8 @@ def _scale(args):
124
138
  max_multiplexing=args.max_multiplexing,
125
139
  max_concurrency=args.max_concurrency,
126
140
  min_concurrency=args.min_concurrency,
141
+ request_timeout=args.request_timeout,
142
+ startup_timeout=args.startup_timeout,
127
143
  )
128
144
  table = _apps_table([alias_info])
129
145
 
@@ -162,6 +178,16 @@ def _add_scale_parser(subparsers, parents):
162
178
  type=int,
163
179
  help="Minimum concurrency",
164
180
  )
181
+ parser.add_argument(
182
+ "--request-timeout",
183
+ type=int,
184
+ help="Request timeout (seconds).",
185
+ )
186
+ parser.add_argument(
187
+ "--startup-timeout",
188
+ type=int,
189
+ help="Startup timeout (seconds).",
190
+ )
165
191
  parser.set_defaults(func=_scale)
166
192
 
167
193
 
fal/cli/deploy.py CHANGED
@@ -111,10 +111,16 @@ def _deploy_from_reference(
111
111
  )
112
112
 
113
113
  if app_id:
114
- gateway_host = _remove_http_and_port_from_url(host.url)
115
- gateway_host = (
116
- gateway_host.replace("api.", "").replace("alpha.", "").replace("ai", "run")
117
- )
114
+ env_host = _remove_http_and_port_from_url(host.url)
115
+ env_host = env_host.replace("api.", "").replace("alpha.", "")
116
+
117
+ env_host_parts = env_host.split(".")
118
+
119
+ # keep the last 3 parts
120
+ playground_host = ".".join(env_host_parts[-3:])
121
+
122
+ # just replace .ai for .run
123
+ endpoint_host = env_host.replace(".ai", ".run")
118
124
 
119
125
  args.console.print(
120
126
  "Registered a new revision for function "
@@ -123,12 +129,12 @@ def _deploy_from_reference(
123
129
  args.console.print("Playground:")
124
130
  for endpoint in loaded.endpoints:
125
131
  args.console.print(
126
- f"\thttps://fal.ai/models/{user.username}/{app_name}{endpoint}"
132
+ f"\thttps://{playground_host}/models/{user.username}/{app_name}{endpoint}"
127
133
  )
128
134
  args.console.print("Endpoints:")
129
135
  for endpoint in loaded.endpoints:
130
136
  args.console.print(
131
- f"\thttps://{gateway_host}/{user.username}/{app_name}{endpoint}"
137
+ f"\thttps://{endpoint_host}/{user.username}/{app_name}{endpoint}"
132
138
  )
133
139
 
134
140
 
fal/sdk.py CHANGED
@@ -196,6 +196,9 @@ class ApplicationInfo:
196
196
  max_multiplexing: int
197
197
  active_runners: int
198
198
  min_concurrency: int
199
+ machine_types: list[str]
200
+ request_timeout: int
201
+ startup_timeout: int
199
202
 
200
203
 
201
204
  @dataclass
@@ -208,6 +211,9 @@ class AliasInfo:
208
211
  max_multiplexing: int
209
212
  active_runners: int
210
213
  min_concurrency: int
214
+ machine_types: list[str]
215
+ request_timeout: int
216
+ startup_timeout: int
211
217
 
212
218
 
213
219
  @dataclass
@@ -313,6 +319,9 @@ def _from_grpc_application_info(
313
319
  max_multiplexing=message.max_multiplexing,
314
320
  active_runners=message.active_runners,
315
321
  min_concurrency=message.min_concurrency,
322
+ machine_types=message.machine_types,
323
+ request_timeout=message.request_timeout,
324
+ startup_timeout=message.startup_timeout,
316
325
  )
317
326
 
318
327
 
@@ -336,6 +345,9 @@ def _from_grpc_alias_info(message: isolate_proto.AliasInfo) -> AliasInfo:
336
345
  max_multiplexing=message.max_multiplexing,
337
346
  active_runners=message.active_runners,
338
347
  min_concurrency=message.min_concurrency,
348
+ machine_types=message.machine_types,
349
+ request_timeout=message.request_timeout,
350
+ startup_timeout=message.startup_timeout,
339
351
  )
340
352
 
341
353
 
@@ -402,6 +414,7 @@ class MachineRequirements:
402
414
  max_multiplexing: int | None = None
403
415
  min_concurrency: int | None = None
404
416
  request_timeout: int | None = None
417
+ startup_timeout: int | None = None
405
418
 
406
419
  def __post_init__(self):
407
420
  if isinstance(self.machine_types, str):
@@ -519,6 +532,7 @@ class FalServerlessConnection:
519
532
  min_concurrency=machine_requirements.min_concurrency,
520
533
  max_multiplexing=machine_requirements.max_multiplexing,
521
534
  request_timeout=machine_requirements.request_timeout,
535
+ startup_timeout=machine_requirements.startup_timeout,
522
536
  )
523
537
  else:
524
538
  wrapped_requirements = None
@@ -562,6 +576,8 @@ class FalServerlessConnection:
562
576
  max_multiplexing: int | None = None,
563
577
  max_concurrency: int | None = None,
564
578
  min_concurrency: int | None = None,
579
+ request_timeout: int | None = None,
580
+ startup_timeout: int | None = None,
565
581
  ) -> AliasInfo:
566
582
  request = isolate_proto.UpdateApplicationRequest(
567
583
  application_name=application_name,
@@ -569,6 +585,8 @@ class FalServerlessConnection:
569
585
  max_multiplexing=max_multiplexing,
570
586
  max_concurrency=max_concurrency,
571
587
  min_concurrency=min_concurrency,
588
+ request_timeout=request_timeout,
589
+ startup_timeout=startup_timeout,
572
590
  )
573
591
  res: isolate_proto.UpdateApplicationResult = self.stub.UpdateApplication(
574
592
  request
@@ -614,6 +632,7 @@ class FalServerlessConnection:
614
632
  max_multiplexing=machine_requirements.max_multiplexing,
615
633
  min_concurrency=machine_requirements.min_concurrency,
616
634
  request_timeout=machine_requirements.request_timeout,
635
+ startup_timeout=machine_requirements.startup_timeout,
617
636
  )
618
637
  else:
619
638
  wrapped_requirements = None
fal/toolkit/file/file.py CHANGED
@@ -59,7 +59,7 @@ def get_builtin_repository(id: RepositoryId | FileRepository) -> FileRepository:
59
59
  get_builtin_repository.__module__ = "__main__"
60
60
 
61
61
  DEFAULT_REPOSITORY: FileRepository | RepositoryId = "fal_v3"
62
- FALLBACK_REPOSITORY: FileRepository | RepositoryId = "cdn"
62
+ FALLBACK_REPOSITORY: FileRepository | RepositoryId = "fal"
63
63
  OBJECT_LIFECYCLE_PREFERENCE_KEY = "x-fal-object-lifecycle-preference"
64
64
 
65
65
 
@@ -153,9 +153,12 @@ class File(BaseModel):
153
153
  object_lifecycle_preference = (
154
154
  request_lifecycle_preference(request) or LIFECYCLE_PREFERENCE.get()
155
155
  )
156
+ save_kwargs.setdefault(
157
+ "object_lifecycle_preference", object_lifecycle_preference
158
+ )
156
159
 
157
160
  try:
158
- url = repo.save(fdata, object_lifecycle_preference, **save_kwargs)
161
+ url = repo.save(fdata, **save_kwargs)
159
162
  except Exception:
160
163
  if not fallback_repository:
161
164
  raise
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: fal
3
- Version: 1.8.1
3
+ Version: 1.8.2
4
4
  Summary: fal is an easy-to-use Serverless Python Framework
5
5
  Author: Features & Labels <support@fal.ai>
6
6
  Requires-Python: >=3.8
7
7
  Description-Content-Type: text/markdown
8
8
  Requires-Dist: isolate[build]<0.16.0,>=0.15.0
9
- Requires-Dist: isolate-proto<0.7.0,>=0.6.0
9
+ Requires-Dist: isolate-proto<0.7.0,>=0.6.6
10
10
  Requires-Dist: grpcio==1.64.0
11
11
  Requires-Dist: dill==0.3.7
12
12
  Requires-Dist: cloudpickle==3.0.0
@@ -1,10 +1,10 @@
1
1
  fal/__init__.py,sha256=wXs1G0gSc7ZK60-bHe-B2m0l_sA6TrFk4BxY0tMoLe8,784
2
2
  fal/__main__.py,sha256=4JMK66Wj4uLZTKbF-sT3LAxOsr6buig77PmOkJCRRxw,83
3
- fal/_fal_version.py,sha256=0CBOWvcgj3z82UQGmgPZNYucWtZfu-kClLlOblR1VJs,411
3
+ fal/_fal_version.py,sha256=wyeOGWTUT7rTWqRZmS_XmHAtprBx1jO6L7FxPeYTyMM,411
4
4
  fal/_serialization.py,sha256=rD2YiSa8iuzCaZohZwN_MPEB-PpSKbWRDeaIDpTEjyY,7653
5
5
  fal/_version.py,sha256=EBGqrknaf1WygENX-H4fBefLvHryvJBBGtVJetaB0NY,266
6
- fal/api.py,sha256=TJNuez-xjzHfIAA7ZLmEMksdB3U5EM7bl16ooRL_1Ak,43499
7
- fal/app.py,sha256=0cm7wZXdusZXyV9nJmlFJl-7Jgxir6954OaO9Lj2ITk,23178
6
+ fal/api.py,sha256=ZbUoe12y6sVg5-bPbzFtqHTqZoQonVDaZRjlGNaHbcs,43983
7
+ fal/app.py,sha256=hk3rT-3fZY7jsgK270JPC26Wnc2GhhtrDcjRCUQRr6Q,23341
8
8
  fal/apps.py,sha256=RpmElElJnDYjsTRQOdNYiJwd74GEOGYA38L5O5GzNEg,11068
9
9
  fal/config.py,sha256=hgI3kW4_2NoFsrYEiPss0mnDTr8_Td2z0pVgm93wi9o,600
10
10
  fal/container.py,sha256=9XslBET-NCG2V3-Wmof8c7eHrRoxCye88Ym7CskqCk0,1639
@@ -12,7 +12,7 @@ fal/files.py,sha256=QgfYfMKmNobMPufrAP_ga1FKcIAlSbw18Iar1-0qepo,2650
12
12
  fal/flags.py,sha256=oWN_eidSUOcE9wdPK_77si3A1fpgOC0UEERPsvNLIMc,842
13
13
  fal/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  fal/rest_client.py,sha256=kGBGmuyHfX1lR910EoKCYPjsyU8MdXawT_cW2q8Sajc,568
15
- fal/sdk.py,sha256=HjlToPJkG0Z5h_D0D2FK43i3JFKeO4r2IhCGx4B82Z8,22564
15
+ fal/sdk.py,sha256=p-D_4b7wDpASrMXIeni-7LgFbQ8nUG2tvPn9Z4QDqos,23365
16
16
  fal/sync.py,sha256=ZuIJA2-hTPNANG9B_NNJZUsO68EIdTH0dc9MzeVE2VU,4340
17
17
  fal/utils.py,sha256=9q_QrQBlQN3nZYA1kEGRfhJWi4RjnO4H1uQswfaei9w,2146
18
18
  fal/workflows.py,sha256=Zl4f6Bs085hY40zmqScxDUyCu7zXkukDbW02iYOLTTI,14805
@@ -21,11 +21,11 @@ fal/auth/auth0.py,sha256=rSG1mgH-QGyKfzd7XyAaj1AYsWt-ho8Y_LZ-FUVWzh4,5421
21
21
  fal/auth/local.py,sha256=sndkM6vKpeVny6NHTacVlTbiIFqaksOmw0Viqs_RN1U,1790
22
22
  fal/cli/__init__.py,sha256=padK4o0BFqq61kxAA1qQ0jYr2SuhA2mf90B3AaRkmJA,37
23
23
  fal/cli/_utils.py,sha256=45G0LEz2bW-69MUQKPdatVE_CBC2644gC-V0qdNEsco,1252
24
- fal/cli/apps.py,sha256=Fo4iUpd6FGTUcIp22WcssE1CaEn_BLKzK_E4JPsXhVI,8179
24
+ fal/cli/apps.py,sha256=DeNzouQSv2cFZKDF4A5xdl3qzQ6NWbbgF3pivgmaIiI,9079
25
25
  fal/cli/auth.py,sha256=--MhfHGwxmtHbRkGioyn1prKn_U-pBzbz0G_QeZou-U,1352
26
26
  fal/cli/create.py,sha256=a8WDq-nJLFTeoIXqpb5cr7GR7YR9ZZrQCawNm34KXXE,627
27
27
  fal/cli/debug.py,sha256=u_urnyFzSlNnrq93zz_GXE9FX4VyVxDoamJJyrZpFI0,1312
28
- fal/cli/deploy.py,sha256=-woTZObzntUenPFmWJwDaeCmBl3Vb7jqSkhPCIfk2SM,7581
28
+ fal/cli/deploy.py,sha256=Wu8wxR72od2GAp1OF-FYO6WSWt4umaHysL3HrO_bzEo,7764
29
29
  fal/cli/doctor.py,sha256=U4ne9LX5gQwNblsYQ27XdO8AYDgbYjTO39EtxhwexRM,983
30
30
  fal/cli/keys.py,sha256=trDpA3LJu9S27qE_K8Hr6fKLK4vwVzbxUHq8TFrV4pw,3157
31
31
  fal/cli/main.py,sha256=O0i9wdLPxcd1u4CvXit-ufkT_UnON-baTN6v9HaHPmw,2027
@@ -50,7 +50,7 @@ fal/toolkit/exceptions.py,sha256=elHZ7dHCJG5zlHGSBbz-ilkZe9QUvQMomJFi8Pt91LA,198
50
50
  fal/toolkit/optimize.py,sha256=p75sovF0SmRP6zxzpIaaOmqlxvXB_xEz3XPNf59EF7w,1339
51
51
  fal/toolkit/types.py,sha256=kkbOsDKj1qPGb1UARTBp7yuJ5JUuyy7XQurYUBCdti8,4064
52
52
  fal/toolkit/file/__init__.py,sha256=FbNl6wD-P0aSSTUwzHt4HujBXrbC3ABmaigPQA4hRfg,70
53
- fal/toolkit/file/file.py,sha256=-gccCKnarTu6Nfm_0yQ0sJM9aadB5tUNvKS1PTqxiFc,9071
53
+ fal/toolkit/file/file.py,sha256=ccvbWpfbvfXv11QKUEajjOze78RC7JOQDs7bZzZgPhw,9155
54
54
  fal/toolkit/file/types.py,sha256=MjZ6xAhKPv4rowLo2Vcbho0sX7AQ3lm3KFyYDcw0dL4,1845
55
55
  fal/toolkit/file/providers/fal.py,sha256=7JWTFXvAbtqakCIlA5gfKI8qU1umlWgWhvU5cXqzGVQ,36050
56
56
  fal/toolkit/file/providers/gcp.py,sha256=iQtkoYUqbmKKpC5srVOYtrruZ3reGRm5lz4kM8bshgk,2247
@@ -130,8 +130,8 @@ openapi_fal_rest/models/workflow_node_type.py,sha256=-FzyeY2bxcNmizKbJI8joG7byRi
130
130
  openapi_fal_rest/models/workflow_schema.py,sha256=4K5gsv9u9pxx2ItkffoyHeNjBBYf6ur5bN4m_zePZNY,2019
131
131
  openapi_fal_rest/models/workflow_schema_input.py,sha256=2OkOXWHTNsCXHWS6EGDFzcJKkW5FIap-2gfO233EvZQ,1191
132
132
  openapi_fal_rest/models/workflow_schema_output.py,sha256=EblwSPAGfWfYVWw_WSSaBzQVju296is9o28rMBAd0mc,1196
133
- fal-1.8.1.dist-info/METADATA,sha256=bEcIv3BFgkvrKOhJA_AgmQQkIQmKBdQq9oumzE0kmDA,4002
134
- fal-1.8.1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
135
- fal-1.8.1.dist-info/entry_points.txt,sha256=32zwTUC1U1E7nSTIGCoANQOQ3I7-qHG5wI6gsVz5pNU,37
136
- fal-1.8.1.dist-info/top_level.txt,sha256=r257X1L57oJL8_lM0tRrfGuXFwm66i1huwQygbpLmHw,21
137
- fal-1.8.1.dist-info/RECORD,,
133
+ fal-1.8.2.dist-info/METADATA,sha256=l05QPJlpFqBqbK74aj6LCFFIxZbg7izsrg-LqS7ywXc,4002
134
+ fal-1.8.2.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
135
+ fal-1.8.2.dist-info/entry_points.txt,sha256=32zwTUC1U1E7nSTIGCoANQOQ3I7-qHG5wI6gsVz5pNU,37
136
+ fal-1.8.2.dist-info/top_level.txt,sha256=r257X1L57oJL8_lM0tRrfGuXFwm66i1huwQygbpLmHw,21
137
+ fal-1.8.2.dist-info/RECORD,,
File without changes