@@ -694,12 +694,18 @@ class SpecifierSet(BaseSpecifier):
694
694
specifiers (``>=3.0,!=3.1``), or no specifier at all.
695
695
"""
696
696
697
- def __init__ (self , specifiers : str = "" , prereleases : bool | None = None ) -> None :
697
+ def __init__ (
698
+ self ,
699
+ specifiers : str | Iterable [Specifier ] = "" ,
700
+ prereleases : bool | None = None ,
701
+ ) -> None :
698
702
"""Initialize a SpecifierSet instance.
699
703
700
704
:param specifiers:
701
705
The string representation of a specifier or a comma-separated list of
702
706
specifiers which will be parsed and normalized before use.
707
+ May also be an iterable of ``Specifier`` instances, which will be used
708
+ as is.
703
709
:param prereleases:
704
710
This tells the SpecifierSet if it should accept prerelease versions if
705
711
applicable or not. The default of ``None`` will autodetect it from the
@@ -710,12 +716,17 @@ def __init__(self, specifiers: str = "", prereleases: bool | None = None) -> Non
710
716
raised.
711
717
"""
712
718
713
- # Split on `,` to break each individual specifier into it's own item, and
714
- # strip each item to remove leading/trailing whitespace.
715
- split_specifiers = [s .strip () for s in specifiers .split ("," ) if s .strip ()]
719
+ if isinstance (specifiers , str ):
720
+ # Split on `,` to break each individual specifier into its own item, and
721
+ # strip each item to remove leading/trailing whitespace.
722
+ split_specifiers = [s .strip () for s in specifiers .split ("," ) if s .strip ()]
716
723
717
- # Make each individual specifier a Specifier and save in a frozen set for later.
718
- self ._specs = frozenset (map (Specifier , split_specifiers ))
724
+ # Make each individual specifier a Specifier and save in a frozen set
725
+ # for later.
726
+ self ._specs = frozenset (map (Specifier , split_specifiers ))
727
+ else :
728
+ # Save the supplied specifiers in a frozen set.
729
+ self ._specs = frozenset (specifiers )
719
730
720
731
# Store our prereleases value so we can use it later to determine if
721
732
# we accept prereleases or not.
0 commit comments