Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't insert any type into SOAP envelope #1379

Open
MarkoZadravec opened this issue Jun 14, 2023 · 0 comments
Open

Can't insert any type into SOAP envelope #1379

MarkoZadravec opened this issue Jun 14, 2023 · 0 comments

Comments

@MarkoZadravec
Copy link

Hi,

I try to create a SOAP envelope with Zeep Library from WSDL. WSDL link

The problem is with the hilfsmittelattribute element. I would like to set a koerperhaelfte to 1 inside.

If I create SOAP by hand

           ....
           <positionHma>
                 <hilfsmittelattribute>
                      <koerperhaelfte>1</koerperhaelfte>
                 </hilfsmittelattribute>
            </positionHma>
           ....

it works.

But if I set it with the Zeep library

data = {
             .....
             'positionHma': [
                    {
                        'hilfsmittelattribute': {
                            "koerperhaelfte": 1,
                        }
                    }
                ]
                .......
              }

pack = conn.service.sendKostenvoranschlagData(**data)

I get the error


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[14], line 1
----> 1 pack = conn.service.sendKostenvoranschlagData(**data)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/proxy.py:46, in OperationProxy.__call__(self, *args, **kwargs)
     43 if soap_headers:
     44     kwargs["_soapheaders"] = soap_headers
---> 46 return self._proxy._binding.send(
     47     self._proxy._client,
     48     self._proxy._binding_options,
     49     self._op_name,
     50     args,
     51     kwargs,
     52 )

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/wsdl/bindings/soap.py:123, in SoapBinding.send(self, client, options, operation, args, kwargs)
    108 def send(self, client, options, operation, args, kwargs):
    109     """Called from the service
    110 
    111     :param client: The client with which the operation was called
   (...)
    121 
    122     """
--> 123     envelope, http_headers = self._create(
    124         operation, args, kwargs, client=client, options=options
    125     )
    127     response = client.transport.post_xml(options["address"], envelope, http_headers)
    129     operation_obj = self.get(operation)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/wsdl/bindings/soap.py:73, in SoapBinding._create(self, operation, args, kwargs, client, options)
     70     raise ValueError("Operation %r not found" % operation)
     72 # Create the SOAP envelope
---> 73 serialized = operation_obj.create(*args, **kwargs)
     74 self._set_http_headers(serialized, operation_obj)
     76 envelope = serialized.content

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/wsdl/definitions.py:224, in Operation.create(self, *args, **kwargs)
    222 def create(self, *args, **kwargs):
    223     assert self.input is not None
