Beispiel #1
0
def test_create_new_project_creates_project_directory() -> None:
    project_path = Path.cwd() / "Python Project"

    project_manager = ProjectManager(ProjectConfigManager())
    project_manager.create_new_project(project_path, QCLanguage.Python)

    assert project_path.is_dir()
Beispiel #2
0
def test_create_new_project_copies_ssh_keys_to_global_config_dir() -> None:
    project_manager = ProjectManager(ProjectConfigManager())
    project_manager.create_new_project(Path.cwd() / "CSharp Project",
                                       QCLanguage.CSharp)

    for name in ["key", "key.pub", "README.md"]:
        assert Path(f"~/.lean/ssh/{name}").expanduser().is_file()
Beispiel #3
0
def test_create_new_project_does_not_update_pycharm_jdk_table_when_jdk_entry_already_set(
        system: mock.Mock, editor: str, os: str, path: str) -> None:
    system.return_value = os

    jdk_table = """
<application>
  <component name="ProjectJdkTable">
    <jdk version="2">
      <name value="Lean CLI" />
    </jdk>
  </component>
</application>
    """

    jdk_table_file = Path(
        path).expanduser() / f"{editor}2020.3" / "options" / "jdk.table.xml"
    jdk_table_file.parent.mkdir(parents=True, exist_ok=True)
    with jdk_table_file.open("w+", encoding="utf-8") as file:
        file.write(jdk_table)

    project_manager = ProjectManager(ProjectConfigManager())
    project_manager.create_new_project(Path.cwd() / "Python Project",
                                       QCLanguage.Python)

    assert jdk_table_file.read_text(encoding="utf-8") == jdk_table
Beispiel #4
0
def test_find_algorithm_file_returns_main_cs_when_input_directory_contains_it(
) -> None:
    create_fake_lean_cli_directory()

    project_manager = ProjectManager(ProjectConfigManager())
    result = project_manager.find_algorithm_file(Path.cwd() / "CSharp Project")

    assert result == Path.cwd() / "CSharp Project" / "Main.cs"
Beispiel #5
0
def test_find_algorithm_file_returns_input_when_input_is_file() -> None:
    create_fake_lean_cli_directory()

    project_manager = ProjectManager(ProjectConfigManager())
    result = project_manager.find_algorithm_file(Path.cwd() /
                                                 "Python Project" / "main.py")

    assert result == Path.cwd() / "Python Project" / "main.py"
Beispiel #6
0
def test_create_new_project_sets_description_in_project_config() -> None:
    project_path = Path.cwd() / "Python Project"

    project_manager = ProjectManager(ProjectConfigManager())
    project_manager.create_new_project(project_path, QCLanguage.Python)

    config = Storage(str(project_path / "config.json"))

    assert config.get("description") == ""
Beispiel #7
0
def test_find_algorithm_file_raises_error_when_no_algorithm_file_exists(
) -> None:
    create_fake_lean_cli_directory()

    (Path.cwd() / "Empty Project").mkdir()

    project_manager = ProjectManager(ProjectConfigManager())

    with pytest.raises(Exception):
        project_manager.find_algorithm_file(Path.cwd() / "Empty Project")
Beispiel #8
0
def test_create_new_project_sets_language_in_project_config(
        language: QCLanguage) -> None:
    project_path = Path.cwd() / f"{language.name} Project"

    project_manager = ProjectManager(ProjectConfigManager())
    project_manager.create_new_project(project_path, language)

    config = Storage(str(project_path / "config.json"))

    assert config.get("algorithm-language") == language.name
Beispiel #9
0
def test_create_new_project_creates_valid_csharp_editor_configs(
        file: str, validator: Callable[[str], bool]) -> None:
    project_path = Path.cwd() / "CSharp Project"

    project_manager = ProjectManager(ProjectConfigManager())
    project_manager.create_new_project(project_path, QCLanguage.CSharp)

    assert (project_path / file).is_file()

    with open(project_path / file) as f:
        assert validator(f.read())
Beispiel #10
0
def test_update_last_modified_time_updates_file_properties() -> None:
    local_file = Path.cwd() / "file.txt"
    local_file.touch()

    new_timestamp = datetime(2020, 1, 1, 1, 1, 1)

    project_manager = ProjectManager(ProjectConfigManager())
    project_manager.update_last_modified_time(local_file, new_timestamp)

    timestamp = local_file.stat().st_mtime_ns / 1e9
    timestamp = datetime.fromtimestamp(timestamp)
    assert timestamp.astimezone(tz=timezone.utc).replace(
        tzinfo=None) == new_timestamp
Beispiel #11
0
def test_get_files_to_sync_ignores_generated_source_files(
        directory: str) -> None:
    project_path = Path.cwd() / "My Project"
    project_path.mkdir()

    files = [project_path / "main.py", project_path / directory / "main.py"]
    for file in files:
        file.mkdir(parents=True, exist_ok=True)
        file.touch()

    project_manager = ProjectManager(ProjectConfigManager())
    files_to_sync = project_manager.get_files_to_sync(project_path)

    assert files_to_sync == [files[0]]
Beispiel #12
0
def test_create_new_project_creates_pycharm_jdk_entry_when_pycharm_not_installed_yet(
        system: mock.Mock, editor: str, os: str, path: str) -> None:
    system.return_value = os

    project_manager = ProjectManager(ProjectConfigManager())
    project_manager.create_new_project(Path.cwd() / "Python Project",
                                       QCLanguage.Python)

    jdk_table_file = Path(
        path).expanduser() / editor / "options" / "jdk.table.xml"
    assert jdk_table_file.is_file()

    jdk_table = ElementTree.fromstring(
        jdk_table_file.read_text(encoding="utf-8"))
    assert jdk_table.find(".//jdk/name[@value='Lean CLI']") is not None
Beispiel #13
0
def create_lean_runner(docker_manager: mock.Mock) -> LeanRunner:
    logger = mock.Mock()
    logger.debug_logging_enabled = False

    cli_config_manager = mock.Mock()
    cli_config_manager.user_id.get_value.return_value = "123"
    cli_config_manager.api_token.get_value.return_value = "456"

    project_config_manager = ProjectConfigManager(XMLManager())

    cache_storage = Storage(str(Path("~/.lean/cache").expanduser()))
    lean_config_manager = LeanConfigManager(logger, cli_config_manager,
                                            project_config_manager,
                                            mock.Mock(), cache_storage)
    output_config_manager = OutputConfigManager(lean_config_manager)

    module_manager = mock.Mock()
    module_manager.get_installed_packages.return_value = [
        NuGetPackage(name="QuantConnect.Brokerages", version="1.0.0")
    ]

    xml_manager = XMLManager()
    project_manager = ProjectManager(project_config_manager,
                                     lean_config_manager, xml_manager,
                                     PlatformManager())

    return LeanRunner(logger, project_config_manager, lean_config_manager,
                      output_config_manager, docker_manager, module_manager,
                      project_manager, TempManager(), xml_manager)
Beispiel #14
0
def test_get_files_to_sync_returns_all_source_files() -> None:
    project_path = Path.cwd() / "My Project"
    project_path.mkdir()

    files = [
        "Main.cs", "main.py", "research.ipynb", "path/to/Alpha.cs",
        "path/to/alpha.py"
    ]
    files = [project_path / file for file in files]

    for file in files:
        file.mkdir(parents=True, exist_ok=True)
        file.touch()

    project_manager = ProjectManager(ProjectConfigManager())
    files_to_sync = project_manager.get_files_to_sync(project_path)

    assert sorted(files_to_sync) == sorted(files)
def _create_project_manager() -> ProjectManager:
    xml_manager = XMLManager()
    project_config_manager = ProjectConfigManager(xml_manager)
    cache_storage = Storage(str(Path("~/.lean/cache").expanduser()))

    return ProjectManager(
        project_config_manager,
        LeanConfigManager(mock.Mock(), mock.Mock(), project_config_manager,
                          mock.Mock(), cache_storage), xml_manager,
        PlatformManager())
Beispiel #16
0
def test_create_new_project_creates_rider_debugger_config_when_rider_not_installed_yet(
        system: mock.Mock, os: str, path: str) -> None:
    system.return_value = os

    key_path = Path("~/.lean/ssh/key").expanduser()

    project_manager = ProjectManager(ProjectConfigManager())
    project_manager.create_new_project(Path.cwd() / "CSharp Project",
                                       QCLanguage.CSharp)

    debugger_file = Path(
        path).expanduser() / "Rider" / "options" / "debugger.xml"
    assert debugger_file.is_file()

    debugger_root = ElementTree.fromstring(
        debugger_file.read_text(encoding="utf-8"))
    assert debugger_root.find(
        f".//option/option[@value='<credentials HOST=\"localhost\" PORT=\"2222\" USERNAME=\"root\" PRIVATE_KEY_FILE=\"{key_path.as_posix()}\" USE_KEY_PAIR=\"true\" USE_AUTH_AGENT=\"false\" />']"
    ) is not None
Beispiel #17
0
def test_create_new_project_creates_pycharm_jdk_entry_when_not_set_yet(
        system: mock.Mock, editor: str, os: str, path: str) -> None:
    system.return_value = os

    jdk_table_file = Path(
        path).expanduser() / f"{editor}2020.3" / "options" / "jdk.table.xml"
    jdk_table_file.parent.mkdir(parents=True, exist_ok=True)
    with jdk_table_file.open("w+", encoding="utf-8") as file:
        file.write("""
<application>
  <component name="ProjectJdkTable">
  </component>
</application>
        """)

    project_manager = ProjectManager(ProjectConfigManager())
    project_manager.create_new_project(Path.cwd() / "Python Project",
                                       QCLanguage.Python)

    jdk_table = ElementTree.fromstring(
        jdk_table_file.read_text(encoding="utf-8"))
    assert jdk_table.find(".//jdk/name[@value='Lean CLI']") is not None
Beispiel #18
0
def test_create_new_project_creates_rider_debugger_entry_when_not_set_yet(
        system: mock.Mock, os: str, path: str) -> None:
    system.return_value = os

    key_path = Path("~/.lean/ssh/key").expanduser()

    debugger_file = Path(
        path).expanduser() / "Rider" / "options" / "debugger.xml"
    debugger_file.parent.mkdir(parents=True, exist_ok=True)
    with debugger_file.open("w+", encoding="utf-8") as file:
        file.write(f"""
<application>
  <component name="XDebuggerSettings">
    <data-views />
    <general />
    <debuggers>
      <debugger id="dotnet_debugger">
        <configuration>
          <option name="needNotifyWhenStoppedInExternalCode" value="false" />
          <option name="sshCredentials">
            <option value="&lt;credentials HOST=&quot;localhost&quot; PORT=&quot;2222&quot; USERNAME=&quot;root&quot; PRIVATE_KEY_FILE=&quot;{key_path.as_posix()}&quot; USE_KEY_PAIR=&quot;true&quot; USE_AUTH_AGENT=&quot;false&quot; /&gt;" />
          </option>
        </configuration>
      </debugger>
    </debuggers>
  </component>
</application>
        """)

    project_manager = ProjectManager(ProjectConfigManager())
    project_manager.create_new_project(Path.cwd() / "CSharp Project",
                                       QCLanguage.CSharp)

    debugger_root = ElementTree.fromstring(
        debugger_file.read_text(encoding="utf-8"))
    assert debugger_root.find(
        f".//option/option[@value='<credentials HOST=\"localhost\" PORT=\"2222\" USERNAME=\"root\" PRIVATE_KEY_FILE=\"{key_path.as_posix()}\" USE_KEY_PAIR=\"true\" USE_AUTH_AGENT=\"false\" />']"
    ) is not None