from django import forms
from django.forms.fields import IntegerField, CharField

import evelink.account


class AddAPIForm(forms.Form):
    key_id = IntegerField()
    v_code = CharField(max_length=64, min_length=1)

    def clean(self):
        self._clean()
        return super(AddAPIForm, self).clean()

    def _clean(self):
        """Check the access mask and characters of the supplied keypair.

        """
        key_id = self.cleaned_data.get('key_id')
        v_code = self.cleaned_data.get('v_code')
        if key_id and v_code:
            api = evelink.api.API(api_key=(key_id, v_code))
            account = evelink.account.Account(api)
            try:
                key_info = account.key_info().result
            except evelink.api.APIError as error:
                self.add_error(None, error.message)
                return

            if key_info['type'] != 'account':
                self.add_error(None, 'The API key should select Character: All')

from django import forms
from django.forms.fields import IntegerField, CharField

import evelink.account


class AddAPIForm(forms.Form):
    key_id = IntegerField()
    v_code = CharField(max_length=64, min_length=1)

    def clean(self):
        self._clean()
        return super(AddAPIForm, self).clean()

    def _clean(self):
        """Check the access mask and characters of the supplied keypair.

        """
        key_id = self.cleaned_data.get('key_id')
        v_code = self.cleaned_data.get('v_code')
        if not (key_id and v_code):
            return

        api = evelink.api.API(api_key=(key_id, v_code))
        account = evelink.account.Account(api)
        try:
            key_info = account.key_info().result
        except evelink.api.APIError as error:
            self.add_error(None, error.message)
            return

        if key_info['type'] != 'account':
            self.add_error(None, 'The API key should select Character: All')
        if key_info['access_mask'] != 4294967295:
            self.add_error(None, 'The API key should have full access')
        if key_info['expire_ts']:
            self.add_error(None, 'The API key should have no expiry checked')

Implement checks to pass tests
Implement checks to pass tests

  from django import forms
  from django.forms.fields import IntegerField, CharField
  
  import evelink.account
  
  
  class AddAPIForm(forms.Form):
      key_id = IntegerField()
      v_code = CharField(max_length=64, min_length=1)
  
      def clean(self):
          self._clean()
          return super(AddAPIForm, self).clean()
  
      def _clean(self):
          """Check the access mask and characters of the supplied keypair.
  
          """
          key_id = self.cleaned_data.get('key_id')
          v_code = self.cleaned_data.get('v_code')
-         if key_id and v_code:
+         if not (key_id and v_code):
-             api = evelink.api.API(api_key=(key_id, v_code))
-             account = evelink.account.Account(api)
-             try:
-                 key_info = account.key_info().result
-             except evelink.api.APIError as error:
-                 self.add_error(None, error.message)
-                 return
+             return
  
-             if key_info['type'] != 'account':
-                 self.add_error(None, 'The API key should select Character: All')
+         api = evelink.api.API(api_key=(key_id, v_code))
+         account = evelink.account.Account(api)
+         try:
+             key_info = account.key_info().result
+         except evelink.api.APIError as error:
+             self.add_error(None, error.message)
+             return
  
+         if key_info['type'] != 'account':
+             self.add_error(None, 'The API key should select Character: All')
+         if key_info['access_mask'] != 4294967295:
+             self.add_error(None, 'The API key should have full access')
+         if key_info['expire_ts']:
+             self.add_error(None, 'The API key should have no expiry checked')
+ 
Implement checks to pass tests
## Code Before:
from django import forms
from django.forms.fields import IntegerField, CharField

import evelink.account


class AddAPIForm(forms.Form):
    key_id = IntegerField()
    v_code = CharField(max_length=64, min_length=1)

    def clean(self):
        self._clean()
        return super(AddAPIForm, self).clean()

    def _clean(self):
        """Check the access mask and characters of the supplied keypair.

        """
        key_id = self.cleaned_data.get('key_id')
        v_code = self.cleaned_data.get('v_code')
        if key_id and v_code:
            api = evelink.api.API(api_key=(key_id, v_code))
            account = evelink.account.Account(api)
            try:
                key_info = account.key_info().result
            except evelink.api.APIError as error:
                self.add_error(None, error.message)
                return

            if key_info['type'] != 'account':
                self.add_error(None, 'The API key should select Character: All')

## Instruction:
Implement checks to pass tests
## Code After:
from django import forms
from django.forms.fields import IntegerField, CharField

import evelink.account


class AddAPIForm(forms.Form):
    key_id = IntegerField()
    v_code = CharField(max_length=64, min_length=1)

    def clean(self):
        self._clean()
        return super(AddAPIForm, self).clean()

    def _clean(self):
        """Check the access mask and characters of the supplied keypair.

        """
        key_id = self.cleaned_data.get('key_id')
        v_code = self.cleaned_data.get('v_code')
        if not (key_id and v_code):
            return

        api = evelink.api.API(api_key=(key_id, v_code))
        account = evelink.account.Account(api)
        try:
            key_info = account.key_info().result
        except evelink.api.APIError as error:
            self.add_error(None, error.message)
            return

        if key_info['type'] != 'account':
            self.add_error(None, 'The API key should select Character: All')
        if key_info['access_mask'] != 4294967295:
            self.add_error(None, 'The API key should have full access')
        if key_info['expire_ts']:
            self.add_error(None, 'The API key should have no expiry checked')
