pycloj-tools.browser-test

pycloj-tools.browser-test - created by notespace, Wed Dec 25 01:00:53 IST 2019.
Table of contents

(require
  (quote [pycloj-tools.browser :refer
          :all])
  (quote [pycloj-tools.pyutils :as
          pyutils])
  (quote [libpython-clj.python :as py])
  (quote [clojure.java.shell :refer
          [sh]])
  (quote [clojure.string :as string])
  (quote [com.rpl.specter :refer
          [transform ALL MAP-VALS]]))

The pycloj-tools.browser namespace offers a collection of functions for inspecting python modules. We will test it with realistic python packages such as pandas, as well as with a dummy one, that we have here:

[:div
 (-> (sh "find" "dummy_package")
     :out
     (string/split (re-pattern "\n"))
     (->>
       (filter (fn [line]
                 (not (re-find
                        (re-pattern
                          "__pycache__")
                        line))))
       (map (fn [line] [:li line]))
       (into [:ul])))]

~~~~name-module-test~~~~
[[=
  (-> "dummy_package.module_a"
      name->module
      module->name)
  "dummy_package.module_a"]]

PASSED

~~~~failed-import-test~~~~
[[=
  (-> "dummy_package.modulllle_a"
      name->module)
  {:cause
     "ModuleNotFoundError: No module named 'dummy_package.modulllle_a'\n",
   :failed-import? true,
   :module-name
     "dummy_package.modulllle_a"}]]

PASSED

~~~~submodule-names-test~~~~
[[=
  (-> "dummy_package.module_a"
      name->module
      module->submodules-names)
  ["dummy_package.module_a.submodule_aa"]]
 [=
  (-> "pandas"
      name->module
      module->submodules-names)
  ["pandas._config" "pandas._libs"
   "pandas.api" "pandas.arrays"
   "pandas.compat" "pandas.core"
   "pandas.errors" "pandas.io"
   "pandas.plotting" "pandas.tests"
   "pandas.tseries" "pandas.util"]]]

PASSED

PASSED

~~~~no-submodules-test~~~~
[[=
  (->
    "dummy_package.module_a.submodule_aa.submodule_aaa"
    name->module
    module->submodules-names) []]
 [=
  (-> "pandas.plotting._matplotlib"
      name->module
      module->submodules-names) []]]

PASSED

PASSED

~~~~submodules-of-failed-import-test~~~~
[[nil?
  (-> "dummy_package.modulllle_a"
      name->module
      module->submodules-names)]]

PASSED

~~~~submodules-test~~~~
[[=
  (->> "dummy_package.module_a"
       name->module
       module->submodules
       (map module->name))
  ["dummy_package.module_a.submodule_aa"]]]

PASSED

~~~~recursive-submodules-test~~~~
[[=
  (->> "dummy_package.module_a"
       name->module
       module->recursive-submodules
       (map module->name))
  ["dummy_package.module_a"
   "dummy_package.module_a.submodule_aa"
   "dummy_package.module_a.submodule_aa.submodule_aaa"]]]

PASSED

~~~~functions-map-test~~~~
[[=
  (->>
    "dummy_package.module_a.submodule_aa"
    name->module
    ->functions-map
    keys
    set) #{:f}]
 [=
  (->> "dummy_package"
       name->module
       ->functions-map
       keys
       set)
  #{:calling_custom_clojure_fn
    :complex_fn :for_iter}]
 [=
  (->> "dummy_package"
       name->module
       ->classes-map
       :WithObjClass
       ->functions-map
       keys
       set)
  #{:__enter__ :__exit__ :__init__
    :doit_err :doit_noerr}]]

PASSED

PASSED

PASSED

~~~~classes-map-test~~~~
[[=
  (->> "dummy_package"
       name->module
       ->classes-map
       keys
       set) #{:WithObjClass}]]

PASSED

~~~~function-info-test~~~~
[[=
  (->> "dummy_package"
       name->module
       ->functions-map
       :complex_fn
       function->info)
  {:args [{:annotation nil,
           :default nil,
           :empty nil,
           :kind :POSITIONAL_OR_KEYWORD,
           :name "a"}
          {:annotation nil,
           :default nil,
           :empty nil,
           :kind :POSITIONAL_OR_KEYWORD,
           :name "b"}
          {:annotation :str,
           :default 5,
           :empty nil,
           :kind :POSITIONAL_OR_KEYWORD,
           :name "c"}
          {:annotation nil,
           :default nil,
           :empty nil,
           :kind :VAR_POSITIONAL,
           :name "args"}
          {:annotation nil,
           :default 10,
           :empty nil,
           :kind :KEYWORD_ONLY,
           :name "d"}
          {:annotation nil,
           :default nil,
           :empty nil,
           :kind :VAR_KEYWORD,
           :name "kwargs"}],
   :async? false,
   :awaitable? false,
   :builtin? false,
   :doc nil,
   :generator? false,
   :name "complex_fn",
   :return-annotation nil}]]

PASSED


pycloj-tools.browser-test - created by notespace, Wed Dec 25 01:00:53 IST 2019.