@@ -694,12 +694,18 @@ class SpecifierSet(BaseSpecifier):
694694 specifiers (``>=3.0,!=3.1``), or no specifier at all.
695695 """
696696
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 :
698702 """Initialize a SpecifierSet instance.
699703
700704 :param specifiers:
701705 The string representation of a specifier or a comma-separated list of
702706 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.
703709 :param prereleases:
704710 This tells the SpecifierSet if it should accept prerelease versions if
705711 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
710716 raised.
711717 """
712718
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 ()]
716723
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 )
719730
720731 # Store our prereleases value so we can use it later to determine if
721732 # we accept prereleases or not.
0 commit comments