--> 224     return self.input.serialize(*args, **kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/wsdl/messages/soap.py:73, in SoapMessage.serialize(self, *args, **kwargs)
     68 # Create the soap:body element. The _is_body_wrapped attribute signals
     69 # that the self.body element is of type soap:body, so we don't have to
     70 # create it in that case. Otherwise we create a Element soap:body and
     71 # render the content into this.
     72 if self.body:
---> 73     body_value = self.body(*args, **kwargs)
     74     if self._is_body_wrapped:
     75         self.body.render(envelope, body_value)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/element.py:58, in Element.__call__(self, *args, **kwargs)
     57 def __call__(self, *args, **kwargs):
---> 58     instance = self.type(*args, **kwargs)
     59     if isinstance(instance, CompoundValue):
     60         instance._xsd_elm = self

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:75, in ComplexType.__call__(self, *args, **kwargs)
     73 if self._array_type:
     74     return self._array_class(*args, **kwargs)
---> 75 return self._value_class(*args, **kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:106, in CompoundValue.__init__(self, *args, **kwargs)
    103     values[attribute_name] = attribute.default_value
    105 # Set elements
--> 106 items = _process_signature(self._xsd_type, args, kwargs)
    107 for key, value in items.items():
    108     values[key] = value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:220, in _process_signature(xsd_type, args, kwargs)
    218     values = element.parse_kwargs(kwargs, element_name, available_kwargs)
    219 else:
--> 220     values = element.parse_kwargs(kwargs, None, available_kwargs)
    222 if values is not None:
    223     for key, value in values.items():

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/indicators.py:219, in OrderIndicator.parse_kwargs(self, kwargs, name, available_kwargs)
    217 result = OrderedDict()
    218 for elm_name, element in self.elements_nested:
--> 219     sub_result = element.parse_kwargs(kwargs, elm_name, available_kwargs)
    220     if sub_result:
    221         result.update(sub_result)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/element.py:135, in Element.parse_kwargs(self, kwargs, name, available_kwargs)
    134 def parse_kwargs(self, kwargs, name, available_kwargs):
--> 135     return self.type.parse_kwargs(kwargs, name or self.attr_name, available_kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:338, in ComplexType.parse_kwargs(self, kwargs, name, available_kwargs)
    335     available_kwargs.remove(name)
    337     if value is not Nil:
--> 338         value = self._create_object(value, name)
    340     return {name: value}
    341 return {}

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:362, in ComplexType._create_object(self, value, name)
    359     return value
    361 if isinstance(value, dict):
--> 362     return self(**value)
    364 # Try to automatically create an object. This might fail if there
    365 # are multiple required arguments.
    366 return self(value)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:75, in ComplexType.__call__(self, *args, **kwargs)
     73 if self._array_type:
     74     return self._array_class(*args, **kwargs)
---> 75 return self._value_class(*args, **kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:106, in CompoundValue.__init__(self, *args, **kwargs)
    103     values[attribute_name] = attribute.default_value
    105 # Set elements
--> 106 items = _process_signature(self._xsd_type, args, kwargs)
    107 for key, value in items.items():
    108     values[key] = value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:220, in _process_signature(xsd_type, args, kwargs)
    218     values = element.parse_kwargs(kwargs, element_name, available_kwargs)
    219 else:
--> 220     values = element.parse_kwargs(kwargs, None, available_kwargs)
    222 if values is not None:
    223     for key, value in values.items():

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/indicators.py:219, in OrderIndicator.parse_kwargs(self, kwargs, name, available_kwargs)
    217 result = OrderedDict()
    218 for elm_name, element in self.elements_nested:
--> 219     sub_result = element.parse_kwargs(kwargs, elm_name, available_kwargs)
    220     if sub_result:
    221         result.update(sub_result)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/element.py:135, in Element.parse_kwargs(self, kwargs, name, available_kwargs)
    134 def parse_kwargs(self, kwargs, name, available_kwargs):
--> 135     return self.type.parse_kwargs(kwargs, name or self.attr_name, available_kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:338, in ComplexType.parse_kwargs(self, kwargs, name, available_kwargs)
    335     available_kwargs.remove(name)
    337     if value is not Nil:
--> 338         value = self._create_object(value, name)
    340     return {name: value}
    341 return {}

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:362, in ComplexType._create_object(self, value, name)
    359     return value
    361 if isinstance(value, dict):
--> 362     return self(**value)
    364 # Try to automatically create an object. This might fail if there
    365 # are multiple required arguments.
    366 return self(value)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:75, in ComplexType.__call__(self, *args, **kwargs)
     73 if self._array_type:
     74     return self._array_class(*args, **kwargs)
---> 75 return self._value_class(*args, **kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:106, in CompoundValue.__init__(self, *args, **kwargs)
    103     values[attribute_name] = attribute.default_value
    105 # Set elements
--> 106 items = _process_signature(self._xsd_type, args, kwargs)
    107 for key, value in items.items():
    108     values[key] = value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:220, in _process_signature(xsd_type, args, kwargs)
    218     values = element.parse_kwargs(kwargs, element_name, available_kwargs)
    219 else:
--> 220     values = element.parse_kwargs(kwargs, None, available_kwargs)
    222 if values is not None:
    223     for key, value in values.items():

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/indicators.py:219, in OrderIndicator.parse_kwargs(self, kwargs, name, available_kwargs)
    217 result = OrderedDict()
    218 for elm_name, element in self.elements_nested:
--> 219     sub_result = element.parse_kwargs(kwargs, elm_name, available_kwargs)
    220     if sub_result:
    221         result.update(sub_result)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/element.py:135, in Element.parse_kwargs(self, kwargs, name, available_kwargs)
    134 def parse_kwargs(self, kwargs, name, available_kwargs):
--> 135     return self.type.parse_kwargs(kwargs, name or self.attr_name, available_kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:338, in ComplexType.parse_kwargs(self, kwargs, name, available_kwargs)
    335     available_kwargs.remove(name)
    337     if value is not Nil:
--> 338         value = self._create_object(value, name)
    340     return {name: value}
    341 return {}

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:356, in ComplexType._create_object(self, value, name)
    353     return None
    355 if isinstance(value, list) and not self._array_type:
--> 356     return [self._create_object(val, name) for val in value]
    358 if isinstance(value, CompoundValue) or value is SkipValue:
    359     return value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:356, in <listcomp>(.0)
    353     return None
    355 if isinstance(value, list) and not self._array_type:
--> 356     return [self._create_object(val, name) for val in value]
    358 if isinstance(value, CompoundValue) or value is SkipValue:
    359     return value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:362, in ComplexType._create_object(self, value, name)
    359     return value
    361 if isinstance(value, dict):
--> 362     return self(**value)
    364 # Try to automatically create an object. This might fail if there
    365 # are multiple required arguments.
    366 return self(value)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:75, in ComplexType.__call__(self, *args, **kwargs)
     73 if self._array_type:
     74     return self._array_class(*args, **kwargs)
---> 75 return self._value_class(*args, **kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:106, in CompoundValue.__init__(self, *args, **kwargs)
    103     values[attribute_name] = attribute.default_value
    105 # Set elements
--> 106 items = _process_signature(self._xsd_type, args, kwargs)
    107 for key, value in items.items():
    108     values[key] = value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:220, in _process_signature(xsd_type, args, kwargs)
    218     values = element.parse_kwargs(kwargs, element_name, available_kwargs)
    219 else:
--> 220     values = element.parse_kwargs(kwargs, None, available_kwargs)
    222 if values is not None:
    223     for key, value in values.items():

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/indicators.py:219, in OrderIndicator.parse_kwargs(self, kwargs, name, available_kwargs)
    217 result = OrderedDict()
    218 for elm_name, element in self.elements_nested:
--> 219     sub_result = element.parse_kwargs(kwargs, elm_name, available_kwargs)
    220     if sub_result:
    221         result.update(sub_result)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/element.py:135, in Element.parse_kwargs(self, kwargs, name, available_kwargs)
    134 def parse_kwargs(self, kwargs, name, available_kwargs):
--> 135     return self.type.parse_kwargs(kwargs, name or self.attr_name, available_kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:338, in ComplexType.parse_kwargs(self, kwargs, name, available_kwargs)
    335     available_kwargs.remove(name)
    337     if value is not Nil:
--> 338         value = self._create_object(value, name)
    340     return {name: value}
    341 return {}

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:356, in ComplexType._create_object(self, value, name)
    353     return None
    355 if isinstance(value, list) and not self._array_type:
--> 356     return [self._create_object(val, name) for val in value]
    358 if isinstance(value, CompoundValue) or value is SkipValue:
    359     return value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:356, in <listcomp>(.0)
    353     return None
    355 if isinstance(value, list) and not self._array_type:
--> 356     return [self._create_object(val, name) for val in value]
    358 if isinstance(value, CompoundValue) or value is SkipValue:
    359     return value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:362, in ComplexType._create_object(self, value, name)
    359     return value
    361 if isinstance(value, dict):
--> 362     return self(**value)
    364 # Try to automatically create an object. This might fail if there
    365 # are multiple required arguments.
    366 return self(value)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:75, in ComplexType.__call__(self, *args, **kwargs)
     73 if self._array_type:
     74     return self._array_class(*args, **kwargs)
---> 75 return self._value_class(*args, **kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:106, in CompoundValue.__init__(self, *args, **kwargs)
    103     values[attribute_name] = attribute.default_value
    105 # Set elements
--> 106 items = _process_signature(self._xsd_type, args, kwargs)
    107 for key, value in items.items():
    108     values[key] = value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:220, in _process_signature(xsd_type, args, kwargs)
    218     values = element.parse_kwargs(kwargs, element_name, available_kwargs)
    219 else:
--> 220     values = element.parse_kwargs(kwargs, None, available_kwargs)
    222 if values is not None:
    223     for key, value in values.items():

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/indicators.py:219, in OrderIndicator.parse_kwargs(self, kwargs, name, available_kwargs)
    217 result = OrderedDict()
    218 for elm_name, element in self.elements_nested:
--> 219     sub_result = element.parse_kwargs(kwargs, elm_name, available_kwargs)
    220     if sub_result:
    221         result.update(sub_result)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/elements/element.py:135, in Element.parse_kwargs(self, kwargs, name, available_kwargs)
    134 def parse_kwargs(self, kwargs, name, available_kwargs):
--> 135     return self.type.parse_kwargs(kwargs, name or self.attr_name, available_kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:338, in ComplexType.parse_kwargs(self, kwargs, name, available_kwargs)
    335     available_kwargs.remove(name)
    337     if value is not Nil:
--> 338         value = self._create_object(value, name)
    340     return {name: value}
    341 return {}

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:362, in ComplexType._create_object(self, value, name)
    359     return value
    361 if isinstance(value, dict):
--> 362     return self(**value)
    364 # Try to automatically create an object. This might fail if there
    365 # are multiple required arguments.
    366 return self(value)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/types/complex.py:75, in ComplexType.__call__(self, *args, **kwargs)
     73 if self._array_type:
     74     return self._array_class(*args, **kwargs)
---> 75 return self._value_class(*args, **kwargs)

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:106, in CompoundValue.__init__(self, *args, **kwargs)
    103     values[attribute_name] = attribute.default_value
    105 # Set elements
--> 106 items = _process_signature(self._xsd_type, args, kwargs)
    107 for key, value in items.items():
    108     values[key] = value

File ~/Library/Application Support/JetBrains/DataSpell2022.3/projects/workspace/venv/lib/python3.8/site-packages/zeep/xsd/valueobjects.py:241, in _process_signature(xsd_type, args, kwargs)
    238     available_kwargs.remove("_raw_elements")
    240 if available_kwargs:
--> 241     raise TypeError(
    242         ("%s() got an unexpected keyword argument %r. " + "Signature: `%s`")
    243         % (
    244             xsd_type.qname or "ComplexType",
    245             next(iter(available_kwargs)),
    246             xsd_type.signature(standalone=False),
    247         )
    248     )
    250 return result

TypeError: {http://einlieferung.ws.bswsnt.vsa/xsd}hilfsmittelattribute() got an unexpected keyword argument 'koerperhaelfte'. Signature: `_value_1: ANY[]`

I read the documentation on ANY Zeep documentation

But I can't get this element.

conn.get_element('ns0:hilfsmittelattribute')
>>  LookupError: No element 'hilfsmittelattribute' in namespace http://ws.bswsnt.vsa/xsd. Available elements are:  -

conn.get_element('ns1:hilfsmittelattribute')
>>  LookupError: No element 'hilfsmittelattribute' in namespace http://infopool.ws.bswsnt.vsa/xsd. Available elements are:  -

conn.get_element('ns2:hilfsmittelattribute')
>>   LookupError: No element 'hilfsmittelattribute' in namespace http://einlieferung.ws.bswsnt.vsa/xsd. Available elements are:  -

conn.get_element('ns3:hilfsmittelattribute')
>>   No element 'hilfsmittelattribute' in namespace http://ws.bswsnt.vsa. Available elements are: {http://ws.bswsnt.vsa}sendKostenvoranschlagData, {http://ws.bswsnt.vsa}sendKostenvoranschlagDataResponse, {http://ws.bswsnt.vsa}updateKostenvoranschlagStatusData, {http://ws.bswsnt.vsa}updateKostenvoranschlagStatusDataResponse, {http://ws.bswsnt.vsa}retrieveAnhangEntscheidung, {http://ws.bswsnt.vsa}retrieveAnhangEntscheidungResponse, {http://ws.bswsnt.vsa}retrieveAnhang, {http://ws.bswsnt.vsa}retrieveAnhangResponse, {http://ws.bswsnt.vsa}retrieveKostenvoranschlagData, {http://ws.bswsnt.vsa}retrieveKostenvoranschlagDataResponse, {http://ws.bswsnt.vsa}sendLieferbestaetigung, {http://ws.bswsnt.vsa}sendLieferbestaetigungResponse, {http://ws.bswsnt.vsa}checkInfopool, {http://ws.bswsnt.vsa}checkInfopoolResponse, {http://ws.bswsnt.vsa}confirmInfopoolEntry, {http://ws.bswsnt.vsa}confirmInfopoolEntryResponse, {http://ws.bswsnt.vsa}sendNachricht, {http://ws.bswsnt.vsa}sendNachrichtResponse, {http://ws.bswsnt.vsa}retrieveNachricht, {http://ws.bswsnt.vsa}retrieveNachrichtResponse, {http://ws.bswsnt.vsa}declineVersorgungsanfrage, {http://ws.bswsnt.vsa}declineVersorgungsanfrageResponse, {http://ws.bswsnt.vsa}cancelKostenvoranschlag, {http://ws.bswsnt.vsa}cancelKostenvoranschlagResponse, {http://ws.bswsnt.vsa}retrieveHmaDefinition, {http://ws.bswsnt.vsa}retrieveHmaDefinitionResponse

I can get the type from it

hilfsmittelattribute_type = conn.get_type('ns2:hilfsmittelattribute')

but I don't know how to use it. Whatever I try it doesn't work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant