list_event_for_all_namespaces_with_http_info raises ValueError due to None value for event_time if there are events #1616

Description

@haxsaw

What happened (please include outputs or screenshots):
If you try to fetch events when there aren't any, the above mentioned method returns just fine. But if there are events, then an exception is raised in the internal setter for the 'event_time' property as the value being read in from K8s is None:

ifself.local_vars_configuration.client_side_validationandevent_timeisNone: # noqa: E501raiseValueError("Invalid value for `event_time`, must not be `None`") # noqa: E501

or, as it happens:

 File ".../python3.8/site-packages/kubernetes/client/api_client.py", line 303, in __deserialize
return self.__deserialize_model(data, klass)
File ".../lib/python3.8/site-packages/kubernetes/client/api_client.py", line 641, in __deserialize_model
instance = klass(**kwargs)
File ".../lib/python3.8/site-packages/kubernetes/client/models/events_v1_event.py", line 112, in __init__
self.event_time = event_time
File ".../lib/python3.8/site-packages/kubernetes/client/models/events_v1_event.py", line 291, in event_time
raise ValueError("Invalid value for `event_time`, must not be `None`") # noqa: E501
ValueError: Invalid value for `event_time`, must not be `None`

It may be the case that turning off client_side_validation will fix this, however there seem to be problems in this regard as well. In issue #1353 there was a mention of a breaking change (in release 1.12?) that involved setting up default config where client_side_validation can supposedly be turned off, but setting default configs don't seem to have any effect. Here's the code inside of the __init__() of EventsV1Api (local_vars_configuration is a parameter):

iflocal_vars_configurationisNone:
local_vars_configuration=Configuration()
self.local_vars_configuration=local_vars_configuration

So if you don't pass in a value of local_vars_configuration, you get a brand-new Configuration object in which client_side_validation is True. One would have thought that the assignment to local_vars_configuration should have been:

local_vars_configuration=Configuration.get_default_copy()

which would have kind of lined up with the notes for release 12.0.1. More curiously, if you have a look into the __init__() for Configuration itself, you find this comment before setting client_side_validation:

# Disable client side validationself.client_side_validation=True

So the comment implies that there shouldn't be any client side validation by default, but the code does the opposite.

This is kind of feeling like a regression.

What you expected to happen:
I was expecting that default behaviour wouldn't raise an exception for fetching regular event data from K8s (or in my case, k3s). My tests don't cover every resource type that could be fetched, so there may be other similar fields lurking within the library.

How to reproduce it (as minimally and precisely as possible):

fromkubernetes.clientimportEventsV1Apifromkubernetes.clientimportCoreV1Apifromkubernetesimportconfigdeftryit():
config.load_kube_config(config_file="/etc/rancher/k3s/k3s.yaml") # the config for k3s# you need to first carry out some action that will result in an Event being reported, so we'll make a simple Podp= {'apiVersion': 'v1',
'kind': 'Pod',
'metadata': {'labels': {'app': 'myapp'}, 'name': 'myapp-pod'},
'spec': {'containers': [{'command': ['sh',
'-c',
'echo Hello Kubernetes! && sleep 3600'],
'image': 'busybox',
'name': 'myapp-container'}]}}
api=CoreV1Api()
t0=api.create_namespaced_pod_with_http_info(namespace='default', body=p)
ev=EventsV1Api()
t1=ev.list_event_for_all_namespaces_with_http_info(async_req=False) # this cratersif__name__=="__main__":
tryit()

Anything else we need to know?:

In my dev environment I use k3s, which may be the source for the empty event_time (versions below). Nonetheless, there's clearly something wrong in how default Configurations are being handled.

As this is impacting objects that are being built inside of the K8s Python client itself, it isn't clear that there's a feasible workaround that could involve the user supplying the config object since it appears the default config isn't used and there's no way to pass in a config into list_event_for_all_namespaces_with_http_info().

Environment:

  • Kubernetes version (kubectl version): Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
    Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.5+k3s1", GitCommit:"355fff3017b06cde44dbd879408a3a6826fa7125", GitTreeState:"clean", BuildDate:"2021-03-31T06:21:52Z", GoVersion:"go1.15.10", Compiler:"gc", Platform:"linux/amd64"}
  • OS (e.g., MacOS 10.13.6): Ubuntu 20.04.3 LTS
  • Python version (python --version): 3.810
  • Python client version (pip list | grep kubernetes): 19.15.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedDenotes an issue that needs help from a contributor. Must meet "help wanted" guidelines.kind/bugCategorizes issue or PR as related to a bug.lifecycle/frozenIndicates that an issue or PR should not be auto-closed due to staleness.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
       blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
      }
      } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
      })();
      (function(){
      try {
      var __m = "github.com";
      var __re = new RegExp('^' + "github\\.com" + '
      
      Skip to content

      list_event_for_all_namespaces_with_http_info raises ValueError due to None value for event_time if there are events #1616

      Description

      @haxsaw

      What happened (please include outputs or screenshots):
      If you try to fetch events when there aren't any, the above mentioned method returns just fine. But if there are events, then an exception is raised in the internal setter for the 'event_time' property as the value being read in from K8s is None:

      ifself.local_vars_configuration.client_side_validationandevent_timeisNone: # noqa: E501raiseValueError("Invalid value for `event_time`, must not be `None`") # noqa: E501

      or, as it happens:

       File ".../python3.8/site-packages/kubernetes/client/api_client.py", line 303, in __deserialize
      return self.__deserialize_model(data, klass)
      File ".../lib/python3.8/site-packages/kubernetes/client/api_client.py", line 641, in __deserialize_model
      instance = klass(**kwargs)
      File ".../lib/python3.8/site-packages/kubernetes/client/models/events_v1_event.py", line 112, in __init__
      self.event_time = event_time
      File ".../lib/python3.8/site-packages/kubernetes/client/models/events_v1_event.py", line 291, in event_time
      raise ValueError("Invalid value for `event_time`, must not be `None`") # noqa: E501
      ValueError: Invalid value for `event_time`, must not be `None`
      

      It may be the case that turning off client_side_validation will fix this, however there seem to be problems in this regard as well. In issue #1353 there was a mention of a breaking change (in release 1.12?) that involved setting up default config where client_side_validation can supposedly be turned off, but setting default configs don't seem to have any effect. Here's the code inside of the __init__() of EventsV1Api (local_vars_configuration is a parameter):

      iflocal_vars_configurationisNone:
      local_vars_configuration=Configuration()
      self.local_vars_configuration=local_vars_configuration

      So if you don't pass in a value of local_vars_configuration, you get a brand-new Configuration object in which client_side_validation is True. One would have thought that the assignment to local_vars_configuration should have been:

      local_vars_configuration=Configuration.get_default_copy()

      which would have kind of lined up with the notes for release 12.0.1. More curiously, if you have a look into the __init__() for Configuration itself, you find this comment before setting client_side_validation:

      # Disable client side validationself.client_side_validation=True

      So the comment implies that there shouldn't be any client side validation by default, but the code does the opposite.

      This is kind of feeling like a regression.

      What you expected to happen:
      I was expecting that default behaviour wouldn't raise an exception for fetching regular event data from K8s (or in my case, k3s). My tests don't cover every resource type that could be fetched, so there may be other similar fields lurking within the library.

      How to reproduce it (as minimally and precisely as possible):

      fromkubernetes.clientimportEventsV1Apifromkubernetes.clientimportCoreV1Apifromkubernetesimportconfigdeftryit():
      config.load_kube_config(config_file="/etc/rancher/k3s/k3s.yaml") # the config for k3s# you need to first carry out some action that will result in an Event being reported, so we'll make a simple Podp= {'apiVersion': 'v1',
      'kind': 'Pod',
      'metadata': {'labels': {'app': 'myapp'}, 'name': 'myapp-pod'},
      'spec': {'containers': [{'command': ['sh',
      '-c',
      'echo Hello Kubernetes! && sleep 3600'],
      'image': 'busybox',
      'name': 'myapp-container'}]}}
      api=CoreV1Api()
      t0=api.create_namespaced_pod_with_http_info(namespace='default', body=p)
      ev=EventsV1Api()
      t1=ev.list_event_for_all_namespaces_with_http_info(async_req=False) # this cratersif__name__=="__main__":
      tryit()

      Anything else we need to know?:

      In my dev environment I use k3s, which may be the source for the empty event_time (versions below). Nonetheless, there's clearly something wrong in how default Configurations are being handled.

      As this is impacting objects that are being built inside of the K8s Python client itself, it isn't clear that there's a feasible workaround that could involve the user supplying the config object since it appears the default config isn't used and there's no way to pass in a config into list_event_for_all_namespaces_with_http_info().

      Environment:

      • Kubernetes version (kubectl version): Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
        Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.5+k3s1", GitCommit:"355fff3017b06cde44dbd879408a3a6826fa7125", GitTreeState:"clean", BuildDate:"2021-03-31T06:21:52Z", GoVersion:"go1.15.10", Compiler:"gc", Platform:"linux/amd64"}
      • OS (e.g., MacOS 10.13.6): Ubuntu 20.04.3 LTS
      • Python version (python --version): 3.810
      • Python client version (pip list | grep kubernetes): 19.15.0

      Metadata

      Metadata

      Assignees

      No one assigned

        Labels

        help wantedDenotes an issue that needs help from a contributor. Must meet "help wanted" guidelines.kind/bugCategorizes issue or PR as related to a bug.lifecycle/frozenIndicates that an issue or PR should not be auto-closed due to staleness.

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
          Skip to content

          list_event_for_all_namespaces_with_http_info raises ValueError due to None value for event_time if there are events #1616

          Description

          @haxsaw

          What happened (please include outputs or screenshots):
          If you try to fetch events when there aren't any, the above mentioned method returns just fine. But if there are events, then an exception is raised in the internal setter for the 'event_time' property as the value being read in from K8s is None:

          ifself.local_vars_configuration.client_side_validationandevent_timeisNone: # noqa: E501raiseValueError("Invalid value for `event_time`, must not be `None`") # noqa: E501

          or, as it happens:

           File ".../python3.8/site-packages/kubernetes/client/api_client.py", line 303, in __deserialize
          return self.__deserialize_model(data, klass)
          File ".../lib/python3.8/site-packages/kubernetes/client/api_client.py", line 641, in __deserialize_model
          instance = klass(**kwargs)
          File ".../lib/python3.8/site-packages/kubernetes/client/models/events_v1_event.py", line 112, in __init__
          self.event_time = event_time
          File ".../lib/python3.8/site-packages/kubernetes/client/models/events_v1_event.py", line 291, in event_time
          raise ValueError("Invalid value for `event_time`, must not be `None`") # noqa: E501
          ValueError: Invalid value for `event_time`, must not be `None`
          

          It may be the case that turning off client_side_validation will fix this, however there seem to be problems in this regard as well. In issue #1353 there was a mention of a breaking change (in release 1.12?) that involved setting up default config where client_side_validation can supposedly be turned off, but setting default configs don't seem to have any effect. Here's the code inside of the __init__() of EventsV1Api (local_vars_configuration is a parameter):

          iflocal_vars_configurationisNone:
          local_vars_configuration=Configuration()
          self.local_vars_configuration=local_vars_configuration

          So if you don't pass in a value of local_vars_configuration, you get a brand-new Configuration object in which client_side_validation is True. One would have thought that the assignment to local_vars_configuration should have been:

          local_vars_configuration=Configuration.get_default_copy()

          which would have kind of lined up with the notes for release 12.0.1. More curiously, if you have a look into the __init__() for Configuration itself, you find this comment before setting client_side_validation:

          # Disable client side validationself.client_side_validation=True

          So the comment implies that there shouldn't be any client side validation by default, but the code does the opposite.

          This is kind of feeling like a regression.

          What you expected to happen:
          I was expecting that default behaviour wouldn't raise an exception for fetching regular event data from K8s (or in my case, k3s). My tests don't cover every resource type that could be fetched, so there may be other similar fields lurking within the library.

          How to reproduce it (as minimally and precisely as possible):

          fromkubernetes.clientimportEventsV1Apifromkubernetes.clientimportCoreV1Apifromkubernetesimportconfigdeftryit():
          config.load_kube_config(config_file="/etc/rancher/k3s/k3s.yaml") # the config for k3s# you need to first carry out some action that will result in an Event being reported, so we'll make a simple Podp= {'apiVersion': 'v1',
          'kind': 'Pod',
          'metadata': {'labels': {'app': 'myapp'}, 'name': 'myapp-pod'},
          'spec': {'containers': [{'command': ['sh',
          '-c',
          'echo Hello Kubernetes! && sleep 3600'],
          'image': 'busybox',
          'name': 'myapp-container'}]}}
          api=CoreV1Api()
          t0=api.create_namespaced_pod_with_http_info(namespace='default', body=p)
          ev=EventsV1Api()
          t1=ev.list_event_for_all_namespaces_with_http_info(async_req=False) # this cratersif__name__=="__main__":
          tryit()

          Anything else we need to know?:

          In my dev environment I use k3s, which may be the source for the empty event_time (versions below). Nonetheless, there's clearly something wrong in how default Configurations are being handled.

          As this is impacting objects that are being built inside of the K8s Python client itself, it isn't clear that there's a feasible workaround that could involve the user supplying the config object since it appears the default config isn't used and there's no way to pass in a config into list_event_for_all_namespaces_with_http_info().

          Environment:

          • Kubernetes version (kubectl version): Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
            Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.5+k3s1", GitCommit:"355fff3017b06cde44dbd879408a3a6826fa7125", GitTreeState:"clean", BuildDate:"2021-03-31T06:21:52Z", GoVersion:"go1.15.10", Compiler:"gc", Platform:"linux/amd64"}
          • OS (e.g., MacOS 10.13.6): Ubuntu 20.04.3 LTS
          • Python version (python --version): 3.810
          • Python client version (pip list | grep kubernetes): 19.15.0

          Metadata

          Metadata

          Assignees

          No one assigned

            Labels

            help wantedDenotes an issue that needs help from a contributor. Must meet "help wanted" guidelines.kind/bugCategorizes issue or PR as related to a bug.lifecycle/frozenIndicates that an issue or PR should not be auto-closed due to staleness.

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              list_event_for_all_namespaces_with_http_info raises ValueError due to None value for event_time if there are events #1616

              Description

              @haxsaw

              What happened (please include outputs or screenshots):
              If you try to fetch events when there aren't any, the above mentioned method returns just fine. But if there are events, then an exception is raised in the internal setter for the 'event_time' property as the value being read in from K8s is None:

              ifself.local_vars_configuration.client_side_validationandevent_timeisNone: # noqa: E501raiseValueError("Invalid value for `event_time`, must not be `None`") # noqa: E501

              or, as it happens:

               File ".../python3.8/site-packages/kubernetes/client/api_client.py", line 303, in __deserialize
              return self.__deserialize_model(data, klass)
              File ".../lib/python3.8/site-packages/kubernetes/client/api_client.py", line 641, in __deserialize_model
              instance = klass(**kwargs)
              File ".../lib/python3.8/site-packages/kubernetes/client/models/events_v1_event.py", line 112, in __init__
              self.event_time = event_time
              File ".../lib/python3.8/site-packages/kubernetes/client/models/events_v1_event.py", line 291, in event_time
              raise ValueError("Invalid value for `event_time`, must not be `None`") # noqa: E501
              ValueError: Invalid value for `event_time`, must not be `None`
              

              It may be the case that turning off client_side_validation will fix this, however there seem to be problems in this regard as well. In issue #1353 there was a mention of a breaking change (in release 1.12?) that involved setting up default config where client_side_validation can supposedly be turned off, but setting default configs don't seem to have any effect. Here's the code inside of the __init__() of EventsV1Api (local_vars_configuration is a parameter):

              iflocal_vars_configurationisNone:
              local_vars_configuration=Configuration()
              self.local_vars_configuration=local_vars_configuration

              So if you don't pass in a value of local_vars_configuration, you get a brand-new Configuration object in which client_side_validation is True. One would have thought that the assignment to local_vars_configuration should have been:

              local_vars_configuration=Configuration.get_default_copy()

              which would have kind of lined up with the notes for release 12.0.1. More curiously, if you have a look into the __init__() for Configuration itself, you find this comment before setting client_side_validation:

              # Disable client side validationself.client_side_validation=True

              So the comment implies that there shouldn't be any client side validation by default, but the code does the opposite.

              This is kind of feeling like a regression.

              What you expected to happen:
              I was expecting that default behaviour wouldn't raise an exception for fetching regular event data from K8s (or in my case, k3s). My tests don't cover every resource type that could be fetched, so there may be other similar fields lurking within the library.

              How to reproduce it (as minimally and precisely as possible):

              fromkubernetes.clientimportEventsV1Apifromkubernetes.clientimportCoreV1Apifromkubernetesimportconfigdeftryit():
              config.load_kube_config(config_file="/etc/rancher/k3s/k3s.yaml") # the config for k3s# you need to first carry out some action that will result in an Event being reported, so we'll make a simple Podp= {'apiVersion': 'v1',
              'kind': 'Pod',
              'metadata': {'labels': {'app': 'myapp'}, 'name': 'myapp-pod'},
              'spec': {'containers': [{'command': ['sh',
              '-c',
              'echo Hello Kubernetes! && sleep 3600'],
              'image': 'busybox',
              'name': 'myapp-container'}]}}
              api=CoreV1Api()
              t0=api.create_namespaced_pod_with_http_info(namespace='default', body=p)
              ev=EventsV1Api()
              t1=ev.list_event_for_all_namespaces_with_http_info(async_req=False) # this cratersif__name__=="__main__":
              tryit()

              Anything else we need to know?:

              In my dev environment I use k3s, which may be the source for the empty event_time (versions below). Nonetheless, there's clearly something wrong in how default Configurations are being handled.

              As this is impacting objects that are being built inside of the K8s Python client itself, it isn't clear that there's a feasible workaround that could involve the user supplying the config object since it appears the default config isn't used and there's no way to pass in a config into list_event_for_all_namespaces_with_http_info().

              Environment:

              • Kubernetes version (kubectl version): Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
                Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.5+k3s1", GitCommit:"355fff3017b06cde44dbd879408a3a6826fa7125", GitTreeState:"clean", BuildDate:"2021-03-31T06:21:52Z", GoVersion:"go1.15.10", Compiler:"gc", Platform:"linux/amd64"}
              • OS (e.g., MacOS 10.13.6): Ubuntu 20.04.3 LTS
              • Python version (python --version): 3.810
              • Python client version (pip list | grep kubernetes): 19.15.0

              Metadata

              Metadata

              Assignees

              No one assigned

                Labels

                help wantedDenotes an issue that needs help from a contributor. Must meet "help wanted" guidelines.kind/bugCategorizes issue or PR as related to a bug.lifecycle/frozenIndicates that an issue or PR should not be auto-closed due to staleness.

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions

                  , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
                  Skip to content

                  list_event_for_all_namespaces_with_http_info raises ValueError due to None value for event_time if there are events #1616

                  Description

                  @haxsaw

                  What happened (please include outputs or screenshots):
                  If you try to fetch events when there aren't any, the above mentioned method returns just fine. But if there are events, then an exception is raised in the internal setter for the 'event_time' property as the value being read in from K8s is None:

                  ifself.local_vars_configuration.client_side_validationandevent_timeisNone: # noqa: E501raiseValueError("Invalid value for `event_time`, must not be `None`") # noqa: E501

                  or, as it happens:

                   File ".../python3.8/site-packages/kubernetes/client/api_client.py", line 303, in __deserialize
                  return self.__deserialize_model(data, klass)
                  File ".../lib/python3.8/site-packages/kubernetes/client/api_client.py", line 641, in __deserialize_model
                  instance = klass(**kwargs)
                  File ".../lib/python3.8/site-packages/kubernetes/client/models/events_v1_event.py", line 112, in __init__
                  self.event_time = event_time
                  File ".../lib/python3.8/site-packages/kubernetes/client/models/events_v1_event.py", line 291, in event_time
                  raise ValueError("Invalid value for `event_time`, must not be `None`") # noqa: E501
                  ValueError: Invalid value for `event_time`, must not be `None`
                  

                  It may be the case that turning off client_side_validation will fix this, however there seem to be problems in this regard as well. In issue #1353 there was a mention of a breaking change (in release 1.12?) that involved setting up default config where client_side_validation can supposedly be turned off, but setting default configs don't seem to have any effect. Here's the code inside of the __init__() of EventsV1Api (local_vars_configuration is a parameter):

                  iflocal_vars_configurationisNone:
                  local_vars_configuration=Configuration()
                  self.local_vars_configuration=local_vars_configuration

                  So if you don't pass in a value of local_vars_configuration, you get a brand-new Configuration object in which client_side_validation is True. One would have thought that the assignment to local_vars_configuration should have been:

                  local_vars_configuration=Configuration.get_default_copy()

                  which would have kind of lined up with the notes for release 12.0.1. More curiously, if you have a look into the __init__() for Configuration itself, you find this comment before setting client_side_validation:

                  # Disable client side validationself.client_side_validation=True

                  So the comment implies that there shouldn't be any client side validation by default, but the code does the opposite.

                  This is kind of feeling like a regression.

                  What you expected to happen:
                  I was expecting that default behaviour wouldn't raise an exception for fetching regular event data from K8s (or in my case, k3s). My tests don't cover every resource type that could be fetched, so there may be other similar fields lurking within the library.

                  How to reproduce it (as minimally and precisely as possible):

                  fromkubernetes.clientimportEventsV1Apifromkubernetes.clientimportCoreV1Apifromkubernetesimportconfigdeftryit():
                  config.load_kube_config(config_file="/etc/rancher/k3s/k3s.yaml") # the config for k3s# you need to first carry out some action that will result in an Event being reported, so we'll make a simple Podp= {'apiVersion': 'v1',
                  'kind': 'Pod',
                  'metadata': {'labels': {'app': 'myapp'}, 'name': 'myapp-pod'},
                  'spec': {'containers': [{'command': ['sh',
                  '-c',
                  'echo Hello Kubernetes! && sleep 3600'],
                  'image': 'busybox',
                  'name': 'myapp-container'}]}}
                  api=CoreV1Api()
                  t0=api.create_namespaced_pod_with_http_info(namespace='default', body=p)
                  ev=EventsV1Api()
                  t1=ev.list_event_for_all_namespaces_with_http_info(async_req=False) # this cratersif__name__=="__main__":
                  tryit()

                  Anything else we need to know?:

                  In my dev environment I use k3s, which may be the source for the empty event_time (versions below). Nonetheless, there's clearly something wrong in how default Configurations are being handled.

                  As this is impacting objects that are being built inside of the K8s Python client itself, it isn't clear that there's a feasible workaround that could involve the user supplying the config object since it appears the default config isn't used and there's no way to pass in a config into list_event_for_all_namespaces_with_http_info().

                  Environment:

                  • Kubernetes version (kubectl version): Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
                    Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.5+k3s1", GitCommit:"355fff3017b06cde44dbd879408a3a6826fa7125", GitTreeState:"clean", BuildDate:"2021-03-31T06:21:52Z", GoVersion:"go1.15.10", Compiler:"gc", Platform:"linux/amd64"}
                  • OS (e.g., MacOS 10.13.6): Ubuntu 20.04.3 LTS
                  • Python version (python --version): 3.810
                  • Python client version (pip list | grep kubernetes): 19.15.0

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Labels

                    help wantedDenotes an issue that needs help from a contributor. Must meet "help wanted" guidelines.kind/bugCategorizes issue or PR as related to a bug.lifecycle/frozenIndicates that an issue or PR should not be auto-closed due to staleness.

                    Type

                    No type

                    Projects

                    No projects

                      Milestone

                      No milestone

                      Relationships

                      None yet

                      Development

                      No branches or pull requests

                      Issue actions

                      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                      Skip to content

                      list_event_for_all_namespaces_with_http_info raises ValueError due to None value for event_time if there are events #1616

                      Description

                      @haxsaw

                      What happened (please include outputs or screenshots):
                      If you try to fetch events when there aren't any, the above mentioned method returns just fine. But if there are events, then an exception is raised in the internal setter for the 'event_time' property as the value being read in from K8s is None:

                      ifself.local_vars_configuration.client_side_validationandevent_timeisNone: # noqa: E501raiseValueError("Invalid value for `event_time`, must not be `None`") # noqa: E501

                      or, as it happens:

                       File ".../python3.8/site-packages/kubernetes/client/api_client.py", line 303, in __deserialize
                      return self.__deserialize_model(data, klass)
                      File ".../lib/python3.8/site-packages/kubernetes/client/api_client.py", line 641, in __deserialize_model
                      instance = klass(**kwargs)
                      File ".../lib/python3.8/site-packages/kubernetes/client/models/events_v1_event.py", line 112, in __init__
                      self.event_time = event_time
                      File ".../lib/python3.8/site-packages/kubernetes/client/models/events_v1_event.py", line 291, in event_time
                      raise ValueError("Invalid value for `event_time`, must not be `None`") # noqa: E501
                      ValueError: Invalid value for `event_time`, must not be `None`
                      

                      It may be the case that turning off client_side_validation will fix this, however there seem to be problems in this regard as well. In issue #1353 there was a mention of a breaking change (in release 1.12?) that involved setting up default config where client_side_validation can supposedly be turned off, but setting default configs don't seem to have any effect. Here's the code inside of the __init__() of EventsV1Api (local_vars_configuration is a parameter):

                      iflocal_vars_configurationisNone:
                      local_vars_configuration=Configuration()
                      self.local_vars_configuration=local_vars_configuration

                      So if you don't pass in a value of local_vars_configuration, you get a brand-new Configuration object in which client_side_validation is True. One would have thought that the assignment to local_vars_configuration should have been:

                      local_vars_configuration=Configuration.get_default_copy()

                      which would have kind of lined up with the notes for release 12.0.1. More curiously, if you have a look into the __init__() for Configuration itself, you find this comment before setting client_side_validation:

                      # Disable client side validationself.client_side_validation=True

                      So the comment implies that there shouldn't be any client side validation by default, but the code does the opposite.

                      This is kind of feeling like a regression.

                      What you expected to happen:
                      I was expecting that default behaviour wouldn't raise an exception for fetching regular event data from K8s (or in my case, k3s). My tests don't cover every resource type that could be fetched, so there may be other similar fields lurking within the library.

                      How to reproduce it (as minimally and precisely as possible):

                      fromkubernetes.clientimportEventsV1Apifromkubernetes.clientimportCoreV1Apifromkubernetesimportconfigdeftryit():
                      config.load_kube_config(config_file="/etc/rancher/k3s/k3s.yaml") # the config for k3s# you need to first carry out some action that will result in an Event being reported, so we'll make a simple Podp= {'apiVersion': 'v1',
                      'kind': 'Pod',
                      'metadata': {'labels': {'app': 'myapp'}, 'name': 'myapp-pod'},
                      'spec': {'containers': [{'command': ['sh',
                      '-c',
                      'echo Hello Kubernetes! && sleep 3600'],
                      'image': 'busybox',
                      'name': 'myapp-container'}]}}
                      api=CoreV1Api()
                      t0=api.create_namespaced_pod_with_http_info(namespace='default', body=p)
                      ev=EventsV1Api()
                      t1=ev.list_event_for_all_namespaces_with_http_info(async_req=False) # this cratersif__name__=="__main__":
                      tryit()

                      Anything else we need to know?:

                      In my dev environment I use k3s, which may be the source for the empty event_time (versions below). Nonetheless, there's clearly something wrong in how default Configurations are being handled.

                      As this is impacting objects that are being built inside of the K8s Python client itself, it isn't clear that there's a feasible workaround that could involve the user supplying the config object since it appears the default config isn't used and there's no way to pass in a config into list_event_for_all_namespaces_with_http_info().

                      Environment:

                      • Kubernetes version (kubectl version): Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
                        Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.5+k3s1", GitCommit:"355fff3017b06cde44dbd879408a3a6826fa7125", GitTreeState:"clean", BuildDate:"2021-03-31T06:21:52Z", GoVersion:"go1.15.10", Compiler:"gc", Platform:"linux/amd64"}
                      • OS (e.g., MacOS 10.13.6): Ubuntu 20.04.3 LTS
                      • Python version (python --version): 3.810
                      • Python client version (pip list | grep kubernetes): 19.15.0

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Labels

                        help wantedDenotes an issue that needs help from a contributor. Must meet "help wanted" guidelines.kind/bugCategorizes issue or PR as related to a bug.lifecycle/frozenIndicates that an issue or PR should not be auto-closed due to staleness.

                        Type

                        No type

                        Projects

                        No projects

                          Milestone

                          No milestone

                          Relationships

                          None yet

                          Development

                          No branches or pull requests

                          Issue actions

                          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                          Skip to content

                          list_event_for_all_namespaces_with_http_info raises ValueError due to None value for event_time if there are events #1616

                          Description

                          @haxsaw

                          What happened (please include outputs or screenshots):
                          If you try to fetch events when there aren't any, the above mentioned method returns just fine. But if there are events, then an exception is raised in the internal setter for the 'event_time' property as the value being read in from K8s is None:

                          ifself.local_vars_configuration.client_side_validationandevent_timeisNone: # noqa: E501raiseValueError("Invalid value for `event_time`, must not be `None`") # noqa: E501

                          or, as it happens:

                           File ".../python3.8/site-packages/kubernetes/client/api_client.py", line 303, in __deserialize
                          return self.__deserialize_model(data, klass)
                          File ".../lib/python3.8/site-packages/kubernetes/client/api_client.py", line 641, in __deserialize_model
                          instance = klass(**kwargs)
                          File ".../lib/python3.8/site-packages/kubernetes/client/models/events_v1_event.py", line 112, in __init__
                          self.event_time = event_time
                          File ".../lib/python3.8/site-packages/kubernetes/client/models/events_v1_event.py", line 291, in event_time
                          raise ValueError("Invalid value for `event_time`, must not be `None`") # noqa: E501
                          ValueError: Invalid value for `event_time`, must not be `None`
                          

                          It may be the case that turning off client_side_validation will fix this, however there seem to be problems in this regard as well. In issue #1353 there was a mention of a breaking change (in release 1.12?) that involved setting up default config where client_side_validation can supposedly be turned off, but setting default configs don't seem to have any effect. Here's the code inside of the __init__() of EventsV1Api (local_vars_configuration is a parameter):

                          iflocal_vars_configurationisNone:
                          local_vars_configuration=Configuration()
                          self.local_vars_configuration=local_vars_configuration

                          So if you don't pass in a value of local_vars_configuration, you get a brand-new Configuration object in which client_side_validation is True. One would have thought that the assignment to local_vars_configuration should have been:

                          local_vars_configuration=Configuration.get_default_copy()

                          which would have kind of lined up with the notes for release 12.0.1. More curiously, if you have a look into the __init__() for Configuration itself, you find this comment before setting client_side_validation:

                          # Disable client side validationself.client_side_validation=True

                          So the comment implies that there shouldn't be any client side validation by default, but the code does the opposite.

                          This is kind of feeling like a regression.

                          What you expected to happen:
                          I was expecting that default behaviour wouldn't raise an exception for fetching regular event data from K8s (or in my case, k3s). My tests don't cover every resource type that could be fetched, so there may be other similar fields lurking within the library.

                          How to reproduce it (as minimally and precisely as possible):

                          fromkubernetes.clientimportEventsV1Apifromkubernetes.clientimportCoreV1Apifromkubernetesimportconfigdeftryit():
                          config.load_kube_config(config_file="/etc/rancher/k3s/k3s.yaml") # the config for k3s# you need to first carry out some action that will result in an Event being reported, so we'll make a simple Podp= {'apiVersion': 'v1',
                          'kind': 'Pod',
                          'metadata': {'labels': {'app': 'myapp'}, 'name': 'myapp-pod'},
                          'spec': {'containers': [{'command': ['sh',
                          '-c',
                          'echo Hello Kubernetes! && sleep 3600'],
                          'image': 'busybox',
                          'name': 'myapp-container'}]}}
                          api=CoreV1Api()
                          t0=api.create_namespaced_pod_with_http_info(namespace='default', body=p)
                          ev=EventsV1Api()
                          t1=ev.list_event_for_all_namespaces_with_http_info(async_req=False) # this cratersif__name__=="__main__":
                          tryit()

                          Anything else we need to know?:

                          In my dev environment I use k3s, which may be the source for the empty event_time (versions below). Nonetheless, there's clearly something wrong in how default Configurations are being handled.

                          As this is impacting objects that are being built inside of the K8s Python client itself, it isn't clear that there's a feasible workaround that could involve the user supplying the config object since it appears the default config isn't used and there's no way to pass in a config into list_event_for_all_namespaces_with_http_info().

                          Environment:

                          • Kubernetes version (kubectl version): Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
                            Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.5+k3s1", GitCommit:"355fff3017b06cde44dbd879408a3a6826fa7125", GitTreeState:"clean", BuildDate:"2021-03-31T06:21:52Z", GoVersion:"go1.15.10", Compiler:"gc", Platform:"linux/amd64"}
                          • OS (e.g., MacOS 10.13.6): Ubuntu 20.04.3 LTS
                          • Python version (python --version): 3.810
                          • Python client version (pip list | grep kubernetes): 19.15.0

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Labels

                            help wantedDenotes an issue that needs help from a contributor. Must meet "help wanted" guidelines.kind/bugCategorizes issue or PR as related to a bug.lifecycle/frozenIndicates that an issue or PR should not be auto-closed due to staleness.

                            Type

                            No type

                            Projects

                            No projects

                              Milestone

                              No milestone

                              Relationships

                              None yet

                              Development

                              No branches or pull requests

                              Issue actions

                              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                              Skip to content

                              list_event_for_all_namespaces_with_http_info raises ValueError due to None value for event_time if there are events #1616

                              Description

                              @haxsaw

                              What happened (please include outputs or screenshots):
                              If you try to fetch events when there aren't any, the above mentioned method returns just fine. But if there are events, then an exception is raised in the internal setter for the 'event_time' property as the value being read in from K8s is None:

                              ifself.local_vars_configuration.client_side_validationandevent_timeisNone: # noqa: E501raiseValueError("Invalid value for `event_time`, must not be `None`") # noqa: E501

                              or, as it happens:

                               File ".../python3.8/site-packages/kubernetes/client/api_client.py", line 303, in __deserialize
                              return self.__deserialize_model(data, klass)
                              File ".../lib/python3.8/site-packages/kubernetes/client/api_client.py", line 641, in __deserialize_model
                              instance = klass(**kwargs)
                              File ".../lib/python3.8/site-packages/kubernetes/client/models/events_v1_event.py", line 112, in __init__
                              self.event_time = event_time
                              File ".../lib/python3.8/site-packages/kubernetes/client/models/events_v1_event.py", line 291, in event_time
                              raise ValueError("Invalid value for `event_time`, must not be `None`") # noqa: E501
                              ValueError: Invalid value for `event_time`, must not be `None`
                              

                              It may be the case that turning off client_side_validation will fix this, however there seem to be problems in this regard as well. In issue #1353 there was a mention of a breaking change (in release 1.12?) that involved setting up default config where client_side_validation can supposedly be turned off, but setting default configs don't seem to have any effect. Here's the code inside of the __init__() of EventsV1Api (local_vars_configuration is a parameter):

                              iflocal_vars_configurationisNone:
                              local_vars_configuration=Configuration()
                              self.local_vars_configuration=local_vars_configuration

                              So if you don't pass in a value of local_vars_configuration, you get a brand-new Configuration object in which client_side_validation is True. One would have thought that the assignment to local_vars_configuration should have been:

                              local_vars_configuration=Configuration.get_default_copy()

                              which would have kind of lined up with the notes for release 12.0.1. More curiously, if you have a look into the __init__() for Configuration itself, you find this comment before setting client_side_validation:

                              # Disable client side validationself.client_side_validation=True

                              So the comment implies that there shouldn't be any client side validation by default, but the code does the opposite.

                              This is kind of feeling like a regression.

                              What you expected to happen:
                              I was expecting that default behaviour wouldn't raise an exception for fetching regular event data from K8s (or in my case, k3s). My tests don't cover every resource type that could be fetched, so there may be other similar fields lurking within the library.

                              How to reproduce it (as minimally and precisely as possible):

                              fromkubernetes.clientimportEventsV1Apifromkubernetes.clientimportCoreV1Apifromkubernetesimportconfigdeftryit():
                              config.load_kube_config(config_file="/etc/rancher/k3s/k3s.yaml") # the config for k3s# you need to first carry out some action that will result in an Event being reported, so we'll make a simple Podp= {'apiVersion': 'v1',
                              'kind': 'Pod',
                              'metadata': {'labels': {'app': 'myapp'}, 'name': 'myapp-pod'},
                              'spec': {'containers': [{'command': ['sh',
                              '-c',
                              'echo Hello Kubernetes! && sleep 3600'],
                              'image': 'busybox',
                              'name': 'myapp-container'}]}}
                              api=CoreV1Api()
                              t0=api.create_namespaced_pod_with_http_info(namespace='default', body=p)
                              ev=EventsV1Api()
                              t1=ev.list_event_for_all_namespaces_with_http_info(async_req=False) # this cratersif__name__=="__main__":
                              tryit()

                              Anything else we need to know?:

                              In my dev environment I use k3s, which may be the source for the empty event_time (versions below). Nonetheless, there's clearly something wrong in how default Configurations are being handled.

                              As this is impacting objects that are being built inside of the K8s Python client itself, it isn't clear that there's a feasible workaround that could involve the user supplying the config object since it appears the default config isn't used and there's no way to pass in a config into list_event_for_all_namespaces_with_http_info().

                              Environment:

                              • Kubernetes version (kubectl version): Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
                                Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.5+k3s1", GitCommit:"355fff3017b06cde44dbd879408a3a6826fa7125", GitTreeState:"clean", BuildDate:"2021-03-31T06:21:52Z", GoVersion:"go1.15.10", Compiler:"gc", Platform:"linux/amd64"}
                              • OS (e.g., MacOS 10.13.6): Ubuntu 20.04.3 LTS
                              • Python version (python --version): 3.810
                              • Python client version (pip list | grep kubernetes): 19.15.0

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Labels

                                help wantedDenotes an issue that needs help from a contributor. Must meet "help wanted" guidelines.kind/bugCategorizes issue or PR as related to a bug.lifecycle/frozenIndicates that an issue or PR should not be auto-closed due to staleness.

                                Type

                                No type

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions