Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

House Keeping - Too Many Exceptions to SG Versions #39

Open
Fujio-Turner opened this issue Aug 23, 2024 · 0 comments
Open

House Keeping - Too Many Exceptions to SG Versions #39

Fujio-Turner opened this issue Aug 23, 2024 · 0 comments

Comments

@Fujio-Turner
Copy link
Owner

Your approach to handling different versions of Sync Gateway logs based on a configuration file is smart. Here's how you could implement this:

1. Modify config.json

Add a new field for the Sync Gateway version:

{
  "sgversionParse": "3.1.1",
  // other config entries
}

2. Modify SGLogReader Class

Update the __init__ method to read this configuration:

import json
from packaging import version

class SGLogReader:
    def __init__(self, configFile):
        with open(configFile, 'r') as file:
            config = json.load(file)
        
        self.sg_version = version.parse(config.get('sgversionParse', '0.0.0'))
        # Other initialization code...

    def parse_log_entry(self, log_entry):
        if self.sg_version >= version.parse('3.1.0'):
            # Parsing logic for versions >= 3.1.0
            # Example:
            return self._parse_v3_1(log_entry)
        elif self.sg_version >= version.parse('3.0.0'):
            # Parsing logic for versions >= 3.0.0 but < 3.1.0
            return self._parse_v3_0(log_entry)
        else:
            # Default or older version parsing
            return self._parse_default(log_entry)

    def _parse_v3_1(self, log_entry):
        # Specific parsing logic for version 3.1.x
        pass

    def _parse_v3_0(self, log_entry):
        # Specific parsing logic for version 3.0.x
        pass

    def _parse_default(self, log_entry):
        # Default parsing logic
        pass

3. Using packaging for Version Comparison

  • The packaging library (which you might need to install with pip install packaging) provides version.parse which can handle complex version numbers like 3.1.1 or 3.0.9.

4. Additional Considerations:

  • Error Handling: Ensure you handle cases where the version number might be missing or malformed in the config file.
  • Flexibility: This approach allows for easy addition of new parsing methods for future versions without changing the main logic significantly.
  • Testing: Your tests should now include scenarios for different versions of Sync Gateway logs.

5. Example Test:

def test_parse_log_entry_version_3_1(self):
    # Assuming you have a way to mock or set the version for testing
    reader = SGLogReader('path_to_config.json')  # Mock config with version 3.1.1
    sample_entry = "Sample log entry for 3.1.1"
    parsed = reader.parse_log_entry(sample_entry)
    # Assert expected parsing results

Benefits:

  • Maintainability: New versions can be added without altering existing code.
  • Flexibility: The version check allows for dynamic behavior based on the log format.
  • Decoupling: Parsing logic for different versions is separated, making it easier to understand and maintain.

This approach leverages configuration for flexibility, uses Python's strengths in handling complex logic with simple syntax, and ensures that your application can adapt to different versions of Sync Gateway logs with minimal code changes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant