Giter Club home page Giter Club logo

dependencymap's Introduction

DependencyMap

dependencymap's People

Contributors

damakshn avatar

Stargazers

 avatar

Watchers

 avatar  avatar

dependencymap's Issues

Разработка объектной модели для SQLAlchemy

Модель должна охватывать следующие сущности:

  • АРМы;
  • Базы, используемые в системе;
  • Файлы исходников;
  • Соединения АРМов с базами;
  • Компоненты форм для работы с БД (с текстами запросов);
  • Таблицы баз данных;
  • Представления, процедуры и функции - те объекты, которые содержат SQL;
  • Взаимосвязи между компонентами, таблицами и процедурами;

Связь между объектами является отдельной сущностью и обладает характеристиками;

Сделать нормальный конфиг

Добавить конфигурационный json-файл для хранения путей к папкам с исходниками.
Конфиг должен содержать:

  • Пути к АРМам;
  • Данные для соединения с рабочей БД;
  • Данные для соединения с БД информационной системы;

Довести модель до ума

  • Приделать orm events;
  • Пустые поля - где можно, где нельзя;
  • Значения по умолчанию;
  • Причесать repr;
  • методы from_components для ClientConnection и ClientQuery;
  • попробовать положить все прямые связи объекта в relationship;

Завершение работы над парсером

Итоговый продукт должен справляться с реальными файлами форм из боевой системы (4-5 тысяч строк с русскими буквами, SQL-запросами и т.д.)

Продумать алгоритм поиска упоминаний объектов БД в коде

В системе используется несколько баз, SQL-запросы АРМов могут обращаться сразу к нескольким, в базах есть таблицы, функции и т.д. с одинаковыми именами. Алгоритм поиска должен однозначно идентифицировать объект и определять из какой базы он взят.

У АРМов есть файл конфигурации .ini, в нём содержатся названия подключаемых БД;
Иногда в коде прописано полное имя таблицы (база.схема.название);

За подключение отвечает компонент TADOConnection с атрибутом ConnectionString;

Отправку запроса в большинстве случаев осуществляет какой-нибудь компонент с формы, который подключен к ADOConnection через свойство Connection.

База, с которой соединяется компонент, может динамически меняться в рантайме.

Текст SQL-запроса тоже может динамически изменяться.

Ускорение работы парсера

Научить парсер анализировать файлы быстрее - при обработке всех исходников ждать придётся довольно долго.

Ошибка chr() arg not in range(0x110000)

Возникает при декодировании кириллицы в некоторых файлах форм. В самих файлах написана двоичная белиберда; надо определить что это и найти способ привести исходники во вменяемый вид.

Интеграция delphitools

Интегрировать delphitools, реализовать обработку исходников:

  • извлечение данных по АРМам;
  • перебор файлов проекта;
  • извлечение компонентов;
  • поиск соединений АРМа с базами;
  • обновление по запросу данных об АРМе/файле по запросу;
  • занесение информации в базу.

Создать схему dfm в БНФ

Сделать формальное описание синтаксиса формата по форме Бэкуса — Наура. Если это поможет, будет хорошо.

Оформление пакета delphitools

Создать пакет, содержащий парсер форм и другие инструменты для обработки исходников, всё оформить как надо.

Конвертация файлов форм в другие форматы

Нужно переводить файлы форм в нативные типы данных питона, а оттуда - в json/xml/yaml (yaml выбран потому что он синтаксически намного ближе к dfm, чем любой другой), чтобы иметь возможность быстро обрабатывать содержащуюся в них информацию, пользуясь готовыми инструментами.
Уже кем-то написанные решения, переводящие dfm во что-то разумное либо написаны на делфи и не работают, либо просто не работают.
Превратить dfm в yml, выполнив несколько глобальных замен не получится, надо создавать полноценное решение.
Обратное преобразование (yaml-dfm, json-dfm) делать не нужно.

Разобраться с официальным парсером YAML

Дёрнуть официальный репозиторий и полазить по коду, разобраться, как парсер считывает информацию из файла, дробит информацию на токены, интерпретирует их и как формирует структуры данных в памяти. Это будет долго.

  • Узнать, как связываются классы;
  • Понять, как извлекаются и читаются токены;
  • Как разрешаются конфликты между токенами (например '-' как маркер списка и как обычный символ;
  • Как детектится конец файла;
  • Как происходит переключение состояний;
  • Понять, как происходит разбор данных от открытия файла до формирования готовой структуры в памяти;
  • Как конструируются структуры данных;
  • Как строится дерево документа;

Дополнительные тесты

  • Parser - переход в предыдущее состояние после разбора бинарника (ещё одно свойство после '}');
  • Tokenizer - декодирование русских букв: форматы, временные таблицы с '#' и '##';
  • Tokenizer - тесты многострочников во всех вариантах: со сложением строк и без, с разными вариантами конца строки (русская буква, кавычка, '+');
  • Tokenizer - закодированная табуляция в начале строки;
  • Composer - одинаковые ключи, вложенный объект;

Изменить способ определения даты обновления проекта

Считать дату обновления проекта следует не по дате обновления папки, а перебором всех входящих в проект файлов и выбора наибольшей даты. Подумать заодно о том, как изменится механизм интеграции delphitools с моделью данных после этого исправления.

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.