Coder Social home page Coder Social logo

Comments (4)

garethdmm avatar garethdmm commented on July 26, 2024

I worked on this a bit a few months ago pre-release and made some notes on it. I'll try to find them. The short version is that you're right, this is basically weird behaviour having to do with nose's importer.

from gryphon.

asmodehn avatar asmodehn commented on July 26, 2024

Any thoughts about migrating to the more recent nose2 || pytest4 ?
I could give them a try, and we'll probably need a test framework that is uptodate enough to support python3 import logic anyway...

from gryphon.

garethdmm avatar garethdmm commented on July 26, 2024

I'm open to migrating, doing a quick study on the alternatives would be helpful. This particular case does reflect poorly on nose, IMHO.

from gryphon.

asmodehn avatar asmodehn commented on July 26, 2024

I managed to run the same tests with nose2 and pytest. But I stumbled upon problems with old version of dependencies along the way, so I had to upgrade them :

ERROR: gryphon 0.11.2 has requirement mock==1.0.1, but you'll have mock 2.0.0 which is incompatible.
ERROR: gryphon 0.11.2 has requirement sure==1.2.9, but you'll have sure 1.4.11 which is incompatible.

Then nose2 gave me :

(grytest) alexv@pop-os:~/Projects/gryphon_check$ nose2 gryphon/tests/logic/models/order_test.py
E
======================================================================
ERROR: gryphon/tests/logic/models/order_test.py (nose2.loader.LoadTestsFailure)
----------------------------------------------------------------------
ImportError: Import by filename is not supported.

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (errors=1)
(grytest) alexv@pop-os:~/Projects/gryphon_check$ nose2 gryphon.tests.logic.models.order_test
'BEFORE:'
None
'AFTER:'
<module 'money' from '/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/money/__init__.pyc'>
E
======================================================================
ERROR: gryphon.tests.logic.models.order_test (nose2.loader.LoadTestsFailure)
----------------------------------------------------------------------
AttributeError: '<module 'gryphon.tests.logic.models' from '/opt/Projects/gryphon_check/gryphon/tests/logic/models/__init__.pyc'>' has not attribute 'order_test'

Maybe caused by

Traceback (most recent call last):

  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/nose2/util.py", line 165, in try_import_module_from_name
    module = __import__('.'.join(splitted_name))

  File "/opt/Projects/gryphon_check/gryphon/tests/logic/models/order_test.py", line 10, in <module>
    from gryphon.lib.models.exchange import Exchange, Position

ImportError: cannot import name Exchange


----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (errors=1)

and pytest :

(grytest) alexv@pop-os:~/Projects/gryphon_check$ pytest gryphon/tests/logic/models/order_test.py
==================================================================================== test session starts =====================================================================================
platform linux2 -- Python 2.7.16, pytest-4.6.4, py-1.8.0, pluggy-0.12.0
rootdir: /opt/Projects/gryphon_check
collected 0 items / 1 errors                                                                                                                                                                 

=========================================================================================== ERRORS ===========================================================================================
_________________________________________________________________ ERROR collecting gryphon/tests/logic/models/order_test.py __________________________________________________________________
ImportError while importing test module '/opt/Projects/gryphon_check/gryphon/tests/logic/models/order_test.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
gryphon/tests/logic/models/order_test.py:10: in <module>
    from gryphon.lib.models.exchange import Exchange, Position
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py:431: in load_module
    language_level=self.language_level)
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py:210: in load_module
    mod = imp.load_dynamic(name, so_path)
exchange.pyx:18: in init gryphon.lib.models.exchange (/home/alexv/.pyxbld/temp.linux-x86_64-2.7/pyrex/gryphon/lib/models/exchange.c:10164)
    ???
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py:431: in load_module
    language_level=self.language_level)
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py:210: in load_module
    mod = imp.load_dynamic(name, so_path)
order.pyx:20: in init gryphon.lib.models.order (/home/alexv/.pyxbld/temp.linux-x86_64-2.7/pyrex/gryphon/lib/models/order.c:6290)
    ???
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py:431: in load_module
    language_level=self.language_level)
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py:210: in load_module
    mod = imp.load_dynamic(name, so_path)
trade.pyx:26: in init gryphon.lib.models.trade (/home/alexv/.pyxbld/temp.linux-x86_64-2.7/pyrex/gryphon/lib/models/trade.c:6956)
    ???
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/api.py:71: in __init__
    _as_declarative(cls, classname, cls.__dict__)
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py:128: in _as_declarative
    _MapperConfig.setup_mapping(cls, classname, dict_)
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py:156: in setup_mapping
    cfg_cls(cls_, classname, dict_)
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py:188: in __init__
    self._early_mapping()
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py:191: in _early_mapping
    self.map()
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py:688: in map
    self.cls, self.local_table, **self.mapper_args
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py:704: in __init__
    self._configure_class_instrumentation()
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py:1287: in _configure_class_instrumentation
    for key, method in util.iterate_attributes(self.class_):
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py:663: in iterate_attributes
    keys = dir(cls)
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sure/__init__.py:1084: in _new_dir
    patched = [x for x in old_dir(obj[0]) if isinstance(getattr(obj[0], x, None), AssertionBuilder)]
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/hybrid.py:892: in __get__
    return self._expr_comparator(owner)
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/hybrid.py:1099: in expr_comparator
    comparator(owner),
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/hybrid.py:1084: in _expr
    return ExprComparator(cls, expr(cls), self)
trade.pyx:157: in gryphon.lib.models.trade.Trade.fee_in_usd (/home/alexv/.pyxbld/temp.linux-x86_64-2.7/pyrex/gryphon/lib/models/trade.c:2936)
    ???
E   ImportError: Building module gryphon.lib.models.exchange failed: ['ImportError: Building module gryphon.lib.models.order failed: ["ImportError: Building module gryphon.lib.models.trade failed: [\'ImportError: cannot import name Order\\\\n\']\\n"]\n']
-------------------------------------------------------------------------------------- Captured stdout ---------------------------------------------------------------------------------------
'BEFORE:'
None
'AFTER:'
<module 'money' from '/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/money/__init__.pyc'>
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
================================================================================== 1 error in 0.39 seconds ===================================================================================
(grytest) alexv@pop-os:~/Projects/gryphon_check$ pytest gryphon.tests.logic.models.order_test
==================================================================================== test session starts =====================================================================================
platform linux2 -- Python 2.7.16, pytest-4.6.4, py-1.8.0, pluggy-0.12.0
rootdir: /opt/Projects/gryphon_check
collected 0 items                                                                                                                                                                            

================================================================================ no tests ran in 0.00 seconds ================================================================================
ERROR: file not found: gryphon.tests.logic.models.order_test

Then running the whole package of tests :

(grytest) alexv@pop-os:~/Projects/gryphon_check$ nose2 gryphon.tests.logic.models

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
(grytest) alexv@pop-os:~/Projects/gryphon_check$ ls gryphon/tests/logic/models/
balance_test.py   __init__.py   liability_test.py   order_test.py   __pycache__    trade_test.pyc       transaction_test.pyc
balance_test.pyc  __init__.pyc  liability_test.pyc  order_test.pyc  trade_test.py  transaction_test.py
(grytest) alexv@pop-os:~/Projects/gryphon_check$ mv gryphon/tests/logic/models/order_test.py gryphon/tests/logic/models/test_order.py
(grytest) alexv@pop-os:~/Projects/gryphon_check$ nose2 gryphon.tests.logic.models
'BEFORE:'
None
'AFTER:'
<module 'money' from '/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/money/__init__.pyc'>
E
======================================================================
ERROR: gryphon.tests.logic.models.test_order (nose2.loader.ModuleImportFailure)
----------------------------------------------------------------------
ImportError: Failed to import test module: gryphon.tests.logic.models.test_order
Traceback (most recent call last):
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/nose2/plugins/loader/discovery.py", line 201, in _find_tests_in_file
    module = util.module_from_name(module_name)
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/nose2/util.py", line 77, in module_from_name
    __import__(name)
  File "/opt/Projects/gryphon_check/gryphon/tests/logic/models/test_order.py", line 10, in <module>
    from gryphon.lib.models.exchange import Exchange, Position
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py", line 431, in load_module
    language_level=self.language_level)
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py", line 210, in load_module
    mod = imp.load_dynamic(name, so_path)
  File "exchange.pyx", line 18, in init gryphon.lib.models.exchange (/home/alexv/.pyxbld/temp.linux-x86_64-2.7/pyrex/gryphon/lib/models/exchange.c:10164)
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py", line 431, in load_module
    language_level=self.language_level)
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py", line 210, in load_module
    mod = imp.load_dynamic(name, so_path)
  File "order.pyx", line 20, in init gryphon.lib.models.order (/home/alexv/.pyxbld/temp.linux-x86_64-2.7/pyrex/gryphon/lib/models/order.c:6290)
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py", line 431, in load_module
    language_level=self.language_level)
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py", line 210, in load_module
    mod = imp.load_dynamic(name, so_path)
  File "trade.pyx", line 26, in init gryphon.lib.models.trade (/home/alexv/.pyxbld/temp.linux-x86_64-2.7/pyrex/gryphon/lib/models/trade.c:6956)
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/api.py", line 71, in __init__
    _as_declarative(cls, classname, cls.__dict__)
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", line 128, in _as_declarative
    _MapperConfig.setup_mapping(cls, classname, dict_)
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", line 156, in setup_mapping
    cfg_cls(cls_, classname, dict_)
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", line 188, in __init__
    self._early_mapping()
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", line 191, in _early_mapping
    self.map()
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", line 688, in map
    self.cls, self.local_table, **self.mapper_args
  File "<string>", line 2, in mapper
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 704, in __init__
    self._configure_class_instrumentation()
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 1287, in _configure_class_instrumentation
    for key, method in util.iterate_attributes(self.class_):
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 663, in iterate_attributes
    keys = dir(cls)
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sure/__init__.py", line 1084, in _new_dir
    patched = [x for x in old_dir(obj[0]) if isinstance(getattr(obj[0], x, None), AssertionBuilder)]
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/hybrid.py", line 892, in __get__
    return self._expr_comparator(owner)
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/hybrid.py", line 1099, in expr_comparator
    comparator(owner),
  File "/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/hybrid.py", line 1084, in _expr
    return ExprComparator(cls, expr(cls), self)
  File "trade.pyx", line 157, in gryphon.lib.models.trade.Trade.fee_in_usd (/home/alexv/.pyxbld/temp.linux-x86_64-2.7/pyrex/gryphon/lib/models/trade.c:2936)
ImportError: Building module gryphon.lib.models.exchange failed: ['ImportError: Building module gryphon.lib.models.order failed: ["ImportError: Building module gryphon.lib.models.trade failed: [\'ImportError: cannot import name Order\\\\n\']\\n"]\n']


----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (errors=1)
(grytest) alexv@pop-os:~/Projects/gryphon_check$ pytest gryphon/tests/logic/models
==================================================================================== test session starts =====================================================================================
platform linux2 -- Python 2.7.16, pytest-4.6.4, py-1.8.0, pluggy-0.12.0
rootdir: /opt/Projects/gryphon_check
collected 7 items / 4 errors / 3 selected                                                                                                                                                    

=========================================================================================== ERRORS ===========================================================================================
________________________________________________________________ ERROR collecting gryphon/tests/logic/models/balance_test.py _________________________________________________________________
ImportError while importing test module '/opt/Projects/gryphon_check/gryphon/tests/logic/models/balance_test.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
gryphon/tests/logic/models/balance_test.py:11: in <module>
    from gryphon.lib.models.exchange import Balance
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py:431: in load_module
    language_level=self.language_level)
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py:210: in load_module
    mod = imp.load_dynamic(name, so_path)
exchange.pyx:18: in init gryphon.lib.models.exchange (/home/alexv/.pyxbld/temp.linux-x86_64-2.7/pyrex/gryphon/lib/models/exchange.c:10164)
    ???
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py:431: in load_module
    language_level=self.language_level)
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py:210: in load_module
    mod = imp.load_dynamic(name, so_path)
order.pyx:20: in init gryphon.lib.models.order (/home/alexv/.pyxbld/temp.linux-x86_64-2.7/pyrex/gryphon/lib/models/order.c:6290)
    ???
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py:431: in load_module
    language_level=self.language_level)
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/pyximport/pyximport.py:210: in load_module
    mod = imp.load_dynamic(name, so_path)
trade.pyx:26: in init gryphon.lib.models.trade (/home/alexv/.pyxbld/temp.linux-x86_64-2.7/pyrex/gryphon/lib/models/trade.c:6956)
    ???
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/api.py:71: in __init__
    _as_declarative(cls, classname, cls.__dict__)
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py:128: in _as_declarative
    _MapperConfig.setup_mapping(cls, classname, dict_)
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py:156: in setup_mapping
    cfg_cls(cls_, classname, dict_)
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py:188: in __init__
    self._early_mapping()
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py:191: in _early_mapping
    self.map()
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py:688: in map
    self.cls, self.local_table, **self.mapper_args
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py:704: in __init__
    self._configure_class_instrumentation()
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py:1287: in _configure_class_instrumentation
    for key, method in util.iterate_attributes(self.class_):
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py:663: in iterate_attributes
    keys = dir(cls)
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sure/__init__.py:1084: in _new_dir
    patched = [x for x in old_dir(obj[0]) if isinstance(getattr(obj[0], x, None), AssertionBuilder)]
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/hybrid.py:892: in __get__
    return self._expr_comparator(owner)
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/hybrid.py:1099: in expr_comparator
    comparator(owner),
/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/sqlalchemy/ext/hybrid.py:1084: in _expr
    return ExprComparator(cls, expr(cls), self)
trade.pyx:157: in gryphon.lib.models.trade.Trade.fee_in_usd (/home/alexv/.pyxbld/temp.linux-x86_64-2.7/pyrex/gryphon/lib/models/trade.c:2936)
    ???
E   ImportError: Building module gryphon.lib.models.exchange failed: ['ImportError: Building module gryphon.lib.models.order failed: ["ImportError: Building module gryphon.lib.models.trade failed: [\'ImportError: cannot import name Order\\\\n\']\\n"]\n']
-------------------------------------------------------------------------------------- Captured stdout ---------------------------------------------------------------------------------------
'BEFORE:'
None
'AFTER:'
<module 'money' from '/home/alexv/.virtualenvs/grytest/local/lib/python2.7/site-packages/money/__init__.pyc'>
_________________________________________________________________ ERROR collecting gryphon/tests/logic/models/order_test.py __________________________________________________________________
ImportError while importing test module '/opt/Projects/gryphon_check/gryphon/tests/logic/models/order_test.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
gryphon/tests/logic/models/order_test.py:10: in <module>
    from gryphon.lib.models.exchange import Exchange, Position
E   ImportError: cannot import name Exchange
_________________________________________________________________ ERROR collecting gryphon/tests/logic/models/trade_test.py __________________________________________________________________
ImportError while importing test module '/opt/Projects/gryphon_check/gryphon/tests/logic/models/trade_test.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
gryphon/tests/logic/models/trade_test.py:12: in <module>
    from gryphon.lib.models.trade import Trade
E   ImportError: cannot import name Trade
______________________________________________________________ ERROR collecting gryphon/tests/logic/models/transaction_test.py _______________________________________________________________
ImportError while importing test module '/opt/Projects/gryphon_check/gryphon/tests/logic/models/transaction_test.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
gryphon/tests/logic/models/transaction_test.py:10: in <module>
    from gryphon.lib.models.exchange import Exchange, Position
E   ImportError: cannot import name Exchange
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 4 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
================================================================================== 4 error in 0.40 seconds ===================================================================================

So this showed me that :

  • nose2 doesnt always display the output collected
  • nose2 wants python module syntax
  • pytest wants files
  • nose2 needs help to find tests modules (they need to be called test_* apparently)
  • pytest has colors and nose2 doesnt ( it does make things more readable in a terminal )
  • both seem to break on the import cycle of order -> trade -> order, and I am not sure how this even worked with nose before (maybe it simply ignored the nested import call?).
  • It seems that, because of this error, they dont get to the money error just yet.

I am thinking of making a PR to migrate the tests to pytest, probably one test package at a time as it might induce changes in actual module import structureto fix these issues...

from gryphon.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.