Coder Social home page Coder Social logo

alqor-ug / qlued Goto Github PK

View Code? Open in Web Editor NEW
2.0 0.0 2.0 9.36 MB

An API to make quantum circuits accessible for cold atom backends

Home Page: https://alqor-ug.github.io/qlued/

License: Apache License 2.0

Python 50.48% HTML 48.15% Procfile 0.09% Jupyter Notebook 1.27%
cloud django quantum-computing quantum-simulation qiskit-backends django-ninja rest-api

qlued's Introduction

qlued

Mozilla HTTP Observatory Grade

This project handles user and device registration for quantum hardware simulators. It off-loads the need to implement this from the back-end developer and therefore brings specialized academic simulators closer to user. Its API is directly compatible with qiskit-cold-atoms. If you would just like to test it feel free to register on the running test case provided by Alqor. But we strongly would like to encourage others to set up their own instances and give it a try.

Setup and installation

Have a look here for a more detailed description.

Contributing

See the contributing guide for detailed instructions on how to get started with a contribution to our project. We accept different types of contributions, most of them don't require you to write a single line of code.

On the qlued site, you can click the make a contribution button at the top of the page to open a pull request for quick fixes like typos, updates, or link fixes.

For more complex contributions, you can open an issue to describe the changes you'd like to see.

If you're looking for a way to contribute, you can scan through our existing issues for something to work on.

Join us in discussions

We use GitHub Discussions to talk about all sorts of topics related to documentation and this site. For example: if you'd like help troubleshooting a PR, have a great new idea, or want to share something amazing you've learned in our docs, join us in the discussions.

License

Any code within this repo is licenced under the Apache 2 licence.

The qlued documentation in the docs folders are licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA 4.0).

Thanks ๐Ÿ’œ

Thanks for all your contributions and efforts towards improving qlued. We thank you for being part of our โœจ community โœจ!

qlued's People

Contributors

fretchen avatar rohitprasadbhatt avatar

Stargazers

 avatar  avatar

qlued's Issues

Get the dummy test right

We are creating and removing the same kind of dummy back-end. We should add some unique id here.

The backends are not conform with QASM right now

Running with code from the backends I obtain the following:

TypeError: QasmBackendConfiguration.__init__() missing 6 required positional arguments: 'backend_version', 'local', 'conditional', 'open_pulse', 'memory', and 'coupling_map'

Email on sign up

Had a number of comments, where people wondered what they should do after they signed up...

Pull the backend definition from the storage

For the moment we have to safe the back-end defintions in the django sql database. However, there is no good reason why it would be safed here. So we will try to pull from the storage as the sqooler can now safe it over there.

Version update

Describe the bug
We once again have a number of outdated packages (see dependabot).

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

Get single sign on

Nowadays it would be quite nice to implement things like

  • google sign on
  • ibmId
  • sibboleth etc.

However, we will have to see when the time is right for this.

Make the status dict more independent of the API

Describe the bug
Within the API we often recover the status dict from the storage provider. However, this is currently happening in a slightly backend specific way and should be updated. This should get us much closer to #14 and #108.

Update dropbox

Is your feature request related to a problem? Please describe.

To fulfill #14 we need to implement #108. So we would like to get started with the dropbox properly and then move into the implementation with mongodb.

Separate packages for deployment and testing

We currently only really use the requirements.txt, but this adds a lot of useless packages in the running machine and useless security risks. So we should reduce such issues as much as possible.

allow for mongodb storage

Right now the storage is focused on dropbox. But given that we have the StorageProvider it should be easy to add MongoDB as a back-end.

Move the API to django-ninja

We started the implementation of https://qlued.alqor.io/api/v1/docs. However, it would be good to finish the transition and depreciate the old way.

This will require to implement and test:

  • "str:backend_name/get_config/"
  • "str:backend_name/post_job/"
  • "str:backend_name/get_job_status/"
  • "str:backend_name/get_job_result/"
  • "str:backend_name/get_next_job_in_queue/"
  • "str:backend_name/get_user_jobs/"
  • "/backends/"

Multiple storageproviders

Is your feature request related to a problem? Please describe.
Different situations require different storages. We should have a simple way to add storage and machines.

Describe the solution you'd like
As discussed in #138 we need to make it easy to add machines and storages. We actually do not really care about the machines right now as we only know them through the configs in the storages. So let us see how we can add storages before we make it easy to bring your own machine. The storage requires:

  • To make it possible to register several storages.
  • There is a possibility for people to add their own storage (only admins right now).
  • That they cannot access other storages.
  • #152
  • We further have to fix the devices view in the frontend as it is not working right now.
  • #171
  • Create the proper documentation for the changes.

Describe alternatives you've considered

  • We could have also decided to work with a single storage provider. However, this is unlikely to work out too nicely and be flexible enough.

