summaryrefslogtreecommitdiff
path: root/server/continuedev/libs/util/paths.py
diff options
context:
space:
mode:
authorNate Sesti <33237525+sestinj@users.noreply.github.com>2023-10-09 18:37:27 -0700
committerGitHub <noreply@github.com>2023-10-09 18:37:27 -0700
commitf09150617ed2454f3074bcf93f53aae5ae637d40 (patch)
tree5cfe614a64d921dfe58b049f426d67a8b832c71f /server/continuedev/libs/util/paths.py
parent985304a213f620cdff3f8f65f74ed7e3b79be29d (diff)
downloadsncontinue-f09150617ed2454f3074bcf93f53aae5ae637d40.tar.gz
sncontinue-f09150617ed2454f3074bcf93f53aae5ae637d40.tar.bz2
sncontinue-f09150617ed2454f3074bcf93f53aae5ae637d40.zip
Preview (#541)
* Strong typing (#533) * refactor: :recycle: get rid of continuedev.src.continuedev structure * refactor: :recycle: switching back to server folder * feat: :sparkles: make config.py imports shorter * feat: :bookmark: publish as pre-release vscode extension * refactor: :recycle: refactor and add more completion params to ui * build: :building_construction: download from preview S3 * fix: :bug: fix paths * fix: :green_heart: package:pre-release * ci: :green_heart: more time for tests * fix: :green_heart: fix build scripts * fix: :bug: fix import in run.py * fix: :bookmark: update version to try again * ci: 💚 Update package.json version [skip ci] * refactor: :fire: don't check for old extensions version * fix: :bug: small bug fixes * fix: :bug: fix config.py import paths * ci: 💚 Update package.json version [skip ci] * ci: :green_heart: platform-specific builds test #1 * feat: :green_heart: ship with binary * fix: :green_heart: fix copy statement to include.exe for windows * fix: :green_heart: cd extension before packaging * chore: :loud_sound: count tokens generated * fix: :green_heart: remove npm_config_arch * fix: :green_heart: publish as pre-release! * chore: :bookmark: update version * perf: :green_heart: hardcode distro paths * fix: :bug: fix yaml syntax error * chore: :bookmark: update version * fix: :green_heart: update permissions and version * feat: :bug: kill old server if needed * feat: :lipstick: update marketplace icon for pre-release * ci: 💚 Update package.json version [skip ci] * feat: :sparkles: auto-reload for config.py * feat: :wrench: update default config.py imports * feat: :sparkles: codelens in config.py * feat: :sparkles: select model param count from UI * ci: 💚 Update package.json version [skip ci] * feat: :sparkles: more model options, ollama error handling * perf: :zap: don't show server loading immediately * fix: :bug: fixing small UI details * ci: 💚 Update package.json version [skip ci] * feat: :rocket: headers param on LLM class * fix: :bug: fix headers for openai.;y * feat: :sparkles: highlight code on cmd+shift+L * ci: 💚 Update package.json version [skip ci] * feat: :lipstick: sticky top bar in gui.tsx * fix: :loud_sound: websocket logging and horizontal scrollbar * ci: 💚 Update package.json version [skip ci] * feat: :sparkles: allow AzureOpenAI Service through GGML * ci: 💚 Update package.json version [skip ci] * fix: :bug: fix automigration * ci: 💚 Update package.json version [skip ci] * ci: :green_heart: upload binaries in ci, download apple silicon * chore: :fire: remove notes * fix: :green_heart: use curl to download binary * fix: :green_heart: set permissions on apple silicon binary * fix: :green_heart: testing * fix: :green_heart: cleanup file * fix: :green_heart: fix preview.yaml * fix: :green_heart: only upload once per binary * fix: :green_heart: install rosetta * ci: :green_heart: download binary after tests * ci: 💚 Update package.json version [skip ci] * ci: :green_heart: prepare ci for merge to main --------- Co-authored-by: GitHub Action <action@github.com>
Diffstat (limited to 'server/continuedev/libs/util/paths.py')
-rw-r--r--server/continuedev/libs/util/paths.py148
1 files changed, 148 insertions, 0 deletions
diff --git a/server/continuedev/libs/util/paths.py b/server/continuedev/libs/util/paths.py
new file mode 100644
index 00000000..22e4b5b9
--- /dev/null
+++ b/server/continuedev/libs/util/paths.py
@@ -0,0 +1,148 @@
+import os
+import re
+from typing import Optional
+
+from ..constants.default_config import default_config
+from ..constants.main import (
+ CONTINUE_GLOBAL_FOLDER,
+ CONTINUE_SERVER_FOLDER,
+ CONTINUE_SESSIONS_FOLDER,
+)
+
+
+def find_data_file(filename):
+ datadir = os.path.dirname(__file__)
+ return os.path.abspath(os.path.join(datadir, filename))
+
+
+def getGlobalFolderPath():
+ path = os.path.join(os.path.expanduser("~"), CONTINUE_GLOBAL_FOLDER)
+ os.makedirs(path, exist_ok=True)
+ return path
+
+
+def getSessionsFolderPath():
+ path = os.path.join(getGlobalFolderPath(), CONTINUE_SESSIONS_FOLDER)
+ os.makedirs(path, exist_ok=True)
+ return path
+
+
+def getServerFolderPath():
+ path = os.path.join(getGlobalFolderPath(), CONTINUE_SERVER_FOLDER)
+ os.makedirs(path, exist_ok=True)
+ return path
+
+
+def getDevDataFolderPath():
+ path = os.path.join(getGlobalFolderPath(), "dev_data")
+ os.makedirs(path, exist_ok=True)
+ return path
+
+
+def getDiffsFolderPath():
+ path = os.path.join(getGlobalFolderPath(), "diffs")
+ os.makedirs(path, exist_ok=True)
+ return path
+
+
+def getDevDataFilePath(table_name: str):
+ filepath = os.path.join(getDevDataFolderPath(), f"{table_name}.jsonl")
+ if not os.path.exists(filepath):
+ with open(filepath, "w") as f:
+ f.write("")
+
+ return filepath
+
+
+def getMeilisearchExePath():
+ binary_name = "meilisearch.exe" if os.name == "nt" else "meilisearch"
+ path = os.path.join(getServerFolderPath(), binary_name)
+ return path
+
+
+def getSessionFilePath(session_id: str):
+ path = os.path.join(getSessionsFolderPath(), f"{session_id}.json")
+ os.makedirs(os.path.dirname(path), exist_ok=True)
+ return path
+
+
+def getSessionsListFilePath():
+ path = os.path.join(getSessionsFolderPath(), "sessions.json")
+ os.makedirs(os.path.dirname(path), exist_ok=True)
+ if not os.path.exists(path):
+ with open(path, "w") as f:
+ f.write("[]")
+ return path
+
+
+def migrateConfigFile(existing: str) -> Optional[str]:
+ if existing.strip() == "":
+ return default_config
+
+ migrated = (
+ existing.replace("MaybeProxyOpenAI", "OpenAIFreeTrial")
+ .replace("maybe_proxy_openai", "openai_free_trial")
+ .replace("unused=", "saved=")
+ .replace("medium=", "summarize=")
+ )
+ if migrated != existing:
+ return migrated
+
+ return None
+
+
+def getConfigFilePath() -> str:
+ path = os.path.join(getGlobalFolderPath(), "config.py")
+ os.makedirs(os.path.dirname(path), exist_ok=True)
+
+ if not os.path.exists(path):
+ with open(path, "w") as f:
+ f.write(default_config)
+ else:
+ # Make any necessary migrations
+ with open(path, "r") as f:
+ existing_content = f.read()
+
+ migrated = migrateConfigFile(existing_content)
+
+ if migrated is not None:
+ with open(path, "w") as f:
+ f.write(migrated)
+
+ return path
+
+
+def convertConfigImports(shorten: bool) -> str:
+ path = getConfigFilePath()
+ # Make any necessary migrations
+ with open(path, "r") as f:
+ existing_content = f.read()
+
+ if shorten:
+ migrated = existing_content.replace(
+ "from continuedev.src.continuedev.", "from continuedev."
+ )
+ else:
+ migrated = re.sub(
+ r"(?<!src\.)continuedev\.(?!src)",
+ "continuedev.",
+ existing_content,
+ )
+
+ with open(path, "w") as f:
+ f.write(migrated)
+
+
+def getLogFilePath():
+ path = os.path.join(getGlobalFolderPath(), "continue.log")
+ os.makedirs(os.path.dirname(path), exist_ok=True)
+ return path
+
+
+def getSavedContextGroupsPath():
+ path = os.path.join(getGlobalFolderPath(), "saved_context_groups.json")
+ os.makedirs(os.path.dirname(path), exist_ok=True)
+ if not os.path.exists(path):
+ with open(path, "w") as f:
+ f.write("\{\}")
+ return path