diff --git a/.idea/misc.xml b/.idea/misc.xml
index 6ba69809..bd51bbf3 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,4 @@
-
+
\ No newline at end of file
diff --git a/.idea/unicoding.iml b/.idea/unicoding.iml
index 3e4215da..21578784 100644
--- a/.idea/unicoding.iml
+++ b/.idea/unicoding.iml
@@ -14,7 +14,7 @@
-
+
diff --git a/accounting/api/account.py b/accounting/api/account.py
index e843e616..d8c3137d 100644
--- a/accounting/api/account.py
+++ b/accounting/api/account.py
@@ -1,7 +1,7 @@
from ninja import Router
from ninja.security import django_auth
from django.shortcuts import get_object_or_404
-from accounting.models import Account, AccountTypeChoices
+from accounting.models import Account, AccountTypeChoices,Balance
from accounting.schemas import AccountOut, FourOFourOut, GeneralLedgerOut
from typing import List
from django.db.models import Sum, Avg
@@ -51,7 +51,7 @@ def get_account_balances(request):
result = []
for a in accounts:
result.append({
- 'account': a.name, 'balance': list(a.balance())
+ 'account': a.name, 'balance': list(a.M_Balance())
})
return status.HTTP_200_OK, result
@@ -59,29 +59,29 @@ def get_account_balances(request):
-class Balance:
- def __init__(self, balances):
- balance1 = balances[0]
- balance2 = balances[1]
-
- if balance1['currency'] == 'USD':
- balanceUSD = balance1['sum']
- balanceIQD = balance2['sum']
- else:
- balanceIQD = balance1['sum']
- balanceUSD = balance2['sum']
-
- self.balanceUSD = balanceUSD
- self.balanceIQD = balanceIQD
-
- def __add__(self, other):
- self.balanceIQD += other.balanceIQD
- self.balanceUSD += other.balanceUSD
- return [{
- 'currency': 'USD',
- 'sum': self.balanceUSD
- }, {
- 'currency': 'IQD',
- 'sum': self.balanceIQD
- }]
+# class Balance:
+# def __init__(self, balances):
+# balance1 = balances[0]
+# balance2 = balances[1]
+#
+# if balance1['currency'] == 'USD':
+# balanceUSD = balance1['sum']
+# balanceIQD = balance2['sum']
+# else:
+# balanceIQD = balance1['sum']
+# balanceUSD = balance2['sum']
+#
+# self.balanceUSD = balanceUSD
+# self.balanceIQD = balanceIQD
+#
+# def __add__(self, other):
+# self.balanceIQD += other.balanceIQD
+# self.balanceUSD += other.balanceUSD
+# return [{
+# 'currency': 'USD',
+# 'sum': self.balanceUSD
+# }, {
+# 'currency': 'IQD',
+# 'sum': self.balanceIQD
+# }]
diff --git a/accounting/models.py b/accounting/models.py
index a7d49b7f..c89d5caa 100644
--- a/accounting/models.py
+++ b/accounting/models.py
@@ -3,7 +3,7 @@
from django.dispatch import receiver
from django.db.models.signals import post_save
from accounting.exceptions import AccountingEquationError
-
+from decimal import Decimal
'''
Account
@@ -48,8 +48,72 @@ class CurrencyChoices(models.TextChoices):
IQD = 'IQD', 'IQD'
+class Balance:
+ def __init__(self, balances):
+ try:
+ balance1 = balances[0]
+ except IndexError:
+ balance1 = {'currency': 'USD', 'sum': 0}
+ try:
+ balance2 = balances[1]
+ except IndexError:
+ if balance1['currency'] == 'USD':
+ balance2 = {'currency': 'IQD', 'sum': Decimal(0)}
+ else:
+ balance2 = {'currency': 'USD', 'sum': Decimal(0)}
+
+ if balance1['currency'] == 'USD':
+ balanceUSD = balance1['sum']
+ balanceIQD = balance2['sum']
+ else:
+ balanceIQD = balance1['sum']
+ balanceUSD = balance2['sum']
+
+ self.balanceUSD = balanceUSD
+ self.balanceIQD = balanceIQD
+
+ def __add__(self, other):
+ self.balanceIQD += other.balanceIQD
+ self.balanceUSD += other.balanceUSD
+ return [{
+ 'currency': 'USD',
+ 'sum': self.balanceUSD
+ }, {
+ 'currency': 'IQD',
+ 'sum': self.balanceIQD
+ }]
+ def __radd__(self, other):
+ if other == 0: #
+ return self
+ else:
+ return self.__add__(other)
+
+ def __gt__(self, other):
+ return self.balanceUSD > other.balanceUSD, self.balanceIQD > other.balanceIQD
+
+ def __lt__(self, other):
+ return self.balanceUSD < other.balanceUSD, self.balanceIQD < other.balanceIQD
+
+ def is_zero(self):
+ if self.balanceUSD == 0 and self.balanceIQD == 0:
+ return True
+ else:
+ return False
+
+
+
+
+
+
+
+
+
+
+
+
+
class Account(models.Model):
- parent = models.ForeignKey('self', null=True, blank=True, on_delete=models.SET_NULL)
+ parent = models.ForeignKey('self', null=True, blank=True, on_delete=models.SET_NULL, related_name='children')
type = models.CharField(max_length=255, choices=AccountTypeChoices.choices)
name = models.CharField(max_length=255)
code = models.CharField(max_length=20, null=True, blank=True)
@@ -62,6 +126,23 @@ def __str__(self):
def balance(self):
return self.journal_entries.values('currency').annotate(sum=Sum('amount')).order_by()
+ def M_Balance(self):
+ M_child = self.children.all()
+ list_balances = []
+
+ if len(M_child) == 0:
+ return self.balance()
+
+ elif len(M_child) > 0:
+ if len(M_child) == 1:
+ return self.balance()
+ else:
+ for r in list(M_child):
+ list_child = r.balance()
+ obj = Balance(list_child)
+ list_balances.append(obj)
+ return sum(list_balances)
+
# def save(
# self, force_insert=False, force_update=False, using=None, update_fields=None
# ):
diff --git a/unicoding_venv/bin/Activate.ps1 b/unicoding_venv/bin/Activate.ps1
deleted file mode 100644
index 7bc3e7c6..00000000
--- a/unicoding_venv/bin/Activate.ps1
+++ /dev/null
@@ -1,241 +0,0 @@
-<#
-.Synopsis
-Activate a Python virtual environment for the current PowerShell session.
-
-.Description
-Pushes the python executable for a virtual environment to the front of the
-$Env:PATH environment variable and sets the prompt to signify that you are
-in a Python virtual environment. Makes use of the command line switches as
-well as the `pyvenv.cfg` file values present in the virtual environment.
-
-.Parameter VenvDir
-Path to the directory that contains the virtual environment to activate. The
-default value for this is the parent of the directory that the Activate.ps1
-script is located within.
-
-.Parameter Prompt
-The prompt prefix to display when this virtual environment is activated. By
-default, this prompt is the name of the virtual environment folder (VenvDir)
-surrounded by parentheses and followed by a single space (ie. '(.venv) ').
-
-.Example
-Activate.ps1
-Activates the Python virtual environment that contains the Activate.ps1 script.
-
-.Example
-Activate.ps1 -Verbose
-Activates the Python virtual environment that contains the Activate.ps1 script,
-and shows extra information about the activation as it executes.
-
-.Example
-Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv
-Activates the Python virtual environment located in the specified location.
-
-.Example
-Activate.ps1 -Prompt "MyPython"
-Activates the Python virtual environment that contains the Activate.ps1 script,
-and prefixes the current prompt with the specified string (surrounded in
-parentheses) while the virtual environment is active.
-
-.Notes
-On Windows, it may be required to enable this Activate.ps1 script by setting the
-execution policy for the user. You can do this by issuing the following PowerShell
-command:
-
-PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
-
-For more information on Execution Policies:
-https://go.microsoft.com/fwlink/?LinkID=135170
-
-#>
-Param(
- [Parameter(Mandatory = $false)]
- [String]
- $VenvDir,
- [Parameter(Mandatory = $false)]
- [String]
- $Prompt
-)
-
-<# Function declarations --------------------------------------------------- #>
-
-<#
-.Synopsis
-Remove all shell session elements added by the Activate script, including the
-addition of the virtual environment's Python executable from the beginning of
-the PATH variable.
-
-.Parameter NonDestructive
-If present, do not remove this function from the global namespace for the
-session.
-
-#>
-function global:deactivate ([switch]$NonDestructive) {
- # Revert to original values
-
- # The prior prompt:
- if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {
- Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt
- Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT
- }
-
- # The prior PYTHONHOME:
- if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {
- Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME
- Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME
- }
-
- # The prior PATH:
- if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {
- Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH
- Remove-Item -Path Env:_OLD_VIRTUAL_PATH
- }
-
- # Just remove the VIRTUAL_ENV altogether:
- if (Test-Path -Path Env:VIRTUAL_ENV) {
- Remove-Item -Path env:VIRTUAL_ENV
- }
-
- # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:
- if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {
- Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force
- }
-
- # Leave deactivate function in the global namespace if requested:
- if (-not $NonDestructive) {
- Remove-Item -Path function:deactivate
- }
-}
-
-<#
-.Description
-Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the
-given folder, and returns them in a map.
-
-For each line in the pyvenv.cfg file, if that line can be parsed into exactly
-two strings separated by `=` (with any amount of whitespace surrounding the =)
-then it is considered a `key = value` line. The left hand string is the key,
-the right hand is the value.
-
-If the value starts with a `'` or a `"` then the first and last character is
-stripped from the value before being captured.
-
-.Parameter ConfigDir
-Path to the directory that contains the `pyvenv.cfg` file.
-#>
-function Get-PyVenvConfig(
- [String]
- $ConfigDir
-) {
- Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"
-
- # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).
- $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue
-
- # An empty map will be returned if no config file is found.
- $pyvenvConfig = @{ }
-
- if ($pyvenvConfigPath) {
-
- Write-Verbose "File exists, parse `key = value` lines"
- $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath
-
- $pyvenvConfigContent | ForEach-Object {
- $keyval = $PSItem -split "\s*=\s*", 2
- if ($keyval[0] -and $keyval[1]) {
- $val = $keyval[1]
-
- # Remove extraneous quotations around a string value.
- if ("'""".Contains($val.Substring(0, 1))) {
- $val = $val.Substring(1, $val.Length - 2)
- }
-
- $pyvenvConfig[$keyval[0]] = $val
- Write-Verbose "Adding Key: '$($keyval[0])'='$val'"
- }
- }
- }
- return $pyvenvConfig
-}
-
-
-<# Begin Activate script --------------------------------------------------- #>
-
-# Determine the containing directory of this script
-$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
-$VenvExecDir = Get-Item -Path $VenvExecPath
-
-Write-Verbose "Activation script is located in path: '$VenvExecPath'"
-Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"
-Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"
-
-# Set values required in priority: CmdLine, ConfigFile, Default
-# First, get the location of the virtual environment, it might not be
-# VenvExecDir if specified on the command line.
-if ($VenvDir) {
- Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"
-}
-else {
- Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
- $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
- Write-Verbose "VenvDir=$VenvDir"
-}
-
-# Next, read the `pyvenv.cfg` file to determine any required value such
-# as `prompt`.
-$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir
-
-# Next, set the prompt from the command line, or the config file, or
-# just use the name of the virtual environment folder.
-if ($Prompt) {
- Write-Verbose "Prompt specified as argument, using '$Prompt'"
-}
-else {
- Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"
- if ($pyvenvCfg -and $pyvenvCfg['prompt']) {
- Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"
- $Prompt = $pyvenvCfg['prompt'];
- }
- else {
- Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)"
- Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"
- $Prompt = Split-Path -Path $venvDir -Leaf
- }
-}
-
-Write-Verbose "Prompt = '$Prompt'"
-Write-Verbose "VenvDir='$VenvDir'"
-
-# Deactivate any currently active virtual environment, but leave the
-# deactivate function in place.
-deactivate -nondestructive
-
-# Now set the environment variable VIRTUAL_ENV, used by many tools to determine
-# that there is an activated venv.
-$env:VIRTUAL_ENV = $VenvDir
-
-if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
-
- Write-Verbose "Setting prompt to '$Prompt'"
-
- # Set the prompt to include the env name
- # Make sure _OLD_VIRTUAL_PROMPT is global
- function global:_OLD_VIRTUAL_PROMPT { "" }
- Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT
- New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt
-
- function global:prompt {
- Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
- _OLD_VIRTUAL_PROMPT
- }
-}
-
-# Clear PYTHONHOME
-if (Test-Path -Path Env:PYTHONHOME) {
- Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME
- Remove-Item -Path Env:PYTHONHOME
-}
-
-# Add the venv to the PATH
-Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH
-$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"
diff --git a/unicoding_venv/bin/activate b/unicoding_venv/bin/activate
deleted file mode 100644
index c4d653c2..00000000
--- a/unicoding_venv/bin/activate
+++ /dev/null
@@ -1,66 +0,0 @@
-# This file must be used with "source bin/activate" *from bash*
-# you cannot run it directly
-
-deactivate () {
- # reset old environment variables
- if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
- PATH="${_OLD_VIRTUAL_PATH:-}"
- export PATH
- unset _OLD_VIRTUAL_PATH
- fi
- if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
- PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
- export PYTHONHOME
- unset _OLD_VIRTUAL_PYTHONHOME
- fi
-
- # This should detect bash and zsh, which have a hash command that must
- # be called to get it to forget past commands. Without forgetting
- # past commands the $PATH changes we made may not be respected
- if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
- hash -r 2> /dev/null
- fi
-
- if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
- PS1="${_OLD_VIRTUAL_PS1:-}"
- export PS1
- unset _OLD_VIRTUAL_PS1
- fi
-
- unset VIRTUAL_ENV
- if [ ! "${1:-}" = "nondestructive" ] ; then
- # Self destruct!
- unset -f deactivate
- fi
-}
-
-# unset irrelevant variables
-deactivate nondestructive
-
-VIRTUAL_ENV="/Users/lzah/Desktop/unicoding/unicoding_venv"
-export VIRTUAL_ENV
-
-_OLD_VIRTUAL_PATH="$PATH"
-PATH="$VIRTUAL_ENV/bin:$PATH"
-export PATH
-
-# unset PYTHONHOME if set
-# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
-# could use `if (set -u; : $PYTHONHOME) ;` in bash
-if [ -n "${PYTHONHOME:-}" ] ; then
- _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
- unset PYTHONHOME
-fi
-
-if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
- _OLD_VIRTUAL_PS1="${PS1:-}"
- PS1="(unicoding_venv) ${PS1:-}"
- export PS1
-fi
-
-# This should detect bash and zsh, which have a hash command that must
-# be called to get it to forget past commands. Without forgetting
-# past commands the $PATH changes we made may not be respected
-if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
- hash -r 2> /dev/null
-fi
diff --git a/unicoding_venv/bin/activate.csh b/unicoding_venv/bin/activate.csh
deleted file mode 100644
index 41b83bb7..00000000
--- a/unicoding_venv/bin/activate.csh
+++ /dev/null
@@ -1,25 +0,0 @@
-# This file must be used with "source bin/activate.csh" *from csh*.
-# You cannot run it directly.
-# Created by Davide Di Blasi .
-# Ported to Python 3.3 venv by Andrew Svetlov
-
-alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate'
-
-# Unset irrelevant variables.
-deactivate nondestructive
-
-setenv VIRTUAL_ENV "/Users/lzah/Desktop/unicoding/unicoding_venv"
-
-set _OLD_VIRTUAL_PATH="$PATH"
-setenv PATH "$VIRTUAL_ENV/bin:$PATH"
-
-
-set _OLD_VIRTUAL_PROMPT="$prompt"
-
-if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
- set prompt = "(unicoding_venv) $prompt"
-endif
-
-alias pydoc python -m pydoc
-
-rehash
diff --git a/unicoding_venv/bin/activate.fish b/unicoding_venv/bin/activate.fish
deleted file mode 100644
index 7f9c9192..00000000
--- a/unicoding_venv/bin/activate.fish
+++ /dev/null
@@ -1,64 +0,0 @@
-# This file must be used with "source /bin/activate.fish" *from fish*
-# (https://fishshell.com/); you cannot run it directly.
-
-function deactivate -d "Exit virtual environment and return to normal shell environment"
- # reset old environment variables
- if test -n "$_OLD_VIRTUAL_PATH"
- set -gx PATH $_OLD_VIRTUAL_PATH
- set -e _OLD_VIRTUAL_PATH
- end
- if test -n "$_OLD_VIRTUAL_PYTHONHOME"
- set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
- set -e _OLD_VIRTUAL_PYTHONHOME
- end
-
- if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
- functions -e fish_prompt
- set -e _OLD_FISH_PROMPT_OVERRIDE
- functions -c _old_fish_prompt fish_prompt
- functions -e _old_fish_prompt
- end
-
- set -e VIRTUAL_ENV
- if test "$argv[1]" != "nondestructive"
- # Self-destruct!
- functions -e deactivate
- end
-end
-
-# Unset irrelevant variables.
-deactivate nondestructive
-
-set -gx VIRTUAL_ENV "/Users/lzah/Desktop/unicoding/unicoding_venv"
-
-set -gx _OLD_VIRTUAL_PATH $PATH
-set -gx PATH "$VIRTUAL_ENV/bin" $PATH
-
-# Unset PYTHONHOME if set.
-if set -q PYTHONHOME
- set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
- set -e PYTHONHOME
-end
-
-if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
- # fish uses a function instead of an env var to generate the prompt.
-
- # Save the current fish_prompt function as the function _old_fish_prompt.
- functions -c fish_prompt _old_fish_prompt
-
- # With the original prompt function renamed, we can override with our own.
- function fish_prompt
- # Save the return status of the last command.
- set -l old_status $status
-
- # Output the venv prompt; color taken from the blue of the Python logo.
- printf "%s%s%s" (set_color 4B8BBE) "(unicoding_venv) " (set_color normal)
-
- # Restore the return status of the previous command.
- echo "exit $old_status" | .
- # Output the original/"old" prompt.
- _old_fish_prompt
- end
-
- set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
-end
diff --git a/unicoding_venv/bin/django-admin b/unicoding_venv/bin/django-admin
deleted file mode 100755
index d398987e..00000000
--- a/unicoding_venv/bin/django-admin
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/Users/lzah/Desktop/unicoding/unicoding_venv/bin/python3.9
-# -*- coding: utf-8 -*-
-import re
-import sys
-from django.core.management import execute_from_command_line
-if __name__ == '__main__':
- sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
- sys.exit(execute_from_command_line())
diff --git a/unicoding_venv/bin/email_validator b/unicoding_venv/bin/email_validator
deleted file mode 100755
index 4591bd53..00000000
--- a/unicoding_venv/bin/email_validator
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/Users/lzah/Desktop/unicoding/unicoding_venv/bin/python3.9
-# -*- coding: utf-8 -*-
-import re
-import sys
-from email_validator import main
-if __name__ == '__main__':
- sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
- sys.exit(main())
diff --git a/unicoding_venv/bin/pip b/unicoding_venv/bin/pip
deleted file mode 100755
index 1b5e2763..00000000
--- a/unicoding_venv/bin/pip
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/Users/lzah/Desktop/unicoding/unicoding_venv/bin/python3.9
-# -*- coding: utf-8 -*-
-import re
-import sys
-from pip._internal.cli.main import main
-if __name__ == '__main__':
- sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
- sys.exit(main())
diff --git a/unicoding_venv/bin/pip3 b/unicoding_venv/bin/pip3
deleted file mode 100755
index 1b5e2763..00000000
--- a/unicoding_venv/bin/pip3
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/Users/lzah/Desktop/unicoding/unicoding_venv/bin/python3.9
-# -*- coding: utf-8 -*-
-import re
-import sys
-from pip._internal.cli.main import main
-if __name__ == '__main__':
- sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
- sys.exit(main())
diff --git a/unicoding_venv/bin/pip3.9 b/unicoding_venv/bin/pip3.9
deleted file mode 100755
index 1b5e2763..00000000
--- a/unicoding_venv/bin/pip3.9
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/Users/lzah/Desktop/unicoding/unicoding_venv/bin/python3.9
-# -*- coding: utf-8 -*-
-import re
-import sys
-from pip._internal.cli.main import main
-if __name__ == '__main__':
- sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
- sys.exit(main())
diff --git a/unicoding_venv/bin/pyrsa-decrypt b/unicoding_venv/bin/pyrsa-decrypt
deleted file mode 100755
index 712d8a71..00000000
--- a/unicoding_venv/bin/pyrsa-decrypt
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/Users/lzah/Desktop/unicoding/unicoding_venv/bin/python3.9
-# -*- coding: utf-8 -*-
-import re
-import sys
-from rsa.cli import decrypt
-if __name__ == '__main__':
- sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
- sys.exit(decrypt())
diff --git a/unicoding_venv/bin/pyrsa-encrypt b/unicoding_venv/bin/pyrsa-encrypt
deleted file mode 100755
index 602e08f5..00000000
--- a/unicoding_venv/bin/pyrsa-encrypt
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/Users/lzah/Desktop/unicoding/unicoding_venv/bin/python3.9
-# -*- coding: utf-8 -*-
-import re
-import sys
-from rsa.cli import encrypt
-if __name__ == '__main__':
- sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
- sys.exit(encrypt())
diff --git a/unicoding_venv/bin/pyrsa-keygen b/unicoding_venv/bin/pyrsa-keygen
deleted file mode 100755
index 8d7656ea..00000000
--- a/unicoding_venv/bin/pyrsa-keygen
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/Users/lzah/Desktop/unicoding/unicoding_venv/bin/python3.9
-# -*- coding: utf-8 -*-
-import re
-import sys
-from rsa.cli import keygen
-if __name__ == '__main__':
- sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
- sys.exit(keygen())
diff --git a/unicoding_venv/bin/pyrsa-priv2pub b/unicoding_venv/bin/pyrsa-priv2pub
deleted file mode 100755
index d7d5fb4a..00000000
--- a/unicoding_venv/bin/pyrsa-priv2pub
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/Users/lzah/Desktop/unicoding/unicoding_venv/bin/python3.9
-# -*- coding: utf-8 -*-
-import re
-import sys
-from rsa.util import private_to_public
-if __name__ == '__main__':
- sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
- sys.exit(private_to_public())
diff --git a/unicoding_venv/bin/pyrsa-sign b/unicoding_venv/bin/pyrsa-sign
deleted file mode 100755
index bf719e18..00000000
--- a/unicoding_venv/bin/pyrsa-sign
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/Users/lzah/Desktop/unicoding/unicoding_venv/bin/python3.9
-# -*- coding: utf-8 -*-
-import re
-import sys
-from rsa.cli import sign
-if __name__ == '__main__':
- sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
- sys.exit(sign())
diff --git a/unicoding_venv/bin/pyrsa-verify b/unicoding_venv/bin/pyrsa-verify
deleted file mode 100755
index 39849786..00000000
--- a/unicoding_venv/bin/pyrsa-verify
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/Users/lzah/Desktop/unicoding/unicoding_venv/bin/python3.9
-# -*- coding: utf-8 -*-
-import re
-import sys
-from rsa.cli import verify
-if __name__ == '__main__':
- sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
- sys.exit(verify())
diff --git a/unicoding_venv/bin/python b/unicoding_venv/bin/python
deleted file mode 120000
index e616d269..00000000
--- a/unicoding_venv/bin/python
+++ /dev/null
@@ -1 +0,0 @@
-python3.9
\ No newline at end of file
diff --git a/unicoding_venv/bin/python3 b/unicoding_venv/bin/python3
deleted file mode 120000
index e616d269..00000000
--- a/unicoding_venv/bin/python3
+++ /dev/null
@@ -1 +0,0 @@
-python3.9
\ No newline at end of file
diff --git a/unicoding_venv/bin/python3.9 b/unicoding_venv/bin/python3.9
deleted file mode 120000
index ffeae670..00000000
--- a/unicoding_venv/bin/python3.9
+++ /dev/null
@@ -1 +0,0 @@
-/opt/homebrew/opt/python@3.9/bin/python3.9
\ No newline at end of file
diff --git a/unicoding_venv/bin/sqlformat b/unicoding_venv/bin/sqlformat
deleted file mode 100755
index 1bbb7d15..00000000
--- a/unicoding_venv/bin/sqlformat
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/Users/lzah/Desktop/unicoding/unicoding_venv/bin/python3.9
-# -*- coding: utf-8 -*-
-import re
-import sys
-from sqlparse.__main__ import main
-if __name__ == '__main__':
- sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
- sys.exit(main())
diff --git a/unicoding_venv/lib/python3.9/site-packages/Django-4.0.6.dist-info/AUTHORS b/unicoding_venv/lib/python3.9/site-packages/Django-4.0.6.dist-info/AUTHORS
deleted file mode 100644
index dc2e77aa..00000000
--- a/unicoding_venv/lib/python3.9/site-packages/Django-4.0.6.dist-info/AUTHORS
+++ /dev/null
@@ -1,1029 +0,0 @@
-Django was originally created in late 2003 at World Online, the web division
-of the Lawrence Journal-World newspaper in Lawrence, Kansas.
-
-Here is an inevitably incomplete list of MUCH-APPRECIATED CONTRIBUTORS --
-people who have submitted patches, reported bugs, added translations, helped
-answer newbie questions, and generally made Django that much better:
-
- Aaron Cannon
- Aaron Swartz
- Aaron T. Myers
- Abeer Upadhyay
- Abhijeet Viswa
- Abhinav Patil
- Abhishek Gautam
- Abhyudai
- Adam Allred
- Adam Bogdał
- Adam Donaghy
- Adam Johnson
- Adam Malinowski
- Adam Vandenberg
- Adiyat Mubarak
- Adnan Umer
- Adrian Holovaty
- Adrien Lemaire
- Afonso Fernández Nogueira
- AgarFu
- Ahmad Alhashemi
- Ahmad Al-Ibrahim
- Ahmed Eltawela
- ajs
- Akash Agrawal
- Akis Kesoglou
- Aksel Ethem
- Akshesh Doshi
- alang@bright-green.com
- Alasdair Nicol
- Albert Wang
- Alcides Fonseca
- Aldian Fazrihady
- Aleksandra Sendecka
- Aleksi Häkli
- Alex Dutton
- Alexander Myodov
- Alexandr Tatarinov
- Alex Aktsipetrov
- Alex Becker
- Alex Couper
- Alex Dedul
- Alex Gaynor
- Alex Hill
- Alex Ogier
- Alex Robbins
- Alexey Boriskin
- Alexey Tsivunin
- Ali Vakilzade
- Aljaž Košir
- Aljosa Mohorovic
- Amit Chakradeo
- Amit Ramon
- Amit Upadhyay
- A. Murat Eren
- Ana Belen Sarabia
- Ana Krivokapic
- Andi Albrecht
- André Ericson
- Andrei Kulakov
- Andreas
- Andreas Mock
- Andreas Pelme
- Andrés Torres Marroquín
- Andrew Brehaut
- Andrew Clark
- Andrew Durdin
- Andrew Godwin
- Andrew Pinkham
- Andrews Medina
- Andrew Northall
- Andriy Sokolovskiy
- Andy Chosak
- Andy Dustman
- Andy Gayton
- andy@jadedplanet.net
- Anssi Kääriäinen
- ant9000@netwise.it
- Anthony Briggs
- Anthony Wright
- Anton Samarchyan
- Antoni Aloy
- Antonio Cavedoni
- Antonis Christofides
- Antti Haapala
- Antti Kaihola
- Anubhav Joshi
- Aram Dulyan
- arien
- Armin Ronacher
- Aron Podrigal
- Artem Gnilov
- Arthur
- Arthur Jovart
- Arthur Koziel
- Arthur Rio
- Arvis Bickovskis
- Arya Khaligh
- Aryeh Leib Taurog
- A S Alam
- Asif Saif Uddin
- atlithorn
- Audrey Roy
- av0000@mail.ru
- Axel Haustant
- Aymeric Augustin
- Bahadır Kandemir
- Baishampayan Ghose
- Baptiste Mispelon
- Barry Pederson
- Bartolome Sanchez Salado
- Barton Ip
- Bartosz Grabski
- Bashar Al-Abdulhadi
- Bastian Kleineidam
- Batiste Bieler
- Batman
- Batuhan Taskaya
- Baurzhan Ismagulov
- Ben Dean Kawamura
- Ben Firshman
- Ben Godfrey
- Benjamin Wohlwend
- Ben Khoo
- Ben Slavin
- Ben Sturmfels
- Berker Peksag
- Bernd Schlapsi
- Bernhard Essl
- berto
- Bill Fenner
- Bjørn Stabell
- Bo Marchman
- Bogdan Mateescu
- Bojan Mihelac
- Bouke Haarsma
- Božidar Benko
- Brad Melin
- Brandon Chinn
- Brant Harris
- Brendan Hayward
- Brendan Quinn
- Brenton Simpson
- Brett Cannon
- Brett Hoerner
- Brian Beck
- Brian Fabian Crain
- Brian Harring
- Brian Helba
- Brian Ray
- Brian Rosner
- Bruce Kroeze
- Bruno Alla
- Bruno Renié
- brut.alll@gmail.com
- Bryan Chow
- Bryan Veloso
- bthomas
- btoll@bestweb.net
- C8E
- Caio Ariede
- Calvin Spealman
- Cameron Curry
- Cameron Knight (ckknight)
- Can Burak Çilingir
- Can Sarıgöl
- Carl Meyer
- Carles Pina i Estany
- Carlos Eduardo de Paula
- Carlos Matías de la Torre
- Carlton Gibson
- cedric@terramater.net
- Chad Whitman
- ChaosKCW
- Charlie Leifer
- charly.wilhelm@gmail.com
- Chason Chaffin
- Cheng Zhang
- Chris Adams
- Chris Beaven
- Chris Bennett
- Chris Cahoon
- Chris Chamberlin
- Chris Jerdonek
- Chris Jones
- Chris Lamb
- Chris Streeter
- Christian Barcenas
- Christian Metts
- Christian Oudard
- Christian Tanzer
- Christoffer Sjöbergsson
- Christophe Pettus
- Christopher Adams
- Christopher Babiak
- Christopher Lenz
- Christoph Mędrela
- Chris Wagner
- Chris Wesseling
- Chris Wilson
- Claude Paroz
- Clint Ecker
- colin@owlfish.com
- Colin Wood
- Collin Anderson
- Collin Grady
- Colton Hicks
- Craig Blaszczyk
- crankycoder@gmail.com
- Curtis Maloney (FunkyBob)
- dackze+django@gmail.com
- Dagur Páll Ammendrup
- Dane Springmeyer
- Dan Fairs
- Daniel Alves Barbosa de Oliveira Vaz
- Daniel Duan
- Daniele Procida
- Daniel Greenfeld
- dAniel hAhler
- Daniel Jilg
- Daniel Lindsley
- Daniel Poelzleithner
- Daniel Pyrathon
- Daniel Roseman
- Daniel Tao
- Daniel Wiesmann
- Danilo Bargen
- Dan Johnson
- Dan Palmer
- Dan Poirier
- Dan Stephenson
- Dan Watson
- dave@thebarproject.com
- David Ascher
- David Avsajanishvili
- David Blewett
- David Brenneman
- David Cramer
- David Danier
- David Eklund
- David Foster
- David Gouldin
- david@kazserve.org
- David Krauth
- David Larlet
- David Reynolds
- David Sanders
- David Schein
- David Tulig
- David Winterbottom
- David Wobrock
- Davide Ceretti
- Deep L. Sukhwani
- Deepak Thukral
- Denis Kuzmichyov
- Dennis Schwertel
- Derek Willis
- Deric Crago
- deric@monowerks.com
- Deryck Hodge
- Dimitris Glezos
- Dirk Datzert
- Dirk Eschler
- Dmitri Fedortchenko
- Dmitry Jemerov
- dne@mayonnaise.net
- Dolan Antenucci
- Donald Harvey
- Donald Stufft
- Don Spaulding
- Doug Beck
- Doug Napoleone
- dready
- dusk@woofle.net
- Dustyn Gibson
- Ed Morley
- Egidijus Macijauskas
- eibaan@gmail.com
- elky
- Emmanuelle Delescolle
- Emil Stenström
- enlight
- Enrico
- Eric Boersma
- Eric Brandwein
- Eric Floehr
- Eric Florenzano
- Eric Holscher
- Eric Moritz
- Eric Palakovich Carr
- Erik Karulf
- Erik Romijn
- eriks@win.tue.nl
- Erwin Junge
- Esdras Beleza
- Espen Grindhaug
- Étienne Beaulé
- Eugene Lazutkin
- Evan Grim
- Fabian Büchler
- Fabrice Aneche
- Farhaan Bukhsh
- favo@exoweb.net
- fdr
- Federico Capoano
- Felipe Lee
- Filip Noetzel
- Filip Wasilewski
- Finn Gruwier Larsen
- Flávio Juvenal da Silva Junior
- flavio.curella@gmail.com
- Florian Apolloner
- Florian Demmer
- Florian Moussous
- Fran Hrženjak
- Francisco Albarran Cristobal
- Francisco Couzo
- François Freitag
- Frank Tegtmeyer
- Frank Wierzbicki
- Frank Wiles
- František Malina
- Fraser Nevett
- Gabriel Grant
- Gabriel Hurley
- gandalf@owca.info
- Garry Lawrence
- Garry Polley
- Garth Kidd
- Gary Wilson
- Gasper Koren
- Gasper Zejn
- Gavin Wahl
- Ge Hanbin
- geber@datacollect.com
- Geert Vanderkelen
- George Karpenkov
- George Song
- George Vilches
- Georg "Hugo" Bauer
- Georgi Stanojevski
- Gerardo Orozco
- Gil Gonçalves
- Girish Kumar
- Girish Sontakke
- Gisle Aas
- Glenn Maynard