Get an A in mozilla observatory

Is your feature request related to a problem? Please describe.
To secure the system we should follow a number of best practices. They are nicely indicated through observatory as shown here.

For the moment we have to work on:

  • Content security policy #93
  • HSTS #122
  • HTTP Strict Transport Security (HSTS) header set to less than six months (15768000)
  • X-XSS-Protection header not implemented

Implement a CSP

Is your feature request related to a problem? Please describe.

To get a better grading with Mozilla Observatory we should implement a CSP.

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Page load is super slow now

Since we switched to the Dropbox as storage for the backend, the loading has becoming dramatically slower. So for speed purposes we will have to look into the reasons. Possibilities are:

  • The wrong Dropbox plan
  • Better integration with other providers (see #14)
  • Better ways of hosting (heroku is slow in nonSql stuff ?)

Get config through `django-ninja`

We already have started with a version, but it does not yet pull the proper the configurations from the back-ends. This should be a first step for #22

allow token based authentification

For the moment the API requires the user to authentificate through his password. This really has to be changed somehow as this is a major security problem etc. However, most likely we will have to finish the transition to django-ninja before this part makes actually sense.So this one is blocked by #22

Make it simpler to add third-party hardware / simulators

Is your feature request related to a problem? Please describe.
Right now you have to get access to the cloud in a rather uncontrolled fashion to register some kind of simulators etc. It is also not clear if you should bring your own storage or if you should work with the storage provided by the qlued instance.

Describe the solution you'd like
In the same way that a user can log into the system there should be a provider of simulators / hardware etc that can log in.

Describe alternatives you've considered
Most likely the log in should allow you to identify the following roles:

  • user (the same way that people logged in until now).
  • storageprovider if you would like to bring your own storage.
  • backend if you would like to register a new backend provider (one or several devices. This is unimportant).

Additional context
This will require quite a number of subtasks to be fixed. For the moment I am thinking about the following:

  • #148
  • Make it possible to register as a back-end provider such that you obtain the necessary login information etc if you do not want to bring your own storage.

12 failures after python manage.py test

Describe the bug
12 failures after python manage.py test.

(venv) โžœ  qlued git:(main) โœ—  python manage.py test
Found 28 test(s).
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/whitenoise/base.py:115: UserWarning: No directory at: /Users/fuzao/Documents/qlued/staticfiles/
  warnings.warn(u"No directory at: {}".format(root))
F.EEFFFEFFFFEFFFF.......EEE.
======================================================================
ERROR: test_multiqudit_get_config (backends.tests.BackendConfigTest)
Test the API that presents the capabilities of the backend
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests.py", line 105, in test_multiqudit_get_config
    data["basis_gates"], ["rlx", "rlz", "rlz2", "rlxly", "rlzlz"]
KeyError: 'basis_gates'

======================================================================
ERROR: test_singlequdit_get_config (backends.tests.BackendConfigTest)
Test the API that presents the capabilities of the backend
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests.py", line 81, in test_singlequdit_get_config
    self.assertEqual(data["display_name"], "singlequdit")
KeyError: 'display_name'

======================================================================
ERROR: test_fermions_get_config_ninja (backends.tests_api_v1.BackendConfigTest)
Test the API that presents the capabilities of the backend through the new version
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests_api_v1.py", line 35, in test_fermions_get_config_ninja
    req = self.client.get(
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/django/test/client.py", line 927, in get
    response = super().get(path, data=data, secure=secure, headers=headers, **extra)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/django/test/client.py", line 457, in get
    return self.generic(
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/django/test/client.py", line 609, in generic
    return self.request(**r)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/django/test/client.py", line 891, in request
    self.check_exception(response)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/django/test/client.py", line 738, in check_exception
    raise exc_value
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/ninja/operation.py", line 348, in _sync_view
    return operation.run(request, *a, **kw)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/ninja/operation.py", line 111, in run
    return self.api.on_exception(request, e)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/ninja/main.py", line 468, in on_exception
    return handler(request, exc)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/ninja/errors.py", line 104, in _default_exception
    raise exc  # let django deal with it
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/ninja/operation.py", line 105, in run
    return self._result_to_response(request, result, temporal_response)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/ninja/operation.py", line 202, in _result_to_response
    result = response_model.from_orm(resp_object).dict(
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/ninja/schema.py", line 164, in from_orm
    return super().from_orm(obj)
  File "pydantic/main.py", line 574, in pydantic.main.BaseModel.from_orm
pydantic.error_wrappers.ValidationError: 9 validation errors for NinjaResponseSchema
response -> description
  field required (type=value_error.missing)
response -> cold_atom_type
  field required (type=value_error.missing)
response -> wire_order
  field required (type=value_error.missing)
response -> display_name
  field required (type=value_error.missing)
response -> backend_version
  field required (type=value_error.missing)
response -> n_qubits
  field required (type=value_error.missing)
response -> backend_name
  field required (type=value_error.missing)
response -> basis_gates
  field required (type=value_error.missing)
response -> url
  field required (type=value_error.missing)

======================================================================
ERROR: test_fermions_get_config_ninja (backends.tests_api_v2.BackendConfigTest)
Test the API that presents the capabilities of the backend through the new version
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests_api_v2.py", line 42, in test_fermions_get_config_ninja
    req = self.client.get(url)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/django/test/client.py", line 927, in get
    response = super().get(path, data=data, secure=secure, headers=headers, **extra)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/django/test/client.py", line 457, in get
    return self.generic(
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/django/test/client.py", line 609, in generic
    return self.request(**r)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/django/test/client.py", line 891, in request
    self.check_exception(response)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/django/test/client.py", line 738, in check_exception
    raise exc_value
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/ninja/operation.py", line 348, in _sync_view
    return operation.run(request, *a, **kw)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/ninja/operation.py", line 111, in run
    return self.api.on_exception(request, e)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/ninja/main.py", line 468, in on_exception
    return handler(request, exc)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/ninja/errors.py", line 104, in _default_exception
    raise exc  # let django deal with it
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/ninja/operation.py", line 105, in run
    return self._result_to_response(request, result, temporal_response)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/ninja/operation.py", line 202, in _result_to_response
    result = response_model.from_orm(resp_object).dict(
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/ninja/schema.py", line 164, in from_orm
    return super().from_orm(obj)
  File "pydantic/main.py", line 574, in pydantic.main.BaseModel.from_orm
pydantic.error_wrappers.ValidationError: 9 validation errors for NinjaResponseSchema
response -> description
  field required (type=value_error.missing)
response -> cold_atom_type
  field required (type=value_error.missing)
response -> wire_order
  field required (type=value_error.missing)
response -> display_name
  field required (type=value_error.missing)
response -> backend_version
  field required (type=value_error.missing)
response -> n_qubits
  field required (type=value_error.missing)
response -> backend_name
  field required (type=value_error.missing)
response -> basis_gates
  field required (type=value_error.missing)
response -> url
  field required (type=value_error.missing)

======================================================================
ERROR: test_configs (backends.tests_storage_provider.DropboxProvideTest)
Test that we are able to obtain a list of backends.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests_storage_provider.py", line 19, in setUp
    self.storage_provider = DropboxProvider()
  File "/Users/fuzao/Documents/qlued/backends/storage_providers.py", line 137, in __init__
    self.app_key = config("APP_KEY")
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/decouple.py", line 248, in __call__
    return self.config(*args, **kwargs)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/decouple.py", line 107, in __call__
    return self.get(*args, **kwargs)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/decouple.py", line 92, in get
    raise UndefinedValueError('{} not found. Declare it as envvar or define a default value.'.format(option))
decouple.UndefinedValueError: APP_KEY not found. Declare it as envvar or define a default value.

======================================================================
ERROR: test_jobs (backends.tests_storage_provider.DropboxProvideTest)
Test that we can handle the necessary functions for the jobs and status.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests_storage_provider.py", line 19, in setUp
    self.storage_provider = DropboxProvider()
  File "/Users/fuzao/Documents/qlued/backends/storage_providers.py", line 137, in __init__
    self.app_key = config("APP_KEY")
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/decouple.py", line 248, in __call__
    return self.config(*args, **kwargs)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/decouple.py", line 107, in __call__
    return self.get(*args, **kwargs)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/decouple.py", line 92, in get
    raise UndefinedValueError('{} not found. Declare it as envvar or define a default value.'.format(option))
decouple.UndefinedValueError: APP_KEY not found. Declare it as envvar or define a default value.

======================================================================
ERROR: test_upload_etc (backends.tests_storage_provider.DropboxProvideTest)
Test that it is possible to upload a file.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests_storage_provider.py", line 19, in setUp
    self.storage_provider = DropboxProvider()
  File "/Users/fuzao/Documents/qlued/backends/storage_providers.py", line 137, in __init__
    self.app_key = config("APP_KEY")
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/decouple.py", line 248, in __call__
    return self.config(*args, **kwargs)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/decouple.py", line 107, in __call__
    return self.get(*args, **kwargs)
  File "/Users/fuzao/Documents/qlued/venv/lib/python3.9/site-packages/decouple.py", line 92, in get
    raise UndefinedValueError('{} not found. Declare it as envvar or define a default value.'.format(option))
decouple.UndefinedValueError: APP_KEY not found. Declare it as envvar or define a default value.

======================================================================
FAIL: test_fermions_get_config (backends.tests.BackendConfigTest)
Test the API that presents the capabilities of the backend
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests.py", line 48, in test_fermions_get_config
    self.assertEqual(req.status_code, 200)
AssertionError: 404 != 200

======================================================================
FAIL: test_get_job_result (backends.tests.JobSubmissionTest)
Test the API that checks the job status
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests.py", line 266, in test_get_job_result
    self.assertEqual(data["status"], "INITIALIZING")
AssertionError: 'ERROR' != 'INITIALIZING'
- ERROR
+ INITIALIZING


======================================================================
FAIL: test_get_job_status (backends.tests.JobSubmissionTest)
Test the API that checks the job status
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests.py", line 219, in test_get_job_status
    self.assertEqual(data["status"], "INITIALIZING")
AssertionError: 'ERROR' != 'INITIALIZING'
- ERROR
+ INITIALIZING


======================================================================
FAIL: test_post_job (backends.tests.JobSubmissionTest)
Test the API that presents the capabilities of the backend
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests.py", line 171, in test_post_job
    self.assertEqual(data["status"], "INITIALIZING")
AssertionError: 'ERROR' != 'INITIALIZING'
- ERROR
+ INITIALIZING


======================================================================
FAIL: test_get_backends_ninja (backends.tests_api_v1.BackendConfigTest)
Test that we are able to obtain the config of all the backends.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests_api_v1.py", line 71, in test_get_backends_ninja
    self.assertTrue(len(data) >= 4)
AssertionError: False is not true

======================================================================
FAIL: test_get_job_result_ninja (backends.tests_api_v1.JobSubmissionTest)
Test the API that checks the job status
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests_api_v1.py", line 223, in test_get_job_result_ninja
    self.assertEqual(data["status"], "INITIALIZING")
AssertionError: 'ERROR' != 'INITIALIZING'
- ERROR
+ INITIALIZING


======================================================================
FAIL: test_get_job_status_ninja (backends.tests_api_v1.JobSubmissionTest)
Test the API that checks the job status
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests_api_v1.py", line 172, in test_get_job_status_ninja
    self.assertEqual(data["status"], "INITIALIZING")
AssertionError: 'ERROR' != 'INITIALIZING'
- ERROR
+ INITIALIZING


======================================================================
FAIL: test_post_job_ninja (backends.tests_api_v1.JobSubmissionTest)
Test the API that presents the capabilities of the backend
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests_api_v1.py", line 120, in test_post_job_ninja
    self.assertEqual(data["status"], "INITIALIZING")
AssertionError: 'ERROR' != 'INITIALIZING'
- ERROR
+ INITIALIZING


======================================================================
FAIL: test_get_backends_ninja (backends.tests_api_v2.BackendConfigTest)
Test that we are able to obtain the config of all the backends.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests_api_v2.py", line 76, in test_get_backends_ninja
    self.assertTrue(len(data) >= 4)
AssertionError: False is not true

======================================================================
FAIL: test_get_job_result_ninja (backends.tests_api_v2.JobSubmissionTest)
Test the API that checks the job status
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests_api_v2.py", line 229, in test_get_job_result_ninja
    self.assertEqual(data["status"], "INITIALIZING")
AssertionError: 'ERROR' != 'INITIALIZING'
- ERROR
+ INITIALIZING


======================================================================
FAIL: test_get_job_status_ninja (backends.tests_api_v2.JobSubmissionTest)
Test the API that checks the job status
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests_api_v2.py", line 169, in test_get_job_status_ninja
    self.assertEqual(data["status"], "INITIALIZING")
AssertionError: 'ERROR' != 'INITIALIZING'
- ERROR
+ INITIALIZING


======================================================================
FAIL: test_post_job_ninja (backends.tests_api_v2.JobSubmissionTest)
Test the API that presents the capabilities of the backend
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/fuzao/Documents/qlued/backends/tests_api_v2.py", line 130, in test_post_job_ninja
    self.assertEqual(data["status"], "INITIALIZING")
AssertionError: 'ERROR' != 'INITIALIZING'
- ERROR
+ INITIALIZING


----------------------------------------------------------------------
Ran 28 tests in 5.105s

FAILED (failures=12, errors=7)
Destroying test database for alias 'default'...

Get rid of django_on_heroku

It does not really seem necessary to use this anymore. This would also remove the need of the local_settings file etc...

Update the version

We have plenty of out-dated versions in the package. Let us update this one.

StorageProvider need updates

Is your feature request related to a problem? Please describe.
We starting to work on #14 . This requires some rewrite of the StorageProvider and the Dropbox. Already clear tasks are:

  • It has to take dictionaries.
  • The job_id must be different for mongodb systems.
  • The job_id should become a parameter of the whole process.

Folded home menu does not work

Describe the bug
If the navigation bar is collapsed it cannot be unfolded currently.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

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.