code: def _test_consistent_order_of_args(intf, spec_posargs):
      f = getattr(intf, "__call__")
      args, kw_only = get_sig_param_names(f, ("pos_any", "kw_only"))
      # now verify that those spec_posargs are first among args
      # TODO*: The last odd one left from "plugins" era. Decided to leave alone
      if intf.__name__ in ("ExtractMetadata",):
          return
  
      # if we had used * to instruct to have keyword only args, then all
      # args should actually be matched entirely
      if kw_only:
          # "special cases/exclusions"
          if intf.__name__ == "CreateSiblingRia":
              # -s|--name is a mandatory option (for uniformity), so allowed to be used as posarg #2
              eq_(set(args), spec_posargs.union({"name"}))
          else:
              eq_(set(args), spec_posargs)
      else:
          # and if no kw_only -- only those which are known to be positional
          eq_(set(args[: len(spec_posargs)]), spec_posargs)
          if spec_posargs:
              # and really -- we should not even get here if there are some spec_posargs --
              # new interfaces should use * to separate pos args from kwargs per our now
              # accepted design doc:
              # http://docs.datalad.org/en/latest/design/pos_vs_kw_parameters.html
              assert False
  
imports: import re
  from datalad.tests.utils_pytest import SkipTest, assert_false, assert_in, assert_true, eq_
  from datalad.utils import get_sig_param_names
label_desc: Use image node_id 2 for calling a global function with example usage: _test_consistent_order_of_args(intf, spec_posargs) without return types